Tengo múltiples tareas que todas escriben en una pantalla. Obviamente, sin controlar quién puede escribir en la pantalla cuando tenga problemas. Pensé que la forma más fácil de hacer esto era con hacer cola.
Tengo un QueueHandle
global. En mi función int main(void)
creo una cola de tamaño 10 (lo suficientemente grande para mis necesidades) con un tamaño de elemento igual a mi struct
que contiene todos los datos.
struct screenData {
uint8_t string;
uint8_t line;
} data;
En las tareas que deben escribir en la pantalla que envían a la cola:
struct screenData * toSend;
data.string = "TEST";
data.line = 0;
toSend = &data;
xQueueSend ( xQueue, ( void * ) &toSend , xTicksToWait );
En la tarea que actualiza la pantalla, se lee de la cola y la coloca en la pantalla:
struct screenData * data;
xQueueReceive( xQueue, &( data ), xTicksToWait );
A continuación, accedo a los datos así: data->string;
etc ...
Sin embargo, en la medida en que lo entiendo, esto pasa la dirección de la estructura. Lo que significa que si actualizo data
, los datos almacenados en la estructura serán diferentes.
Lo que quiero hacer es tener una cola que pueda agregar a donde los datos enviados sean del tipo screenData
, y leerá cada screenData
entrante para poner un mensaje en la pantalla.
Esencialmente, ¿debería simplemente enviar la estructura completa a la cola? ¿En qué caso, es este el mejor uso de la cola? ¿O hay una mejor manera de almacenar datos en búfer?
Gracias