I use FreeRTOS V7.1.0 on a LPC2368 togther with Crossworks 3.0.
I have two tasks and an ISR. H-task has a high prio. L-task has a low prio.
H-task executes xQueueReceive and gets blocked as expected.
L-task executes endless background processing and has no blocking statements.
When the ISR is called, I use the following code and would expect H-task to resume.
taskWoken = xQueueSendToBackFromISR(xWavPlayerRequestQueue,&pWavFile,&taskWoken);
if( taskWoken != pdFALSE )
But L-task keeps executing and H-task never resumes from xQueueReceive.
With the debugger I see that H-task is marked as "executing" but the breakpoint after xQueueReceive never hits.
Shouldn't H-task be activated after the next vNonPreemptiveTick?
Thanks in advance.
Its been a long time since I did anything on an ARM7, but I don't recognise portYIELDFROMISR() as a macro that was ever provided for ARM7 ports (might be wrong). I think in ARM7 ports it is called portENDSWITCHINGISR().
Also in ARM7 ports you need to provide an assembly wrapper around interrupt service routines, are you doing that? Please post the code you are using the enter the interrupt.
You are my hero! ;-)
Of course I had no wrapper. I wasn't aware that I need one.
After reading the word "wrapper" I examined the ARM7LPC2368Rowley demo and found in EMAC_isr.c the pattern for it.
Knowing the answer I also found the proper documentation here:
Thank you very much!