【UCOSIII】【初始化五个内部任务】中断服务服务管理任务0、时钟节拍任务1、定时任务2、统计任务62、空闲任务63

五个内部任务初始化:
//UCOSIII中以下优先级用户程序不能使用,将这些优先级分配给了UCOSIII的5个系统内部任务:
【【UCOSIII】【初始化五个内部任务】中断服务服务管理任务0、时钟节拍任务1、定时任务2、统计任务62、空闲任务63】理论上任务数可以无限,但因为RAM、ROM等的限制,定为最大64个任务
(OS_CFG_PRIO_MAX = 64)
main()函数中调用OSInit():
os_core.c中定义OSInit():
//优先级0:中断服务服务管理任务 OS_IntQTask()在os_int.c中定义Interrupt
//优先级1:时钟节拍任务 OS_TickTask()在os_tick.c定义
//优先级2:定时任务 OS_TmrTask()在os_tmr.c定义Timer Manager
//优先级OS_CFG_PRIO_MAX-2:统计任务 OS_StatTask()在os_stat.c定义statistic
//优先级OS_CFG_PRIO_MAX-1:空闲任务 OS_IdleTask()在os_core.c os_app_hooks.c定义


main中调用OSInit():

  1. 创建5个内部任务
  2. 创建start_task任务(其余任务在start_task任务中创建)
  3. 开启UCOSIII
void main() { /*UCOSIII启动与初始化:五步*/ OSInit(&err); //1初始化 //五个内部任务 OS_CRITICAL_ENTER(); //2进入临界区 OSTaskCreate(.........//3、main()中只创建一个 //start_task任务,其余在start_task这个任务里面创建 -----> (OS_TASK_PTR )start_task, ......... ) OS_CRITICAL_EXIT(); //4退出临界区 OSStart(&err); //5开启UCOSIII //其余任务在start_task中创建 }

os_core.c中定义OSInit():
os_core.c: voidOSInit (OS_ERR*p_err) {/*创建:UCOSIII的5个系统内部任务*/ /*1、创建 中断服务管理任务 优先级:0os_int.cInterrupt*/ //中断服务管理任务的任务优先级永远是最高的,0 #if OS_CFG_ISR_POST_DEFERRED_EN > 0u OS_IntQTaskInit(p_err); /* Initialize the Interrupt Queue Handler Task*/ if (*p_err != OS_ERR_NONE) { return; } #endif/*2、创建 空闲任务优先级:最后 os_core.c os_app_hooks.c*/ //最终调用 App_OS_IdleTaskHook 函数 OS_IdleTaskInit(p_err); /* Initialize the Idle Task*/ if (*p_err != OS_ERR_NONE) { return; } //App_OS_SetAllHooks(); //配置空闲任务的指针 //#include //空闲函数 /*3、创建 时钟节拍任务 优先级:1//os_tick.c*/ OS_TickTaskInit(p_err); /* Initialize the Tick Task*/ if (*p_err != OS_ERR_NONE) { return; }/*4、创建 统计任务优先级:倒数第二 //os_stat.cstatistic*/ #if OS_CFG_STAT_TASK_EN > 0u/* Initialize the Statistic Task*/ OS_StatTaskInit(p_err); if (*p_err != OS_ERR_NONE) { return; } #endif/*5、创建 定时任务(定时器管理模块) 优先级:2os_tmr.cTimer Manager module*/ #if OS_CFG_TMR_EN > 0u/* Initialize the Timer Manager module*/ OS_TmrInit(p_err); if (*p_err != OS_ERR_NONE) { return; } #endif }



空闲函数的钩子函数:OSIdleTaskHook();
->调用(*OS_AppIdleTaskHookPtr)();
->调用 App_OS_IdleTaskHook 执行空函数
需要配置钩子函数需要的函数指针
//App_OS_SetAllHooks(); //配置空闲任务的指针 //#include //空闲函数

    推荐阅读