Problems with Task Priorities

mathias3 wrote on Wednesday, June 03, 2009:

Hi

I have several tasks running in my application. Basically I want them to run periodically in a fix order. Unfortunately the execution seems to mix up so I do not achieve the desired order.

Task 1 (priority 6) should execute every 10ms and increments a variable (time base in 10ms steps). It blocks calling vTaskDelayUntil.

Task 2 (priority 4) depends on the variable’s value and should also execute every 10ms. It also blocks calling vTaskDelayUntil.

As far as I know Task 1 should always enter the running state first due to its higher priority. After Task 1 having blocked, Task 2 should enter the running state (never missing an increment). I assume this scenario should repeat for ever periodically. How can it happen that Task 1 sometimes gets executed twice before Task 2 enters the running state? Is my approach wrong? Can a task leave the blocked state prior to the elapsing of the desired delay time (what reasons are possible)? Thanks for helping.

Regards,
Mathias

davedoors wrote on Wednesday, June 03, 2009:

If your tasks are at different priorities then it should work I think, but it will depend on what else your system is doing. For example, is it possible that Task 2 is getting starved of processing time?

Can you cut your app down to the bare bones and still get this behavior? If so then post the code (pastebin.com seems to be a good place to put source code and keep the formatting).

mathias3 wrote on Thursday, June 04, 2009:

Dave,

Thank you for your suggestions. Since my project has become quite big it was the right way to cut it down. I guess to question FreeRTOS was a bit too fast (it works fine as expected). I am using two EVK1100 with ATMEL’s AT32UCA0512. Both boards are using DHCP but unfortunately had the same MAC address. Therefore they got the same IP from the DHCP server!! I believe this troubled my application completely and leaded to getting starved some tasks.

Anyway it helped me to discuss the problem with you. Thanks!