¿Cuál es la diferencia entre el modo de depuración y la ejecución normal en dspic?

1

Tengo un microcontrolador dspic33fj128mc802. Estoy usando mplabx y compilador xc16. Tengo mi oscilador interno configurado a 80MHz.

He logrado configurar FreeRTOS en el dispositivo y todo se compila sin errores. Estoy alternando un pin de salida con una frecuencia de 100Hz. Si estoy en modo de depuración y mido el pin con un osciloscopio, veo una onda cuadrada perfecta con la frecuencia esperada de 50 Hz, la alta tensión es 3.313 V y la baja es 0V. Esto está en modo de depuración y esto es lo que debería hacer.

Si dejo que la aplicación se ejecute por sí sola, sin la depuración, tendré impulsos en intervalos de aproximadamente 17 ms. Cada impulso dura 3.82 microsecs con 3.313 voltios y luego una disminución muy rápida a 0 voltios. No tengo ni idea de qué está causando esto. ¿Alguien ha encontrado algo parecido antes? ¿Podría ser la falla del chip o la falla de mi programa o la falla de FreeRTOS?

    
pregunta Tomi_Stack

3 respuestas

3

La diferencia entre el modo de producción y el modo de depuración normalmente es doble.

Primero, el compilador realiza diferentes optimizaciones (leer: mejor) en el modo de producción. Por ejemplo, eliminar el código que podría no ser necesario, calcular previamente las constantes, incorporar llamadas a funciones, desenrollar bucles, etc. En el modo de depuración, tales optimizaciones podrían dificultar la depuración, ya que, por lo tanto, es posible que no se pueda seguir paso a paso el código (ya que algunas líneas pueden no tener el código de máquina correspondiente después de la compilación).

En segundo lugar, las bibliotecas que se utilizan pueden ejecutar un código diferente por completo. En el modo de depuración puede haber salida de registro adicional (aunque es poco probable en una MCU). Puede haber controles de cordura adicionales, por ejemplo. para límites de matriz o desbordamientos de enteros. Incluso el diseño de memoria de algunas estructuras puede diferir. Entonces, cuando ves un problema en el modo de producción, pero no en el modo de depuración, has encontrado un Heisenbug .

Ya que dice que su código es bastante complejo, ¿puede reducirlo a un ejemplo mínimo que muestre el comportamiento? Intente reducirlo a la cantidad mínima de tareas y luego comience a agregarlas nuevamente. Cuando vea el error, puede limitar el área de código que lo causa.

También puede ver los cambios que la depuración podría introducir. Deshabilitar la optimización en la compilación de producción. Mire la documentación de FreeRTOS que se modificó en el modo de depuración e intente trabajar desde allí.

Para verificar si hay reinicios: simplemente alterna un pin que no se usa al principio del programa.

    
respondido por el hli
0

Como dijo @hli, el nivel de optimización puede ser diferente. Una falla en particular que a menudo confunde a las personas es que si el compilador no ve ningún cambio en una variable en una rutina, puede optimizar a su alrededor. Por lo tanto, adopte el hábito de declarar a todos sus globales como volátiles. Prueba esto para ver si soluciona tu problema. No puede doler, toma momentos, forma correcta y podría solucionar el problema.

De lo contrario, intente desactivar la optimización en la compilación y vea si esto ayuda.

    
respondido por el Scott Seidman
0

Es un tiro largo, pero el reloj de la CPU se puede configurar para funcionar a diferentes velocidades cuando está en modo de depuración. Puede valer un cheque rápido. En MPLAB X, vaya a las propiedades del proyecto, seleccione su hardware de depuración que estará en la parte superior de la lista, luego en el lado derecho verá un menú desplegable titulado "Categorías de opciones", seleccione el reloj. Hay una opción para tener el FRC en modo de depuración, y una opción para establecer la velocidad de instrucción de tiempo de ejecución objetivo. Me temo que no tengo ni idea de si estas configuraciones pueden afectar la velocidad de reloj que has establecido en tu código o de qué manera, pero vale la pena una investigación rápida. Buena suerte.

    
respondido por el user56960

Lea otras preguntas en las etiquetas