OSTaskCreateExt分析
来源:互联网 发布:白葡萄酒淘宝 编辑:程序博客网 时间:2024/04/30 09:30
OSTaskCreateExt函数原型:
INT8U OSTaskCreateExt (void (*task)(void *p_arg),
void *p_arg,
OS_STK *ptos,
INT8U prio,
INT16U id,
OS_STK *pbos,
INT32U stk_size,
void *pext,
INT16U opt);
task:某任务的函数名,也就是该任务的起始地址,task是个函数指针,该函数形参为指向void类型的p_arg的指针,返回值为void
p_arg:上述任务的形参指针,指向void*类型
ptos:该任务的堆栈栈顶指针。注意cpu的堆栈生长方向。
prio:该任务的任务优先级。
id:该任务的任务ID
pbos:该任务的堆栈栈底指针
stk_size:该任务的堆栈长度
pext:后期补上
opt:后期补上
需要先了解OS_TCBInit()和OS_Sched()
整个函数流程:
1、检查该任务的优先级是否大于最低优先级,(数值越小,优先级越高)。
2、检查临界段的保护方式,默认方式3,即将异常掩蔽寄存器(PRIMASK)保存在局部变量中,R0默认为函数的返回值
3、关中断,检查中断嵌套次数是否大于0,大于0,则退出任务建立函数---大于0,表明有未结束的中断,不需要建立任务。在中断中执行任务调度,可能导致中断无法返回
4、检查该任务ID、优先级是否被占用,若没有被占用,临时占用该任务ID;若被占用,报错返回(任务控制块指针数组的某项写入非0指针,表明占用,后续写入实际的控制块指针)
5、任务ID、优先级可用:
1、开中断。
2、当使能了堆栈检查,则调用OS_TaskStkClr()函数,该函数仅仅实现了任务堆栈检查及堆栈清空,并且考虑到了堆栈的生长方向
3、任务堆栈初始化,将默认的值填入堆栈结构中OSTaskStkInit();返回值是栈顶指针(堆栈中已经将CPU各个寄存器的值预先设定,等待出栈后送入相应的寄存器)
4、任务控制块初始化。OS_TCBInit()。该函数解析转至下一篇博文。初始化成功,设定OSRunning标志,并进行任务调度OS_Sched();该函数见其他博文。
5、不成功,则关闭中断,释放临时占用的该任务ID。
6、开中断,返回
- OSTaskCreateExt分析
- OSTaskCreateExt()建立任务
- OSTaskCreate 和 OSTaskCreateExt 函数
- 建立任务,OSTaskCreateExt()
- UC/OS II中OSTaskCreateExt
- OSTaskCreate 和 OSTaskCreateExt 函数的区别
- uC/OS II 函数说明 之–OSTaskCreate()与OSTaskCreateExt()
- 分析
- 分析
- 分析
- 分析
- 分析
- 分析
- 分析
- 分析
- 分析
- 大家帮忙分析分析!
- FFMpeg分析详细分析
- 使用 Osql 工具管理 SQL Server 桌面引擎 (MSDE 2000)应用介绍
- 关于JAVA中为什么每个编译单元内都只能有一个public类
- jquery和JSON结合
- java23设计模式思想
- HDU 2544 最短路 (SSSP & O(V^2)的Dijkstra算法)
- OSTaskCreateExt分析
- 抽象类和接口
- 缓存技术,封装好的缓存类
- linux网络协议栈(六)传输层 (3)UDP协议 3)报文发送 send/sendto/sendmsg
- 信息系统项目管理师
- 那些年我们清除过的哪个浮动
- mysql之sync_binlog和innodb_flush_log_at_trx_commit参数浅析
- 注入 -- AndroidAnnotations学习笔记二
- 颠覆典当旧秩序?由绝当品电商入手,“淘当铺”进军互联网金融