Pb with vTAskResume, vDelay, vDelayUntil

badgiver wrote on Thursday, March 13, 2008:


I am a new user of FreeRTOS and I try to understand how it works. I want to use it with the new PIC32MX360F512L and I test it with MPLAB SIM (MPLAB IDE v8). I created two simple task with differents priorities and I want to delay/suspend the first one, run the second and go back in the first task after the end of the delay or with vTaskResume ( xHandle ).

When I run the programm the first task is delayed or suspended and the second run correctly. Next, when it’s time to resume the first task, the second task stops to run (that is normal) the current TCB point on the first task but the programm never go back in this task. Instead of this, the programm loops in the port_asm.S file between portSAVE_CONTEXT and portRESTORE_CONTEXT.

I guess the problem come from portSAVE_CONTEXT, portRESTORE_CONTEXT or vTaskIncrementTick but I am not good enough to see exactly what happens.

Can you explain me what I have to do in order to have the expected behaviour?

Thanks for your help.

PS: Sorry for my english but as you can read, it’s not my mother tongue!!

picmeup wrote on Thursday, March 13, 2008:

I suspect the problem might be that you are running it in the sim. Can you run it on the mcu. Does the tick interrupt work in the sim?

badgiver wrote on Friday, March 14, 2008:

I can’t run it on the mcu because I don’t have it yet but the tick interrupt seems to work in the sim. When I look the tickcount variable, it increments well. If I want a delay of 20 ticks, the tickcount variable counts from A to A + 20 and after that the current TCB changes and points on the high priority task (the delayed task) but the programm never go in it.