【文件属性】:
文件名称:空闲任务-倒数粗糙熵图像阈值化分割算法
文件大小:6.12MB
文件格式:PDF
更新时间:2021-06-09 11:16:19
UCOSIII 教程
7.1 空闲任务
我们首先来看一下空闲任务:OS_IdleTask(),在 os_core.c 文件中定义。任务 OS_IdleTask()
是必须创建的,不过不需要手动创建,在调用 OS_Init()初始化 UCOS 的时候就会被创建。打开
OS_Init() 函数,可以看到,在 OS_Init() 中调用了函数 OS_IdleTaskInit() ,打开函数
OS_IdleTaskInit(),函数代码如下:
void OS_IdleTaskInit (OS_ERR *p_err)
{
#ifdef OS_SAFETY_CRITICAL
if (p_err == (OS_ERR *)0) {
OS_SAFETY_CRITICAL_EXCEPTION();
return;
}
#endif
OSIdleTaskCtr = (OS_IDLE_CTR)0; (1)
OSTaskCreate((OS_TCB * )&OSIdleTaskTCB,
(CPU_CHAR * )((void *)"uC/OS-III Idle Task"),
(OS_TASK_PTR )OS_IdleTask,
(void * )0,
(OS_PRIO )(OS_CFG_PRIO_MAX - 1u),
(CPU_STK * )OSCfg_IdleTaskStkBasePtr,
(CPU_STK_SIZE )OSCfg_IdleTaskStkLimit,
(CPU_STK_SIZE )OSCfg_IdleTaskStkSize,
(OS_MSG_QTY )0u,
(OS_TICK )0u,
(void * )0,
(OS_OPT )(OS_OPT_TASK_STK_CHK | \
OS_OPT_TASK_STK_CLR | OS_OPT_TASK_NO_TLS),
(OS_ERR * )p_err);
}
(1)、OSIdleTaskCtr 在文件 os.h 中定义,是一个 32 位无符号整型变量。这里将 OSIdleTaskCtr
清零。
从上面的代码可以看出,函数 OS_IdleTaskInit()很简单,只是调用了 OSTaskCreate()来创建
一个任务,这个任务就是空闲任务。任务优先级为 OS_CFG_PRIO_MAX – 1 ,
OS_CFG_PRIO_MAX 是一个宏,在文件 os_cfg.h 中定义,OS_CFG_PRIO_MAX 定义了 UCOSIII
可用的任务数。前面我们说过 UCOSIII 的任务数是无数的,但是在实际使用中考虑到硬件资源
(ROM 和 RAM)等因素,不可能真的使用无数的任务,在 UCOSIII 中可以使用宏
OS_CFG_PRIO_MAX 来定义可使用的任务数,默认情况下 OS_CFG_PRIO_MAX 为 64。空闲
任务优先级为 OS_CFG_PRIO_MAX-1,说明空闲任务的优先级为最低的。
空闲任务堆栈大小为 OSCfg_IdleTaskStkSize,OSCfg_IdleTaskStkSize 也是一个宏,在
os_cfg_app.c 文件中定义,默认为 128,则空闲任务堆栈默认为 128*4=512 字节。
空闲任务的任务函数为任务函数为 OS_IdleTask(),OS_IdleTask()函数代码如下: