📄 os_cpu_c.c
字号:
BXEQ LR
STR R0, [R1]
BX LR
NOP
}
/*********************************************************************************************************
** Function name: __s_OS_EXIT_CRITICAL
** Descriptions: 允许中断
**
** input parameters: none
** output parameters: none
** Returned value: none
** Created by: chenmingji
** Created Date: 2009-07-24
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
__asm void __s_OS_EXIT_CRITICAL (void)
{
IMPORT __GuiOsEnterSum
LDR R1, =__GuiOsEnterSum
LDR R0, [R1]
CMP R0, #0
ITT NE
SUBNE R0, #1
STRNE R0, [R1]
CMP R0, #0
BXNE LR
MOV R2, #0
MSR BASEPRI, R2
BX LR
}
/*********************************************************************************************************
** Function name: __s_changeToSYSMode
** Descriptions: 任务切换到系统模式
** input parameters: none
** output parameters: none
** Returned value: none
** Created by: chenmingji
** Created Date: 2009-07-24
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
__asm void __s_changeToSYSMode (void)
{
MOV R0, #0
MSR CONTROL, R0
BX LR
}
/*********************************************************************************************************
** Function name: changeToUSRMode
** Descriptions: 任务切换到用户模式
** input parameters: none
** output parameters: none
** Returned value: none
** Created by: chenmingji
** Created Date: 2009-07-24
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
__asm void changeToUSRMode (void)
{
MOV R0, #1
MSR CONTROL, R0
BX LR
}
/*********************************************************************************************************
** Function name: taskEntry
** Descriptions: 任务入口
** input parameters: pdata: 传递给任务的参数
** output parameters: none
** Returned value: none
** Created by: chenmingji
** Created Date: 2009-07-24
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
__asm void taskEntry (void *pvData, void (*task)(void *pd))
{
IMPORT OSTaskDel
BLX R1
MVN R0, #OS_PRIO_SELF
BL OSTaskDel
}
/*********************************************************************************************************
** Function name: __sysTickIsr
** Descriptions: 系统节拍中断
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void __sysTickIsr (void)
{
STCTRL;
OSIntEnter();
OSTimeTick(); /* 系统节拍处理 */
OSIntExit();
}
/*********************************************************************************************************
** Function name: OSStartHighRdy
** Descriptions: uC/OS-II启动使用OSStartHighRdy运行第一个任务
** input parameters: none
** output parameters: none
** Returned value: none
** Created by: chenmingji
** Created Date: 2009-07-24
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void OSStartHighRdy (void)
{
zyIsrSet(PSI, (unsigned long)__s_OSCtxSw, 0xff);
zyIsrSet(SVCI, (unsigned long)svcallHandle, 0x00);
zyIsrSet(STI, (unsigned long)__sysTickIsr, 0x80);
changeToSYSMode();
STRELOAD = (STCALIB & 0x3fffffff) * 100 / OS_TICKS_PER_SEC;
STCTRL = 0x07;
__OSStartHighRdy();
}
/*********************************************************************************************************
** Function name: OSIntCtxSw
** Descriptions: 中断级别调度函数
** input parameters: none
** output parameters: none
** Returned value: none
** Created by: chenmingji
** Created Date: 2009-07-24
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void OSIntCtxSw (void)
{
ICSR = 1ul << 28;
}
/*********************************************************************************************************
** Function name: OSTaskStkInit
** Descriptions: 任务堆栈初始化代码,本函数调用失败会使系统崩溃
** input parameters: task: 任务开始执行的地址
** pdata: 传递给任务的参数
** ptos: 任务的堆栈开始位置
** opt: 附加参数,当前版本对于本函数无用,具体意义参见OSTaskCreateExt()的opt参数
** output parameters: none
** Returned value: 新堆栈位置
** Created by: chenmingji
** Created Date: 2009-07-24
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
OS_STK *OSTaskStkInit (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt)
{
OS_STK *pstk;
opt = opt; /* 避免编译器警告 */
pstk = (OS_STK *)(((unsigned long)ptos) & ~0x07ul); /* 获取堆栈指针,8字对齐 */
/*
* 建立任务环境,ADS1.2使用满递减堆栈
*/
*pstk = 0x01000000; /* xPSR */
*--pstk = (OS_STK) taskEntry; /* pc,所有任务的入口 */
*--pstk = 0; /* lr */
*--pstk = 0; /* r12 */
*--pstk = 0; /* r3 */
*--pstk = 0; /* r2 */
*--pstk = (OS_STK) task; /* r1,任务真正的入口 */
*--pstk = (unsigned int) pdata; /* r0,第一个参数使用R0传递 */
*--pstk = 0; /* r11 */
*--pstk = 0; /* r10 */
*--pstk = 0; /* r9 */
*--pstk = 0; /* r8 */
*--pstk = 0; /* r7 */
*--pstk = 0; /* r6 */
*--pstk = 0; /* r5 */
*--pstk = 0; /* r4 */
*--pstk = 0; /* 关中断计数器OsEnterSum; */
return (pstk);
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -