static void __interrupt __far vExampleInterruptHandler( void )
{
...
crQUEUE_RECEIVE_FROM_ISR( xIntegerQueue,
&ulReceivedNumber,
&pxCoRoutineWoken );
if( pxCoRoutineWoken == pdTRUE )
{
// HOW CAN I "MANUALLY" SWITCH TO OTHER CO-ROUTINE WITH HIGHER PRIORITY ?????
}
}
Can I use vCoRoutineSchedule() API function???
Thanks.
Context switch from co-routine
Hi all.
Context switch from co-routine
Note that co-routines do not support preemption, so the interrupt can’t change which co-routine is running.
Context switch from co-routine
To richard_damon:
But I can change current coroutine to other by call crDELAY(xHandle, 0);
It will be correct, if I could do the same from ISR… How to use parameter pxCoRoutineWoken in crQUEUE_RECEIVE_FROM_ISR() API function?
What for is this parameter? Thanks.
It will be correct, if I could do the same from ISR… How to use parameter pxCoRoutineWoken in crQUEUE_RECEIVE_FROM_ISR() API function?
What for is this parameter? Thanks.
Context switch from co-routine
Since Co-Routines do not support pre-emption, the switch between co-routines occurs when the co-routine calls an API function. They don’t save enough state to allow a co-routine to be interrupted at another point and the flow of execution changed (to another co-routine). In effect, all the co-routines in a program fall within a single task, and that task can be pre-empted, so another task can run. This is what the Woken flag controls, should the “co-routine” task be woken by the interrupt.