<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 混合式調度器C51源代碼

混合式調度器C51源代碼

作者: 時(shí)間:2010-08-23 來(lái)源:網(wǎng)絡(luò ) 收藏

uchar SCH_Add_Task(void (code * pFunction)(),const ushort DELAY, ushort PERIOD,bit Co_op)
{
uchar Index = 0;
//首先在隊列中找到一個(gè)空隙(如果有的話(huà),否則就不添加新任務(wù))
while((SCH_tasks_G[Index].pTask != 0)(Index SCH_MAX_TASKS))
{
Index++;//當一個(gè)新任務(wù)被添加,且沒(méi)有超過(guò)任務(wù)上限
}
//是否達到任務(wù)隊列的結尾?
if(Index == SCH_MAX_TASKS)//任務(wù)數量達到上限
{
Error_code_G = ERROR_SCH_TOO_MANY_TASKS;
return SCH_MAX_TASKS;//直接返回,不添加這個(gè)新任務(wù)
}
//如果能運行到這里,說(shuō)明任務(wù)隊列中有空隙,添加任務(wù)。
SCH_tasks_G[Index].pTask = pFunction;
SCH_tasks_G[Index].Delay = DELAY;
SCH_tasks_G[Index].Period = PERIOD;
SCH_tasks_G[Index].Co_op = Co_op;
SCH_tasks_G[Index].RunMe = 0;
return Index;//返回任務(wù)的位置(以便以后刪除)
}

本文引用地址:http://dyxdggzs.com/article/151635.htm

void SCH_Dispatch_Tasks(void)
{
uchar Index;
//(運行)下一個(gè)任務(wù)(如果有任務(wù)就緒)
for(Index = 0;Index SCH_MAX_TASKS;Index++)
{
//只合作式任務(wù)
if((SCH_tasks_G[Index].RunMe > 0)(SCH_tasks_G[Index].Co_op))
{
(*SCH_tasks_G[Index].pTask)();//執行任務(wù)
SCH_tasks_G[Index].RunMe -= 1;//清除任務(wù)需要執行的標志
}
//如果這是個(gè)“單次”任務(wù),將它從隊列中刪除
if(SCH_tasks_G[Index].Period == 0)
{
SCH_tasks_G[Index].pTask = 0;// 比通過(guò)調用來(lái)刪除任務(wù)更快SCH_Delete_Task(Index);
}
}
SCH_Report_Status();//報告系統狀況
SCH_Go_To_Sleep();
}

void SCH_Start(void)
{
EA = 1;
}

bit SCH_Delete_Task(const ushort TASK_INDEX)
{
bit Return_code;
if(SCH_tasks_G[TASK_INDEX].pTask == 0)
{
//這里沒(méi)有任務(wù)。。。設置全局錯誤變量
Error_code_G = ERROR_SCH_CANOT_DELETE_TASK;
Return_code = RETURN_ERROR;//返回錯誤代碼
}
else
{
Return_code = RETURN_NORMAL;
}
//刪除任務(wù)
SCH_tasks_G[TASK_INDEX].pTask = 0x0000;
SCH_tasks_G[TASK_INDEX].Delay = 0;
SCH_tasks_G[TASK_INDEX].Period = 0;
SCH_tasks_G[TASK_INDEX].RunMe = 0;
return Return_code;
}

void SCH_Go_To_Sleep()
{
PCON |= 0x01;//進(jìn)入休眠模式
}

void SCH_Report_Status(void)
{
/* #ifdef SCH_REPORT_ERRORS
if(Error_code_G != Last_error_code_G)
{
Error_Port = 255 - Error_code_G;
Last_error_code_G = Error_code_G;
if(Error_code_G != 0)
{
Error_tick_count_G = 60000;
}
else
{
Error_tick_count_G = 0;
}
}
else
{
if(Error_tick_count_G != 0)
{
if(--Error_count_G == 0)
{
Error_code_G = 0;
}
}
}
#endif */
}

void LED_Flash_Update_A(void)
{
if(LED_State_G_A == 1)
{
LED_State_G_A = 0;
LED_pin_A = 0;
}
else
{
LED_State_G_A = 1;
LED_pin_A = 1;
}
}

void LED_Flash_Update_B(void)
{
if(LED_State_G_B == 1)
{
LED_State_G_B = 0;
LED_pin_B = 0;
}
else



關(guān)鍵詞: 源代碼 C51 調度 混合式

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>