UCOS_II学习笔记---任务管理之建立任务函数分析
来源:互联网 发布:手机淘宝怎么咨询客服 编辑:程序博客网 时间:2024/06/08 10:23
想让μC/OS-Ⅱ管理用户的任务,用户必须要先建立任务。用户可以通过传递任务地址和其它参数到以下两个函数之一来建立任务:OSTaskCreate() 或 OSTaskCreateExt()。OSTaskCreate()与μC/OS是向下兼容的,OSTaskCreateExt()是OSTaskCreate()的扩展版本,提供了一些附加的功能。用两个函数中的任何一个都可以建立任务。任务可以在多任务调度开始前建立,也可以在其它任务的执行过程中被建立。在开始多任务调度(即调用OSStart())前,用户必须建立至少一个任务。任务不能由中断服务程序(ISR)来建立。
函数
功能描述
OSTaskCreate()
建立任务
OSTaskCreateExt()
建立任务
pdata是当任务开始执行时传递给任务的参数的指针
ptos是分配给任务的堆栈的栈顶指针
prio是分配给任务的优先级功能描述建立任务函数原型INT8U OSTaskCreate (void (*task)(void *pd),
void *pdata,
OS_STK *ptos,
INT8U prio)
核
心
代
码
分
析
{
OS_ENTER_CRITICAL(); //进入临界期0
if (OSTCBPrioTbl[prio] == (OS_TCB *) 0) //判断该优先级是否已经存在
{
OSTCBPrioTbl[prio] = (OS_TCB *) 1; //保留该优先级
OS_EXIT_CRITICAL(); //退出临界区0
psp = (OS_STK *) OSTaskStkInit(task, ppdata, ptos, 0); //初始化任务堆栈
err = OS_TCBInit(prio, psp, (OS_STK *) 0, 0, 0, (void *) 0, 0); //初始化任务控制块TCB
if (err == OS_NO_ERR) //初始化TCB没有出错
{
OS_ENTER_CRITICAL(); //进入临界区1
OSTaskCtr++; //任务数自加
OS_EXIT_CRITICAL(); //退出临界区1
if (OSRunning == TRUE) //如果系统已经运行(即在OS运行时创建任务)
{
OS_Sched(); //任务调度(该函数不再返回)
}
}
else //初始化TCB出错
{
OS_ENTER_CRITICAL(); //进入临界区2
OSTCBPrioTbl[prio] = (OS_TCB *) 0; //初始化TCB出错了,释放TCB
OS_EXIT_CRITICAL(); //退出临界区2
}
return (err); //返回初始化TCB出错信息
}
OS_EXIT_CRITICAL();//退出临界区0
return (OS_PRIO_EXIST); //返回错误信息,该优先级已经存在
}
- UCOS_II学习笔记---任务管理之建立任务函数分析
- UCOS_II学习笔记---任务管理之删除任务函数分析
- UCOS_II学习笔记---任务管理之请求删除任务函数分析
- UCOS_II学习笔记---任务管理之任务切换
- UCOS_II学习笔记---信号量管理之信号量的使用-进程(任务)同步
- uCOS_II的任务管理
- UCOS_II学习笔记---信号量管理之信号量的使用
- Linux学习笔记之计划任务、进程管理、磁盘管理
- VxWorks学习笔记 -- 任务管理
- ucos_ii中的任务(1)
- ucos_ii中的任务(2)
- ucos2学习笔记_4任务管理
- uc/os-iii学习笔记-任务管理
- ucos-iii学习之任务管理
- ucos-iii学习之内部任务管理
- ucosii之任务管理
- OSAL之任务管理
- Eclipse之"任务"管理
- 一个基于组合模式的游戏地图系统
- IT各个领域推荐的书籍
- algorithm_binarysearch
- POJ The Suspects(基本的并查集)
- 4 frontpage+Access数据库信息的删除
- UCOS_II学习笔记---任务管理之建立任务函数分析
- cocos2d-x 2.0版本 自适应屏幕分辨率
- 查看linux端口号占用情况
- windows下cvs服务器安装配置(详)
- 编程方法论
- bootloader与签名
- 杂记之函数qsort的使用
- Java中正则表达式的使用
- SQLite 下载与SQLite.lib生成