Hi, I may well be doing something wrong, but for some reason my xQueueSelectFromSet does not work.
I create the queue/semaphore with this code on startup (before I have started the scheduler)
m_uart_rx_queue = xQueueCreate(device_queue_rx_size,sizeof(byte_t));
m_pending_cmd_smph = xSemaphoreCreateBinary();
m_complete_cmd_smph = xSemaphoreCreateBinary();
m_queue_set = xQueueCreateSet(device_queue_rx_size + 1);
xQueueAddToSet(m_queue_set,m_uart_rx_queue);
xQueueAddToSet(m_queue_set,m_pending_cmd_smph);
I have checked all of the result, and everything returns pdTRUE/pdPASS, and looks fine.
I then start a task that currently just does the following,
//TASK1
for (;;)
{
QueueSetMemberHandle_t selected_handle = NULL;
while (selected_handle == NULL)
{
selected_handle = xQueueSelectFromSet(m_queue_set,100);
BaseType_t result = xSemaphoreTake(m_pending_cmd_smph,portMAX_DELAY);
int x = 1; // for my breakpoint
}
}
In Another task,
//TASK2
xSemaphoreGive(m_pending_cmd_smph);
xSemaphoreTake(m_complete_cmd_smph,portMAX_DELAY);
TASK2 should now start blocking forever, and I would expect that TASK1 is now woken, with xQueueSelectFromSet returning the handle to m
pendingcmd_smph, however it does not wake up.
100 ticks expire,xQueueSelectFromSet returns NULL. I then perform a Take of m
pendingcmd_smph, so I can see if this semaphore is ‘ready’, and indeed it is. xSemaphoreTake takes it straight away and returns pdTRUE.
So why is xQueueSelectFromSet not returning? what other #defines or configuration might be required.
Also, both tasks are Priority 1.
Thanks for any help.