#include <Arduino_FreeRTOS.h>
#include "queue.h"
QueueHandle_t xQueue ;
void setup() {
Serial.begin(9600);
xQueue = xQueueCreate( 5, sizeof( long ) );
if( xQueue != NULL )
{
xTaskCreate( vSenderTask, "Sender1", 128, ( void * ) 100, 1, NULL );
xTaskCreate( vSenderTask, "Sender2", 128, ( void * ) 200, 1, NULL );
xTaskCreate( vReceiverTask, "Receiver", 128, NULL, 2, NULL );
}
}
void loop() {
// put your main code here, to run repeatedly:
}
void vSenderTask( void *pvParameters )
{
long lValueToSend;
BaseType_t xStatus;
lValueToSend = ( long ) pvParameters;
for( ;; )
{
xStatus = xQueueSendToBack( xQueue, &lValueToSend, 0 );
if( xStatus != pdPASS )
{
Serial.println("Could not send to the queue.\r\n" );
}
taskYIELD();
}
}
void vReceiverTask( void *pvParameters )
{
long lReceivedValue;
BaseType_t xStatus;
const TickType_t xTicksToWait = pdMS_TO_TICKS(100);
for( ;; )
{
if( uxQueueMessagesWaiting( xQueue ) != 0 )
{
Serial.println("Queue should have been empty!\r\n" );
}
xStatus = xQueueReceive( xQueue, &lReceivedValue, xTicksToWait );
if( xStatus == pdPASS )
{
Serial.print("recebido = ");
Serial.println( lReceivedValue );
}
else
{
Serial.println("Could not receive from the queue.\r\n" );
}
}
}