Estoy trabajando en un programa integrado en el microcontrolador TM4C123GH6PM de la plataforma de lanzamiento Tiva C Series de Texas Instruments.
Se supone que el programa muestrea un ADC externo en una interrupción de temporizador y coloca los valores convertidos en una cola (en este caso, un búfer circular basado en una matriz).
El bucle principal está transfiriendo los valores (sacando bytes de la cola) a una PC a través del UART.
Dentro de la interrupción del temporizador, se realiza una comprobación para garantizar que haya espacio disponible en la cola. Si es así, los bytes se insertan en la cola. Si no, detiene el temporizador. El bucle principal transferirá los bytes restantes y volverá a iniciar el temporizador una vez que la cola esté vacía (todos los bytes se han transferido).
Mi problema es que el temporizador no siempre se detiene, incluso si la cola está llena.
¿Podría ser esto un problema de concurrencia? Si es así, ¿cómo lo resuelvo?
Por cierto, he jugado un poco con los bloqueos, pero esto causa puntos muertos. También me he asegurado de que la cola y las variables relacionadas a las que se accede tanto por el bucle principal como por la interrupción del temporizador se declaren volátiles.
Gracias de antemano :-)