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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top