Pergunta

Qual é a melhor maneira de redefinir um pic18 usando o código C com o compilador Hitech Pic18 C

Editar:

Estou usando atualmente

void reset()
{
#asm 
  reset
#endasm
}

mas deve haver uma maneira melhor

Foi útil?

Solução

Há um Perguntas frequentes aqui.

P:Como faço para reiniciar o micro?

Uma maneira é redefinir todas as variáveis para seus padrões, conforme listado no PIC Manual.Em seguida, use a linguagem assembly para saltar para o local 0x0000 na Micro.

#asm ljmp 0x0000

#endasm

Isso é bastante seguro de usar, mesmo quando chamado dentro de interrupções ou Procedimentos.Os micros da série PIC 16x tem 8 níveis de pilha.Cada vez que um procedimento é chamado, um nível de pilha é usado para o endereço de retorno.Ela é um buffer circular, portanto, mesmo que o micro é 7 níveis de procedimento de profundidade e em uma interrupção quando uma redefinição é Este é o novo começo do buffer de pilha, e o micro será continuar normalmente.

Outra forma é definir o cão de guarda temporizador quando o chip é programado, e use as instruções CLRWDT() até o fim o código.Quando você quer que o micro para redefinir, parar de limpar o bit do cão de guarda e o micro será redefinido depois de cerca de 18ms a 2 segundos dependendo do pré-escalonador.

Outras dicas

Os compiladores geralmente têm sua própria função de redefinição () incorporada, mas apenas faz exatamente o que sua função faz, e o nome real pode variar de compilador para compilador.

Você já está fazendo da melhor maneira possível.

Sua resposta é a melhor maneira que conheço. A chave é que você tem a instrução de montagem dentro de uma chamada de função, por si só. O compilador não otimizará uma função que possui montagem embutida; portanto, se você incluir a instrução de redefinição em linha para uma função muito grande, o compilador não otimizará nenhum código nessa função. Você evitou isso colocando a redefinição em sua própria função. O código nesta função não será otimizado, mas quem se importa, pois é uma função tão pequena.

A menos que haja uma função de biblioteca definida pela biblioteca de tempo de execução do fornecedor do compilador (se esse LIB existe no mundo do microcontrolador ... mas deveria), então não. O próprio C certamente não o ajudará, fazer "uma redefinição" é um problema específico da plataforma para C para cobri-lo.

Eu uso o compilador ccsinfo.com, que tem uma API semelhante a redefinir a foto, mas acho que a solução do compilador faria a coisa certa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top