Pushing events to xQueueReceive from ISR
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
sources?
Or do I need to have both xQueueReceive() and
xQueueReceiveFromISR() in the receive task???
Regards
Paul
Pushing events to xQueueReceive from ISR
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.
Pushing events to xQueueReceive from ISR
OK, thank you for explanation!
Paul