Сброс Pic18 от C - PullRequest
       30

Сброс Pic18 от C

3 голосов
/ 17 октября 2008

Каков наилучший способ сброса Pic18 с использованием кода C С компилятором HiTech Pic18 C

Edit:

Я использую

void reset()
{
#asm 
  reset
#endasm
}

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

Ответы [ 5 ]

7 голосов
/ 20 октября 2008

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

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

5 голосов
/ 29 июля 2009

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

1 голос
/ 17 октября 2008

Здесь FAQ здесь .

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

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

# asm ljmp 0x0000

# endasm

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

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

0 голосов
/ 17 октября 2008

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

0 голосов
/ 17 октября 2008

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

...