portYIELD_WITHIN_API hang

andreabenoni wrote on Wednesday, August 10, 2011:

I am using RedSuite with last FreeRTOS  on a LPC2387.
I solved some problems related to force supervisor on startup.

Now I have a problem with portYIELD_WITHIN_API inside vTaskDelay.
The run stops on the Yield, I search similar post and I checked:
- tick is running vPreemptiveTick loops
- process is moved correctly from running->blocked->running based on tick

It seems blocked to “SWI 0” instruction.

Thank for your support
Andrea

johandc wrote on Wednesday, August 10, 2011:

Check that your software interrupt / exception is running and caught correctly by the appropriate handler.

andreabenoni wrote on Wednesday, August 10, 2011:

I checked with debugger and vPreemptiveTick is called, but return always to Yield point of vTaskDelay.
vApplicationTickHook  is correctly called by interupt function.

andreabenoni wrote on Wednesday, August 10, 2011:

I tried to activate vApplicationIdleHook, it is also executed only one time.
I tried to trace return from vPreemtiveTick to task moving the pc+4 and it restart to executes until next vTaskDelay.

I am reading Using the FreeRTOS…guide but I am not able to find informations abut Yield should work at low level.
I am tracing portSAVE_CONTEXT portRESTORE_CONTEXT and seems all ok.
I am trying to understand what should cause the execution of next instruction.

Andrea

andreabenoni wrote on Wednesday, August 10, 2011:

Probably I found the problem, I had a wrong SWI pointer, correct is
_swi:   .word vPortYieldProcessor