I have a number tasks and they run fine as long as something does happen. Then some tasks has "Ready" state and highest priority but never executed, and some task have less priority but executed. The table of the states of tasks is given below:
TskNum TskName Prio TskStatus
7 IDLE 0 Ready
5 taskbuf 2 Ready
1 taskkeys 3 Running
2 taskzb 4 Ready
8 Tmr Svc 4 Blocked
3 taskptt 3 Suspended
4 taskled 1 Suspended
6 taskusb 2 Suspended
I'm interested in a "taskzb" task which has a highest priority and the "Ready" state but never executed. At the same time the "taskkeys" task which has less priority running as well as an "IDLE" task (the "task_buf" task also never executed).
That the problem?
P.S. RTOS port is ARM Cortex M3, version is 7.4.2
This is normally a symptom of incorrect interrupt priority assignments. I would recommend updating your FreeRTOS version, ideally to V8.0.1 (should just be a drop in replacement), but at least to one of the later V7.x.x versions, then ensure configASSERT() is defined. This is because the latest versions have additional assert calls specifically designed to trap interrupt priority issues.
You can also look through the My application does not run section of the FAQ to ensure you are also complying with the normal API usage requirements.
Thanks a lot for your advice! I just replaced my old RTOS version by a new one and I've got a great tool for the interrupt priority diagnosis so I found the problem.