My program uses 6 tasks (all of them have idle priority) and an UART iterrupt service routine. FreeRTOS is configured non-preemptive.
How does FreeRTOS implement non-preemptive multi-tasking?
It seems that FreeRTOS doesn’t always continue with the interrupted task after the ISR routine has finished. Seems that there is a task schedule and another ready task continues execution before. Is this how FreeRTOS does non-preemptive multi-tasking? This would imply that I have to lock shared resources even in non-preemptive mode?
My ISR uses “xSemaphoreGiveFromISR”. Interestingly this function always returns that a higher priority task was woken although all of my tasks are created with idle priority. I don’t request a context switch in order to continue with the actually interrupted task. Does this has any effect on the non-preemptive scheduling behaviour?