????д???????????????
???????????? ???????[ 2013/8/14 11:30:19 ] ????????
????????????????????????????????????????????к??????????????????100?????????????????101?????????101?????????????????????????????????????????????????ζ?????????101????????????????檔??????????????????????????????????????????????????????????滹??????????????????????????????????????????????飬??Ч???????????????????????????????????????????????????????????????л?????β????????????????o??????????л???????????????while(1)???????????????е?OSTimedly()????????????????????????????????????????ж??и???????????????????????????????0????????????????????????????????????С????????????????????????????????????????????????????ж???????????????????????
/*
*????????????????ж??е???
*/
void OSTimeTick (void)
{
int8 index;
TCB *pTCB;
uint8 flagFirstTask=0;
OS_CPU_SR cpu_sr = 0;
OS_ENTER_CRITICAL();
/*?????*/
OSNewTCB = NULL;
/*???????*/
if (OSScheLock != 0)
{
OS_EXIT_CRITICAL();
return;
}
for (index = 0;index < TaskNUM;index++)
{
pTCB = OSTCBTable+index;
/*???????????????????????????--*/
if (pTCB->TCBDelay > 0)
{
pTCB->TCBDelay--;
continue;
}
/*??????????*/
if (pTCB->TaskStat == OS_Task_Pend)
{
continue;
}
/*???????????????????????????????*/
/* ????????????????????????*/
if (flagFirstTask==0)
{
/*?????????????????
??????????????????*/
if (OSCurTCB->CurPriority < pTCB->CurPriority)
{
flagFirstTask = 1;
OSNewTCB = pTCB;
continue;
}
/*????????????????????*/
if (OSCurTCB->CurPriority > pTCB->CurPriority)
{
if (OSNewTCB == NULL)
{
flagFirstTask = 1;
OSNewTCB = pTCB;
continue ;
}
else
{
flagFirstTask = 1;
continue ;
}
}
/*?????????????????
????????????????????*/
if (OSCurTCB->CurPriority == pTCB->CurPriority)
{
/*?????????????????*/
if ((pTCB > OSCurTCB)||(pTCB == OSCurTCB))
{
flagFirstTask = 1;
OSNewTCB = pTCB;
continue ;
}
/*??????????????????????
?????????????????????????????????*/
if ((pTCB < OSCurTCB)&&(OSNewTCB == NULL))
{
OSNewTCB = pTCB;
continue;
}
}
continue;
}
}
OS_EXIT_CRITICAL();
}
??????ж???????????????????????????????ú??????????????????????????????????????????????????????????????????????? OSNewTCB = pTCB;????????????????????? OSNewTCB ??
void SysTick_Handler(void)
{
OSIntEnter(); //?????ж?
OSTimeTick();
OSIntExit(); //?????????л????ж?
}
/*
*????ж???????
*/
void OSIntEnter (void)
{
if (NULL != OSCurTCB)
{
if (OSIntNesting < 255u)
{
OSIntNesting++; /* Increment ISR nesting level */
}
}
}
/*
*?ж???????????????ж???????л?
*/
void OSIntExit (void)
{
OS_CPU_SR cpu_sr = 0u;
if (NULL!= OSCurTCB)
{
OS_ENTER_CRITICAL();
if (OSIntNesting > 0u)
{
OSIntNesting--;
}
if (OSIntNesting == 0u)
{
/* ?????е??ж????????ж??????? */
if (OSNewTCB != OSCurTCB)
{
/* ?ж???????л? */
OSIntCtxSw();
}
}
OS_EXIT_CRITICAL();
}
}
??????
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11