Problemas de concurrencia con el búfer circular en el programa integrado

1

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 :-)

    
pregunta pvh1987

1 respuesta

2

Si su cola tiene exactamente un productor y un consumidor, asegúrese de que el consumidor tenga mayor prioridad en todo momento. Una vez logrado esto, la concurrencia no causará ningún problema. La implementación depende del hardware utilizado, aquí está el código (my) que usa esa cola en PIC24 micro - > enlace . La cola, así como la cabeza y la cola se definen aquí - > enlace , el productor está aquí - > enlace y el consumidor (el ISR) está aquí - > enlace

    
respondido por el Oleg Mazurov

Lea otras preguntas en las etiquetas