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