?? os_cpu_c.c
字號:
#define IN_OS_CPU_C
//#include "config.h"
#include "../CONFIG/config.h"
#if EN_SP2 > 0
uint8 Sp2[Sp2Space]; // 高級中斷堆棧
#endif
#if EN_OSStkChk>0
uint16 OS_Stk_Null=0xffff;
uint16 OS_Stk_Min_Null=0xffff;
#endif
//#if OS_MAX_TASKS < 9
//uint8 OSFastSwap = 0xff; // 任務是否可以快速切換
//#else
//uint16 OSFastSwap = 0xffff;
//#endif
#define STACK_END (uint8 *)&OS_STACK[0];
#define STACK_START (uint8 *)&OS_STACK[OS_STACK_SIZE-1];
uint8 OS_STACK[OS_STACK_SIZE];
uint8 * OSTaskStackBottom[OS_MAX_TASKS + 2];
void OSIdle(void)
{
while(1)
{
MCUCR &= ~((1 << SM0) | (1 << SM1) | (1 << SM2));
}
}
void OSStart(void)
{
uint8 *cp;
uint8 i,temp;
cp=STACK_START;
OSTaskStackBottom[0] = STACK_START;
OSTaskStackBottom[OS_MAX_TASKS + 1] =STACK_END;
/* 初始化優先級最高的任務堆棧,使返回地址為任務開始地址 */
*cp-- = (uint8)((uint16)TaskFuction[0]); //返回地址低8位
*cp-- = (uint8)((uint16)TaskFuction[0]>>8); //返回地址高8位
SP = (uint16) cp;
/* 初始化優先級最低的任務堆棧 */
cp = STACK_END;
for(temp=0;temp<OS_TASK_STACK_INIT_SIZE-2;temp++)
{
*(++cp) = 0;
}
*(++cp) = (uint8)((uint16)OSIdle>>8); // 返回地址高8位
*(++cp) = (uint8)((uint16)OSIdle); //返回地址低8位
OSTaskStackBottom[OS_MAX_TASKS] =(uint8 *)cp;
/* 初始化其它優先級的任務堆棧 */
for(i = OS_MAX_TASKS-1; i > 0; i--)
{
for(temp=0;temp<OS_TASK_STACK_INIT_SIZE-2;temp++)
{
*(++cp) = 0;
}
*(++cp) = (uint8)((uint16)TaskFuction[i]>>8); //返回地址高8位
*(++cp) = (uint8)((uint16)TaskFuction[i]); //返回地址低8位
OSTaskStackBottom[i] =(uint8 *)cp;
}
/* 允許中斷 */
Os_Enter_Sum = 1;
OS_EXIT_CRITICAL();
/* 函數返回優先級最高的任務 */
ret();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -