__attribute__((__naked__)) static void NAME(void) {
portENTER_SWITCHING_ISR();
portENTER_CRITICAL();
bool taskAwaken = FALSE;
taskAwaken = xQueueSendFromISR(_queue_1, &key, taskAwaken);
taskAwaken = xQueueSendFromISR(_queue_2, &key, taskAwaken);
portEXIT_CRITICAL();
return taskAwaken;
portEXIT_SWITCHING_ISR();
}
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
multiple calls to xQueueSendFromISR
I call xQueueSendFromISR twice posting to two different queues. But only one task waiting on the queue gets awaken.
multiple calls to xQueueSendFromISR
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);
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);