os_idle_task
所属模块:内核调度 | 类型:Idle任务核心函数
函数简介
:contentReference[oaicite:0]{index=0} 是系统空闲任务的核心入口函数,
在系统无可运行任务时执行,用于系统初始化收尾、资源清理以及空闲回调执行。
该函数在系统启动后由调度器进入,并长期驻留运行,是整个调度循环的“最低优先级执行单元”。
函数原型
void os_idle_task(void);
源码实现
#define OS_TASK_TOTAL (OS_PROCESS_MAX + OS_FAST_TASK_MAX)
/* idle hook */
void (*g_idle_hook)(void);
void os_idle_task(void)
{
u8 i;
EA = 0;
g_idle_hook = 0;
g_slab_overflow_hook = 0;
OS_SCHED_REASON = 0;
OS_CFG_LOCK = 0;
for(i = 1; i < OS_PROCESS_MAX; i++)
{
OS_TASK[i].wait_type = WAIT_NONE;
OS_TASK[i].state = DEAD;
OS_TASK[i].wait_tick = 0;
}
OS_WAIT_DI2[0] = 0;
OS_WAIT_DI2[1] = 0;
for(i = 0; i < OS_RESOURCE_MAX; i++)
{
OS_RES[i].value = 0;
OS_RES[i].owner = OS_INVALID_ID;
OS_RES[i].wait_cnt = 0;
OS_RES[i].wait_mask = 0;
OS_RES[i].pending_signal = 0;
}
hrtos_main();
OS_CFG_LOCK = 1;
EA = 1;
while(1)
{
EA = 0;
for(i = 1; i < OS_TASK_TOTAL; i++)
{
if(OS_TASK_EVENT[i] & OS_EVENT_DELETE_REQ)
{
OS_TASK_EVENT[i] &= ~OS_EVENT_DELETE_REQ;
os_task_cleanup(i);
}
}
EA = 1;
if (g_idle_hook)
{
g_idle_hook();
}
}
}
注意事项
Idle Task 为系统最低优先级执行单元,不应在其中执行阻塞操作或耗时逻辑。
同时资源清理操作发生在关中断区域,应确保数据一致性。