zoukankan      html  css  js  c++  java
  • μ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);
    }
    
  • 相关阅读:
    SpringDataJpa
    #pragma pack(n)的使用
    jquery中的ajax方法参数
    rapidjson的使用
    Linux下Qt安装
    jsoncpp 0.5 ARM移植
    GoAhead2.5移植到ARM教程
    Qt 4.7.2移植到ARM教程
    虚函数与纯虚函数的区别
    海康、大华IpCamera RTSP地址和格式
  • 原文地址:https://www.cnblogs.com/GyForever1004/p/8708861.html
Copyright © 2011-2022 走看看