Quality RTOS & Embedded Software

 Real time embedded FreeRTOS RSS feed 
Real time embedded FreeRTOS mailing list 
Quick Start Supported MCUs PDF Books Trace Tools Ecosystem TCP & FAT Training




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 ]    [ Sitemap ]    [ ]




Copyright (C) 2004-2010 Richard Barry. Copyright (C) 2010-2016 Real Time Engineers Ltd.
Any and all data, files, source code, html content and documentation included in the FreeRTOSTM distribution or available on this site are the exclusive property of Real Time Engineers Ltd.. See the files license.txt (included in the distribution) and this copyright notice for more information. FreeRTOSTM and FreeRTOS.orgTM are trade marks of Real Time Engineers Ltd.

Latest News:

FreeRTOS V9.0.0 is now available for download.


Free TCP/IP and file system demos for the RTOS


Sponsored Links

⇓ Now With No Code Size Limit! ⇓
⇑ Free Download Without Registering ⇑


FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

Renesas Electronics Gold Alliance RTOS Partner.jpg

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers

Atmel RTOS partner supporting ARM Cortex-M3 and AVR32 microcontrollers

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

Xilinx Microblaze and Zynq partner

Silicon Labs low power RTOS partner

Altera RTOS partner for Nios II and Cortex-A9 SoC

Freescale Alliance RTOS Member supporting ARM and ColdFire microcontrollers

Infineon ARM Cortex-M microcontrollers

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

Cypress RTOS partner supporting ARM Cortex-M3

Fujitsu RTOS partner supporting ARM Cortex-M3 and FM3

Microsemi (previously Actel) RTOS partner supporting ARM Cortex-M3

Atollic Partner

IAR Partner

Keil ARM Partner

Embedded Artists