Estoy trabajando con PIC24FV16KM202 .
Me encuentro con reinicios al implementar Dispatch , que es un protocolo en serie en el que estoy trabajando que surgió de un proyecto .
El ejemplo en el que estoy trabajando es una función que se ejecuta cuando se ha enviado un punto final datos. Estoy usando una secuencia de comandos de Python para enviar ese dato a través de la UART a la unidad de usuario. Cuando se reciben esos datos, se ejecuta mySubscriberFunction
.
void mySubscriberFunction(void){
static uint16_t i = 0;
i++;
/* publish i back to the sender to 'close the loop' */
DIS_publish("i,u16", &i);
}
Como puedes ver, mySubscriberFunction
es bastante simple. Incrementa un contador y publica los datos a cualquier otro suscriptor. Mi script de Python recibe estos datos y los muestra en la consola.
Mi problema es que después de que sea ~ 998 (ha ocurrido algo más alto y más bajo, pero generalmente 998), simplemente se restablece. Cuando estoy ejecutando en modo de depuración, el depurador deja de ejecutar. Cuando estoy ejecutando en modo de producción, i
simplemente se reinicia en 1 y continúa contando.
Otra cosa que es extraña es que, durante la depuración, he detenido el depurador. Si hago una pausa en el depurador en i = 100, entonces el restablecimiento ocurre en ~ 1098 en lugar de ~ 998. Si hago una pausa en i = 200, el restablecimiento se produce en ~ 1198 en lugar de ~ 998, y así sucesivamente.
Los sospechosos habituales para este tipo de reinicio están intentando ejecutar una interrupción que no tiene un vector de interrupción, sobrescribiendo la PC y / o la pila con basura, u otros problemas divertidos y difíciles de depurar como ese. Esperaba que alguien de allí pudiera haber experimentado un problema similar y que pudiera orientarme en la dirección correcta.
El envío no es un proyecto grande, por lo que es plausible mirar a través del código para detectar el problema, pero sospecho que el síntoma del depurador apuntará a alguien en la dirección correcta. Gracias!