Estoy trabajando en un programa integrado en el microcontrolador TM4C123GH6PM de Texas Instruments Tiva C Series LaunchPad.
El programa debe muestrear un ADC externo en una interrupción de temporizador y enviar los valores convertidos a una cola (en este caso, un búfer circular basado en un array).
El bucle principal está transfiriendo los valores (sacando bytes de la cola) a una PC a través de UART.
Dentro de la interrupción del temporizador, se realiza una verificación para asegurarse de que hay espacio disponible en la cola. Si es así, se empujan los bytes a la cola. Si no hay espacio, se 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 hayan transferido).
Mi problema es que el temporizador no siempre se detiene incluso si la cola está llena.
¿Podría ser un problema de concurrencia? En ese caso, ¿cómo lo soluciono?
Por cierto, he probado con locks pero esto causa interbloqueos. También me aseguré de que la cola y las variables relacionadas accesadas tanto por el bucle principal como por la interrupción del temporizador estén declaradas como volátiles.
¡Gracias de antemano! :-)