Quality RTOS & Embedded Software

 Real time embedded FreeRTOS RSS feed 
Quick Start Supported MCUs PDF Books Trace Tools Ecosystem


Loading

Making a Task wait on 2 queues/semaphores

Posted by jinx on May 14, 2010
I am designing my software and I have a situation where my task has to wait on 2 queues, so that if either queue has data, the task can unblock. If I put the blocking statements one after the other, then the first queue has to unblock before the second bone. Is it possible to wait on >1 queue or semaphore simultaneously in FreeRTOS, if so, how does one do this?

Is this situation a common occurrence? Is this bad design on my part?

Thanks!

RE: Making a Task wait on 2 queues/semaphores

Posted by MEdwards on May 14, 2010
Is it possible to have the queue writers write to the same queue? The message source can be part of the message to the queue reader knows where the message came from. That way the reader only has to block on one queue.

RE: Making a Task wait on 2 queues/semaphores

Posted by Richard Damon on May 15, 2010
As Edwards says, FreeRTOS is based on a task waiting for one thing at a time. If the two queue are providing similar types of data you can do as Edwards says. If the queue hold very different types (and size) of data, then this might not make as much sense, but normally these would go to different tasks. If there is a good reason just one task will be processing this sort of mixed data, O can see two good options to handle this.

Method 1 adds a third queue, where each producer, after putting the data on its respective queue, puts a flag on the third queue with a value to tell the consumer which queue to take the data from. If you want to save a bit of memory, and the order the queue are serviced isn't critical, it could be replaced with a single semaphore. the producers raise the semaphore after adding their data to the queue, (this raise may fail, but that is ok. that just means there is some other data waiting to be processed), and the consumer waits on the semaphore, and when it gets it, it checks each of the queues with a 0 timeout retrieval, until all the queue are empty. At that point, it wait on the semaphore again.

RE: Making a Task wait on 2 queues/semaphores

Posted by jinx on May 15, 2010
Thanks Richard,
What is the 2nd method?
THanks

RE: Making a Task wait on 2 queues/semaphores

Posted by Richard Damon on May 15, 2010
The second method was making it just one task.

RE: Making a Task wait on 2 queues/semaphores

Posted by jinx on May 15, 2010
Thanks for your help!


[ Back to the top ]    [ About FreeRTOS ]    [ Privacy ]    [ Sitemap ]    [ ]


Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.

Careers

FreeRTOS and other embedded software careers at AWS.


Latest News

FreeRTOS kernel V10.0.1 is available for immediate download. Now MIT licensed.


FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

Espressif ESP32

IAR Partner

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers

STMicro RTOS partner supporting ARM7, ARM Cortex-M3, ARM Cortex-M4 and ARM Cortex-M0

Texas Instruments MCU Developer Network RTOS partner for ARM and MSP430 microcontrollers

OpenRTOS and SafeRTOS

Xilinx Microblaze and Zynq partner