• μ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);
    }
    
  • 相关阅读:
    JavaUtil_04_验证码生成器
    Java微信公众平台开发_02_启用服务器配置
    Log4j2_学习_01_Log4j 2使用教程
    Java_Time_01_获取当前时间
    Eclipse_配置_00_资源帖
    Eclipse_插件_02_jd-eclipse插件的安装
    noip模拟题题解集
    小结:高斯消元
    10月刷题总结
    【vijos】1892 树上的最大匹配(树形dp+计数)
  • 原文地址:https://www.cnblogs.com/GyForever1004/p/8708861.html
Copyright © 2020-2023  润新知