和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 //定义用户任务堆栈长度