当任务A调用LOS_EventRead阻塞开中断后,突然响应中断B,此时任务A已入阻塞链表, 任务状态为OS_TASK_STATUS_PEND | OS_TASK_STATUS_RUNNING;而B的回调函数中调用 LOS_EventWrite唤醒任务A,这个过程会调用OsSchedTaskWake,将任务A从阻塞链表中 取出,并去除OS_TASK_STATUS_PEND状态,且调用OsSchedTaskEnQueue将任务A添 加到调度队列并增加OS_TASK_STATUS_READY状态。OsSchedTaskWake全部流程完成后, 会开中断并调用LOS_Schedule,在LOS_Schedule流程中由于当前任务为A,且状态为 OS_TASK_STATUS_RUNNING | OS_TASK_STATUS_READY,会再次调用OsSchedTaskEnQueue, 从而被OsSchedTaskEnQueue断言拦住。修改方式:当任务状态含有OS_TASK_STATUS_RUNNING时 OsSchedTaskWake中不调用OsSchedTaskEnQueue。 close: #I3VX9Y Signed-off-by: zff <zhangfanfan2@huawei.com> Change-Id: I28f33d25504ade47469980fd6bb0b922bf4756da |
||
|---|---|---|
| .. | ||
| arch | ||
| include | ||
| src | ||
| BUILD.gn | ||