ucos review_1

来源:互联网 发布:js菜单栏滑动 编辑:程序博客网 时间:2024/03/28 20:39

OS_STK:任务堆栈类型

typedef unsigned int   OS_STK;                   /* Each stack entry is 32-bit wide                    */

举例:

static  OS_STK         App_TaskStartStk[APP_TASK_START_STK_SIZE];

...

  os_err = OSTaskCreateExt(

                         (void (*)(void *)) tApp_MainTask,//创建主任务

                         (void*) 0,

                         (OS_STK*) &App_TaskStartStk[APP_TASK_START_STK_SIZE -1] ,  //指定任务堆栈栈顶
                         (INT8U) APP_TASK_START_PRIO,//指定任务优先级
                         (INT16U) APP_TASK_START_PRIO,//指定任务标识号
                         (OS_STK *) &App_TaskStartStk[0],//指定任务堆栈栈底
                         (INT32U  ) APP_TASK_START_STK_SIZE,//任务堆栈大小
                         (void     *) 0,//指向附加数据域
                         (INT16U) (OS_TASK_OPT_STK_CLR | OS_TASK_OPT_STK_CHK) //操作选项
                                                    );

数据结构设计:

#define TASK_STK_SIZE    512               //任务堆栈大小

#define N_TASKS                 10                 //任务数量


OS_STK     TaskStk[N_TASKS][TASK_STK_SIZE];

引用任务堆栈的时候可以像这样:

TASK1:    对应   TaskStk[0][TASK_STK_SIZE]

...

栈底:TaskStk[0][0]

栈顶:TaskStk[0][TASK_STK_SIZE-1]

关于涉及到汇编堆栈的操作,需要根据芯片大小端以及数据栈的增长方向(如51:向像高地址增长,ARM:两边都可,APTCS规定向低地址增长)决定。

参考:http://blog.csdn.net/liuyu60305002/article/details/6720771