微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > UCOS-II STM32用户定义栈的大小有什么用?

UCOS-II STM32用户定义栈的大小有什么用?

时间:10-02 整理:3721RD 点击:
在UCOS-II 中创建任务的时候   都要有用户程序定义每个任务的栈的大小
定义一个栈空间:        static  OS_STK App_TaskStartStk[256];
UCOS-II 创建任务函数 :INT8U  OSTaskCreate (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT8U prio)    这里的ptos 就是栈顶地址   
在创建任务函数中会有一个初始化栈的函数:
OS_STK *OSTaskStkInit (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT16U opt)
{
    OS_STK *stk;

    (void)opt;                                   /* 'opt' is not used, prevent warning                 */
    stk       = ptos;                            /* Load stack pointer                                 */
                                                 /* Registers stacked as if auto-saved on exception    */
    *(stk)    = (INT32U)0x01000000L;             /* xPSR                                               */
    *(--stk)  = (INT32U)task;                    /* Entry Point                                        */
    *(--stk)  = (INT32U)0xFFFFFFFEL;             /* R14 (LR) (init value will cause fault if ever used)*/
    *(--stk)  = (INT32U)0x12121212L;             /* R12                                                */
    *(--stk)  = (INT32U)0x03030303L;             /* R3                                                 */
    *(--stk)  = (INT32U)0x02020202L;             /* R2                                                 */
    *(--stk)  = (INT32U)0x01010101L;             /* R1                                                 */
    *(--stk)  = (INT32U)p_arg;                   /* R0 : argument                                      */
                                                 /* Remaining registers saved on process stack         */
    *(--stk)  = (INT32U)0x11111111L;             /* R11                                                */
    *(--stk)  = (INT32U)0x10101010L;             /* R10                                                */
    *(--stk)  = (INT32U)0x09090909L;             /* R9                                                 */
    *(--stk)  = (INT32U)0x08080808L;             /* R8                                                 */
    *(--stk)  = (INT32U)0x07070707L;             /* R7                                                 */
    *(--stk)  = (INT32U)0x06060606L;             /* R6                                                 */
    *(--stk)  = (INT32U)0x05050505L;             /* R5                                                 */
    *(--stk)  = (INT32U)0x04040404L;             /* R4                                                 */
    return (stk);
}
在初始化堆栈函数中 ptos就是上面说的栈顶地址 但是此函数中跟堆栈长度都没有关系里面是固定的, 那用户定义栈的大小有什么用?

http://www.amobbs.com/thread-5530998-1-1.html    阿莫上及其详细的UCOS-II 任务调度解析  

结束语那边也说了 我提到的问题   
UCOS-II初学习  结贴  

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top