📄 cpu_c.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 + -