xSemaphoreGive in critial section

paha11 wrote on Monday, December 22, 2014:

Hello

I wonder if it’s possible to call xSemaphoreGive withing critical section.
Something like

taskENTER_CRITICAL();

xSemaphoreGive(App_Tasks[curr->taskId].loopSem);

taskEXIT_CRITICAL();

I used it in situation where needed to do some linked list operation.

From the source code of FreeRTOS 7.0.0 of function xQueueGenericSend(…) in queue.c I saw
that immediate task swith can be made so the above code shall be NO NO?
Thank you for any comment
Regards

davedoors wrote on Monday, December 22, 2014:

The rule is dont do it, but you might get away with it on a give depending on task priorities. At best the wrong task might be scheduled because a context switch away cant happen, at worst you will get a horrible logic error and crash for the same reason. Definitely dont do it on a take!

paha11 wrote on Tuesday, December 23, 2014:

Dave,

thanks for the link. That’s what I was looking for.
Regards
Pavel