Вопрос

Как лучше всего сбросить PIC18 с помощью C -кода с компилятором Hitech Pic18 C

Редактировать:

Я сейчас использую

void reset()
{
#asm 
  reset
#endasm
}

но должен быть лучший способ

Это было полезно?

Решение

Есть Часто задаваемые вопросы здесь.

Вопрос:Как мне сбросить настройки микро?

Один из способов - сбросить все переменные в свои значения по умолчанию, как указано в руководстве PIC.Затем используйте язык сборки, чтобы перейти к местоположению 0x0000 в микро.

#asm ljmp 0x0000

#эндасм

Это довольно безопасно в использовании, даже когда вы называете прерываний или процедур.Micros серии PIC 16X имеют 8 уровней стека.Каждый раз, когда вызывается процедура, один уровень стека используется для обратного адреса.Это круглый буфер, поэтому даже если микро -уровни на 7 уровней процедуры глубоко и при прерывании при вызванном сбросе, это новое начало буфера стека, и микро -микросхема будет продолжаться в соответствии с нормальными.

Другой способ - установить сторожевой пейзаж, когда чип запрограммирован, и использовать инструкции clrwdt () на протяжении всей кода.Если вы захотите сбросить Micro, прекратите очищать бит сторожевого пса, и микросхема сбросится примерно через 18 мс до 2 секунд в зависимости от прескалера.

Другие советы

Компиляторы обычно имеют встроенную функцию сброса(), но она делает именно то, что делает ваша функция, а фактическое имя может варьироваться от компилятора к компилятору.

Вы уже делаете это наилучшим образом.

Ваш ответ - лучший способ, который я знаю.Ключевым моментом является то, что у вас есть инструкция ассемблера внутри вызова функции, сама по себе.Компилятор не будет оптимизировать функцию, содержащую встроенный ассемблер, поэтому, если вы включите инструкцию сброса в очень большую функцию, компилятор не будет оптимизировать какой-либо код в этой функции.Вы избежали этого, поместив Reset в отдельную функцию.Код этой функции не будет оптимизирован, но кого это волнует, ведь это такая маленькая функция.

Если только не существует библиотечной функции, определенной библиотекой времени выполнения поставщика компилятора (если такая библиотека вообще существует в мире микроконтроллеров...но так и должно быть), то нет.Сам по себе C, конечно, не поможет вам, поскольку «перезагрузка» — это слишком большая проблема, специфичная для платформы, чтобы C мог ее решить.

Я использую компилятор ccsinfo.com, который имеет аналогичный вызов API для сброса PIC, но я думаю, что решение компилятора поступит правильно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top