μC/OS-II 任务堆栈的初始化

任务堆栈的作用

应用程序在创建一个新任务的时候,必须把在系统启动这个任务时 CPU 各寄存器所需要的初始数据(任务指针、任务堆栈指针、程序状态字等等),事先存放在任务的堆栈中,以备任务切换等操作时调用。

初始化函数的调用

μC/OS-II 是在创建任务函数 OSTaskCreate( ) 中通过调用任务堆栈初始化函数 OSTaskStkInit( ) 来完成任务堆栈初始化工作的。

它的原型如下:
OS_STK *OSTaskStkInit(
        void (*task)(void *pd),  
        void *pdato, 
        OS_STK *ptos, 
        INT16U opt
        );

由于各种处理器的寄存器及对堆栈的操作方式不尽相同,因此该函数需要用户在进行 μC/OS-II 的移植时,需按所使用的处理器由用户来编写。

以 S3c2440 处理器的堆栈初始化函数为例:

OS_STK *OSTaskStkInit (void (*task)(void *pd), void *p_arg, OS_STK *ptos, INT16U opt)
{
    OS_STK *stk;

    opt      = opt;                 /* 'opt' is not used, prevent warning */
    stk      = ptos;                /* Load stack pointer */
    
    *(stk)   = (OS_STK)task;        /* Entry Point */
    *(--stk) = (INT32U)0;           /* LR */
    *(--stk) = (INT32U)0;           /* R12 */
    *(--stk) = (INT32U)0;           /* R11 */
    *(--stk) = (INT32U)0;           /* R10 */
    *(--stk) = (INT32U)0;           /* R9 */
    *(--stk) = (INT32U)0;           /* R8 */
    *(--stk) = (INT32U)0;           /* R7 */
    *(--stk) = (INT32U)0;           /* R6 */
    *(--stk) = (INT32U)0;           /* R5 */
    *(--stk) = (INT32U)0;           /* R4 */
    *(--stk) = (INT32U)0;           /* R3 */
    *(--stk) = (INT32U)0;           /* R2 */
    *(--stk) = (INT32U)0;           /* R1 */
    *(--stk) = (INT32U)p_arg;       /* R0 : argument */
    *(--stk) = (INT32U)0x00000053L; /* CPSR  (SVC mode, Enable only IRQ disable FIQ ) */
                                             
    return (stk);
}

转载于:https://www.cnblogs.com/GyForever1004/p/8708861.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值