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

五个内部任务初始化:

//UCOSIII中以下优先级用户程序不能使用,将这些优先级分配给了UCOSIII的5个系统内部任务:

理论上任务数可以无限,但因为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:
void  OSInit (OS_ERR  *p_err)
{

/*创建:UCOSIII的5个系统内部任务*/
/*1、创建 中断服务管理任务 优先级:0 	os_int.c  Interrupt  */
	//中断服务管理任务的任务优先级永远是最高的,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 <os_app_hooks.h>	//空闲函数
	
/*3、创建 时钟节拍任务 优先级:1			//os_tick.c				*/		
    OS_TickTaskInit(p_err);                         /* Initialize the Tick Task                               */
    if (*p_err != OS_ERR_NONE) {
        return;
    }

/*4、创建 统计任务 	优先级:倒数第二	//os_stat.c  statistic		*/	
    #if OS_CFG_STAT_TASK_EN > 0u                   /* Initialize the Statistic Task                          */
    OS_StatTaskInit(p_err);
    if (*p_err != OS_ERR_NONE) {
        return;
    }
    #endif

/*5、创建 定时任务(定时器管理模块)	优先级:2		os_tmr.c   Timer 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 <os_app_hooks.h>	//空闲函数

猜你喜欢

转载自blog.csdn.net/qq1518572311/article/details/80451038
今日推荐