Restablecer un Pic18 desde C
Pregunta
¿Cuál es la mejor manera de restablecer un Pic18 usando el código C? Con el compilador HiTech Pic18 C
Editar:
Estoy usando actualmente
void reset()
{
#asm
reset
#endasm
}
pero debe haber una mejor manera
Solución
Hay una Preguntas frecuentes aquí .
P: ¿Cómo reinicio el micro?
Una forma es restablecer todas las variables a sus valores por defecto, como se indica en el PIC manual. Luego, use lenguaje ensamblador para saltar a la ubicación 0x0000 en el micro.
#asm ljmp 0x0000
#endasm
Esto es bastante seguro de usar, incluso cuando llamado dentro de las interrupciones o procedimientos La serie PIC 16x micros. tiene 8 niveles de pila. Cada vez que un Se llama procedimiento, un nivel de pila. se usa para la dirección del remitente. Eso es un búfer circular, por lo que incluso si el micro es de 7 niveles de procedimiento de profundidad y en una interrupción cuando se reinicia llamado, este es el nuevo comienzo de la buffer de pila, y la micro voluntad continuar según lo normal.
Otra forma es configurar el perro guardián temporizador cuando el chip está programado, y usar las instrucciones CLRWDT () todo el tiempo el código. Cuando quieras que el micro reiniciar, dejar de borrar el bit guardián y el micro se reiniciará después de alrededor 18ms a 2 segundos dependiendo de la preescalador.
Otros consejos
Los compiladores generalmente tienen su propia función reset () incorporada, pero solo hace exactamente lo que hace su función, y el nombre real puede variar de un compilador a otro.
Ya lo estás haciendo de la mejor manera posible.
Tu respuesta es la mejor manera que conozco. La clave es que tiene las instrucciones de ensamblaje dentro de una llamada de función, todo por sí mismo. El compilador no optimizará una función que tenga ensamblado en línea, por lo que si incluye la instrucción de reinicio en línea en una función muy grande, el compilador no optimizará ninguno de los códigos en esa función. Has evitado esto poniendo a Restablecer en su propia función. El código en esta función no se optimizará, pero a quién le importa, ya que es una función tan pequeña.
A menos que haya una función de biblioteca definida por la biblioteca de tiempo de ejecución del proveedor del compilador (si existe tal lib en el mundo del microcontrolador ... pero debería), entonces no. C en sí mismo no te ayudará, haciendo un reinicio " es demasiado un problema específico de la plataforma para que C lo cubra.
Uso el compilador ccsinfo.com, que tiene una llamada de API similar para restablecer el PIC, pero creo que la solución del compilador haría lo correcto.