portYIELD_FROM_ISR question
Hello,
I understand portYIELDFROMISR may trigger a context switch (task activated for deferred processing), but what happens after that deferred task has completed? Does the scheduler switch back to the ISR until the ISR finishes? Or is the deferred task only called after the ISR finishes? In other words for example:
void ISRHandler() {
// … code portion A
portYIELDFROMISR( xHigherPriorityTaskWoken );
// … code portion B
} // end of ISRHandler
Assume higher priority task woken. Will the execution of code look like?
1) code portion A … higher priority task … code portion B
2) code portion A … code portion B … higher priority task
3) code portion A … higher priority task … something else (B is skipped)
Thanks
portYIELD_FROM_ISR question
Tasks only ever run when an interrupt is not running – that is
controlled by hardware – we could not have a task run in the middle of
an interrupt even if we wanted. So tasks will only execute after all
[potentially nested] interrupts have existed.
If a task is unblocked by an interrupt, then it will not run until after
all interrupts have completed.
portYIELD_FROM_ISR question
So (2) (after the ISR has finished). I understand now. The portYIELD preps the scheduler to resume running the higher priority task once the ISR finishes.
Thanks for the quick reply!