和Linux采用进程单元一样,μC/OS-II采用的是任务的方式,而当任务运行被 加载到内存单元时,将占用的内存区域分为代码段、初始化数据段、未初始化数据段、堆、栈五个区域。而其中,栈段是用来存放函数的参数值、局部变量的值和任 务进行上下文切换时存储当前的任务。
栈在实现上是一段连续的内存空间,μC/OS-II采用数组来实现,当一个任务被创建时,需要为该任务创建相应的栈段,并指定该任务的栈顶位置
- INT8U OSTaskCreate (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT8U prio)
第三个参数便是其指定的栈顶位置。而OS_STK便是任务栈空间的数据类型,它的定义如下:
- typedef unsigned short OS_STK;
由此可见,其类型实际上就是短整型。
如何为任务声明一段空间作为任务的栈呢?
- #define TaskStkLengh 64 //定义用户任务堆栈长度
- OS_STK TaskStk[TaskStkLengh]; // 定义用户任务的堆栈

这篇博客探讨了μC/OS-II操作系统中任务栈的实现和管理。任务栈用于存储函数参数、局部变量和任务上下文切换时的状态。通过OSTaskCreate函数创建任务时指定栈顶位置,栈由OS_STK类型定义,通常使用数组实现。文章还讨论了栈的增长方向、处理器的字节序以及如何为任务声明栈空间。最后,给出了一个在LPC2131上的任务栈应用示例。
最低0.47元/天 解锁文章
1439

被折叠的 条评论
为什么被折叠?



