FreeRTOS Support Archive
The FreeRTOS support forum is used to obtain active support directly from Real
Time Engineers Ltd. In return for using our top quality software and services for
free, we request you play fair and do your bit to help others too! Sign up
to receive notifications of new support topics then help where you can.
This is a read only archive of threads posted to the FreeRTOS support forum.
The archive is updated every week, so will not always contain the very latest posts.
Use these archive pages to search previous posts. Use the Live FreeRTOS Forum
link to reply to a post, or start a new support thread.
[FreeRTOS Home] [Live FreeRTOS Forum] [FAQ] [Archive Top] [June 2014 Threads]
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 mpendingcmd_smph, however it does not wake up.
100 ticks expire,xQueueSelectFromSet returns NULL. I then perform a Take of mpendingcmd_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.
The parameters you are passing to xQueueAddToSet() are the wrong way around.
http://www.freertos.org/xQueueAddToSet.html
Regards,
Richard Barry.
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.