os_idle_task

所属模块:内核调度 | 类型:Idle任务核心函数

API Metadata

函数ID:os_idle_task
模块:kernel
类型:idle task core
嵌套深度:2-3

函数简介

:contentReference[oaicite:0]{index=0} 是系统空闲任务的核心入口函数, 在系统无可运行任务时执行,用于系统初始化收尾、资源清理以及空闲回调执行。

该函数在系统启动后由调度器进入,并长期驻留运行,是整个调度循环的“最低优先级执行单元”。

函数原型

void os_idle_task(void);

返回值

无返回值(系统级死循环任务)。

源码实现

/*------------------------------------------------------------------------ | FILE DESCRIPTION | ------------------------------------------------------------------------*/ /*------------------------------------------------------------------------ | - File name : idle_task.c | - Author : 谭舒 | - Update date : 2026-09-19 | - Copyright(C) : 2026 HRTOS. All rights reserved. ------------------------------------------------------------------------*/ /*------------------------------------------------------------------------ | INCLUDES | ------------------------------------------------------------------------*/ #include"hrtos_internal.h" #define OS_TASK_TOTAL (OS_PROCESS_MAX + OS_FAST_TASK_MAX) /*------------------------------------------------------------------------ | IDLE HOOK | ------------------------------------------------------------------------*/ /** * @brief Idle 任务钩子函数。 * * @note 当系统处于空闲状态时,内核调用该函数。 * 用户可通过注册接口设置 Idle Hook。 */ void (*g_idle_hook)(void); /*------------------------------------------------------------------------ | API FUNCTIONS | ------------------------------------------------------------------------*/ /** * @brief 初始化 HRTOS 运行环境并执行 Idle 任务。 * * @param[in] None * * @return None。 * * @note 函数启动时初始化任务、等待状态及系统资源, * 并清除调度请求、配置锁和相关 Hook 状态。 * 初始化完成后调用 hrtos_main() 执行用户主程序初始化。 * hrtos_main() 执行完成后锁定系统配置,禁止继续注册配置项。 * 随后进入永久 Idle 循环,负责处理任务删除请求并执行 Idle Hook。 * 在系统启用中断前,必须完成 hrtos_main() 的执行。 */ 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 = 0; 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(); } } } /*------------------------------------------------------------------------ | END OF FILE: idle_task.c | ------------------------------------------------------------------------*/

注意事项

Idle Task 为系统最低优先级执行单元,不应在其中执行阻塞操作或耗时逻辑。 同时资源清理操作发生在关中断区域,应确保数据一致性。

相关推荐