⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpu_c.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
字号:
//移植
//#define  OS_CPU_GLOBALS
//#include "config.h"

/*********************************************************************************************************/
#include  "include.h"
#include "cpu_os.h"
/*********************************************************************************************************
** 函数名称: OSTaskStkInit
** 功能描述: 任务堆栈初始化代码,本函数调用失败会使系统崩溃
** 输 入: task  : 任务开始执行的地址
**         pdata :传递给任务的参数
**         ptos  :任务的堆栈开始位置
**         opt   :附加参数,当前版本对于本函数无用,具体意义参见OSTaskCreateExt()的opt参数
** 输 出: 栈顶指针位置
** 全局变量:
** 调用模块:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

STACK *OSTaskStkInit(void (*task)(void *pd), void *pdata, STACK *ptos, INT16U opt)
{
    STACK *stk;

    opt    = opt;                           /* 'opt'  没有使用。作用是避免编译器警告    */
    stk    = ptos;                          /* 获取堆栈指针                                       */

    /* 建立任务环境,ADS1.2使用满递减堆栈       */
    *stk = (STACK) task;                   /*  pc  */
    *--stk = (STACK) task;                 /*  lr  */

    *--stk = 0;                             /*  r12  */
    *--stk = 0;                             /*  r11  */
    *--stk = 0;                             /*  r10  */
    *--stk = 0;                             /*  r9   */
    *--stk = 0;                             /*  r8   */
    *--stk = 0;                             /*  r7   */
    *--stk = 0;                             /*  r6   */
    *--stk = 0;                             /*  r5   */
    *--stk = 0;                             /*  r4   */
    *--stk = 0;                             /*  r3   */
    *--stk = 0;                             /*  r2   */
    *--stk = 0;                             /*  r1   */
    *--stk = (unsigned int) pdata;          /*  r0,第一个参数使用R0传递   */
    *--stk = (SVC32Mode | NoFiq);   /*  cpsr,允许 IRQ, FIQ 中断   */
//    *--stk = (USER_USING_MODE|0x00);     /*  spsr,允许 IRQ, FIQ 中断   */

    return (stk);
}

#if (OS_TASKTRACE > 0 )
BOOLEAN OSTaskStackCheck(STACK *stack)
{
    INT32U              *pc;
    STACK               cpsr = *stack;
    if ((cpsr&0x1f) != SVC32Mode)
    {
        //error,stay here.
        SYSTEM_DUMP();
    }

    //CHECK pc
    pc = (INT32U*)stack[15];
    if ((pc >= (INT32U*)SRAMADDR_END && pc <= (INT32U*)SDRAMADDR_START)
            || pc > (INT32U*)&gSysHeapStart)
    {
        //while( 1 );
        SYSTEM_DUMP();
    }
    return TRUE;
}
#endif

/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -