multiple calls to xQueueSendFromISR

clavrg wrote on Monday, January 24, 2011:

I call xQueueSendFromISR twice posting to two different queues. But only one task waiting on the queue gets awaken.

__attribute__((__naked__)) static void NAME(void) { 
    bool taskAwaken = FALSE;
    taskAwaken = xQueueSendFromISR(_queue_1, &key, taskAwaken);
    taskAwaken = xQueueSendFromISR(_queue_2, &key, taskAwaken);
    return taskAwaken;
if I only post to one of two queues - the corresponding task is awaken as expected.
What am I doing wrong?
I use preemptive scheduling. Port: Atmel UC3A3256

richard_damon wrote on Monday, January 24, 2011:

While I am not familiar with that port, the signature of xQueueSendFromISR changed in Version 5 to
portBASE_TYPE xQueueSendFromISR(
                                   xQueueHandle pxQueue,
                                   const void *pvItemToQueue,
                                   portBASE_TYPE *pxHigherPriorityTaskWoken
where the return value is NOT the new value of taskAwaken but a flag to indicate if the Send  was successful or not.,  thus your lines should be (not also the adding of an & when passing taskAwaken)

flag = xQueueSendFromISR(_queue_1, &key, &taskAwaken);
flag = xQueueSendFromISR(_queue_2, &key, &taskAwaken);