Pushing events to xQueueReceive from ISR

nobody wrote on Thursday, October 27, 2005:

Hi all,

I am starting a project with FreeRTOS. The RTOS is a big help for me. Thanx to Richard.

In my design, I am using the ‘Active Object Design’. Here I need to fire events to a task from two sources:
1. ISR routine
2. normal task

In the event receiver task I would like to use only one point where I read the incomming events.

Can I use the xQueueReceive() for this both

Or do I need to have both xQueueReceive() and
xQueueReceiveFromISR() in the receive task???


nobody wrote on Thursday, October 27, 2005:

xQueueReceiveFromISR() is for receiving queued characters actually within an ISR, not for receiving queued characters that were sent from and ISR.  ie xQueueReceiveFromISR() function is not needed other than for writing ISR routines.

xQueueReceiveFromISR() might be used with a comms interrupt for example.  If you receive an interrupt to tell you a character had been transmitted the you might use xQueueReceiveFromISR() to see if any other characters were queued for transmission.  Because this is done from within an ISR xQueueReceive() cannot be used as it could cause a context switch at an unwanted time.

In your case you can use xQueueSendFromISR() and xQueueSend() to post to the same queue from within and outside of an ISR function respectively.  Then use a single xQueueReceive() call in your task to read the queue and receive the events from both sources.

nobody wrote on Thursday, October 27, 2005:

OK, thank you for explanation!