Hi,
I am using Freertos 7.1.1 in cooperative mode, but for some reason I am seeing that my tasks are pre-empted !
This was eg detected by adding a counter in the memory free function (increase at the start, decrease at the end).
Every once and a while, the function is entered while the counter is still 1 (and if I also log the taskhandle of the ‘other task already in the function’, I see that it points to another one of my tasks in the ready state).
When letting it run a little bit longer, the counter becomes 0 again, so the other task apparently continued from within the function.
Exactly the behavior one would expect in case of a preemptive scheduler, but not with a cooperative one.
Any suggestions about what might be going on ?
The memory free function does not contain yields etc which could explain the taskswitch.
Are there other not immediately obvious ways in which a task may be preempted even in cooperative mode (except for interrupts of course).
Eg For the xTimerCreate callback function, it is not directly clear under which task that is called ?
Preemption in cooperative mode?
Preemption in cooperative mode?
Do any of your interrupts call a yield function directly or through a macro like portEND_SWITCHING_ISR or portYIELD_FROM_ISR?
Does your task call any API functions that would make it block?
Preemption in cooperative mode?
You are absolutely right, the networking interrupt handler does a yield from ISR.
Thanks a *lot* for the solution !