ucos-10-任务堆栈
2012-12-11 22:32
204 查看
任务堆栈
1 数据类型:任务堆栈的数据类型:OS_STKOS_CFG.H中定义的)2 定义堆栈:
定义一个OS_STK类型的数组就可以。
#define TASK_STK_SIZE 512; //定义堆栈的长
OS_STK TaskStk[TASK_STK_SIZE]; //定义一数组作为任务堆栈
3 关联:
当调用OSTaskCreate()创建一个任务时,把数组的指针传递给函数中的堆栈栈顶参数ptos,就可以把数组与任务关联起来而称为该任务的堆栈了。
4 堆栈增长方向:
向上增长:ptos为TaskStk[0]
向下增长:ptos为TaskStk [SIZE-1]
栈是一种只能在一端进行操作的结构,能操作那一端为栈顶 可以根据OS_CFG.H中的常数OS_STK_GROWTH作为选择开关,使用户可通过定义该常数的值来选择相应的代码段,以适应不同的堆栈增长方式的需要。
Eg: #define TASK_STACK_SIZE 64
OS_STK TaskStack[TASK_STACK_SIZE];
#if OS_STK_GROWTH == 0
OSTaskCreate(task, pdata, &TaskStack[0], prio);
#else
OSTaskCreate(task, pdata, &TaskStack[TASK_STACK_SIZE-1], prio);
#endif
5 任务堆栈的初始化
应用程序在建立一个新任务时,就必须把在系统启动这个任务时CPU各个寄存器所需要的初始数据(任务指针、任务堆栈指针、程序状态字等)事先存放在任务的堆栈中。这样,当任务获得CPU使用权时,就能把堆栈中的初始数据复制到CPU的各寄存器里,从而可使任务顺利地启动并运行。 参考以下过程:
任务堆栈的初始化工作应该是由操作系统负责的。UC/OS-II在创建任务函数中通过调用任务堆栈初始化函数OSTaskStkInit() 来完成任务堆栈初始化工作。
函数原型:
OS_STK *OSTaskStkInit(
void (*task)(void *pd),
void *pdata,
0S_STK *ptos,
INT16U opt
);本文出自 “东哥-怎么做” 博客,请务必保留此出处http://dong4716138.blog.51cto.com/5136637/1086172
相关文章推荐
- 关于ucos任务堆栈的理解
- uCOSIII学习笔记之任务堆栈的初始化
- 关于ucos任务堆栈的理解
- uCOS任务堆栈的深入分析
- uCOS任务堆栈的深入分析
- UCOS-II任务堆栈初始化函数移植
- ucos-ii移植之任务堆栈的分析
- 怎样判断ucos ii ostaskcreate任务的 堆栈是否溢出
- ucos-12-任务堆栈(深入理解)
- uCOS任务堆栈的深入分析
- uCOS-III任务堆栈溢出检测及统计任务堆栈使用量的方法
- ucos 任务堆栈的创建
- uCOS任务堆栈的深入分析
- UCOS局部变量、任务堆栈
- uCOS任务堆栈的深入分析
- ucos堆栈和任务控制块初始化
- uCOS任务堆栈的深入分析
- uCOS任务堆栈的深入分析
- uCOS任务堆栈的理解
- uCOS任务堆栈的深入分析(转)