<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è) > 嵌入式系統 > 設計應用 > 嵌入式智能儀表自動(dòng)控制技術(shù)

嵌入式智能儀表自動(dòng)控制技術(shù)

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

任務(wù)的調度算法如下:

void os_schedule_task(void){

int i ;

pCur_task=pHi_task;

for(i=O;i%26lt;TASKNUMos_tcb[i].state!=1;i++){

Hi_task=i;

if(pHi_task!=%26amp;os_tcb[i]){

pHi_task=%26amp;os_tcb[i];

os_sw_task();

}

}

任務(wù)級切換函數需要改變程序計數器(PC),所以必須通過(guò)軟中斷實(shí)現。在軟中斷服務(wù)函數中改變當前運行任務(wù)的TCB指針到最高優(yōu)先級就緒任務(wù),執行中斷返回指令在新的任務(wù)堆棧中彈出最高優(yōu)先級任務(wù)的PSW和PC指針,從而完成任務(wù)切換。

③ 任務(wù)狀態(tài)轉換主要是激活任務(wù)os_TasK_AcTIve()、掛起任務(wù)os_TasK_Suspend()和延遲任務(wù)os_TasK_Delay()。掛起任務(wù)使任務(wù)進(jìn)入掛起狀態(tài),延遲任務(wù)使任務(wù)進(jìn)入等待狀態(tài),而激活任務(wù)函數可以使任務(wù)從掛起狀態(tài)或者等待狀態(tài)直接進(jìn)入就緒狀態(tài)。任務(wù)的狀態(tài)由任務(wù)控制塊中的任務(wù)狀態(tài)字(os_tcb.state)給出。當os_tcb.state=1時(shí)表示任務(wù)進(jìn)入就緒狀態(tài);當os_tcb.state=O時(shí)表示任務(wù)處于掛起狀態(tài);當os_tcb.state%26gt;1時(shí)表示任務(wù)等待os_tcb.state-1個(gè)系統時(shí)鐘間隔之后進(jìn)入就緒狀態(tài)。任務(wù)狀態(tài)切換示意圖如圖2所示。

④由于這些中低端的儀器每個(gè)任務(wù)的執行時(shí)間都比較短,為了避免優(yōu)先級反轉和死鎖,采用非搶占式調度方式,進(jìn)入就緒態(tài)的任務(wù)必須在當前任務(wù)執行完成后才能被調度。調度時(shí)處于就緒表中優(yōu)先級最高的任務(wù)進(jìn)入運行。

3.2.3 調度算法的時(shí)鐘驅動(dòng)

時(shí)間驅動(dòng)需要硬件提供時(shí)鐘節拍來(lái)實(shí)現任務(wù)的定時(shí)。時(shí)鐘節拍信號源可以是專(zhuān)門(mén)的硬件定時(shí)器,比如AT89C52中的Timer2。也可以使用其他更精確的方式提供系統時(shí)鐘節拍。在這里使用MC9S12DP256B捕獲器的第7個(gè)通道來(lái)實(shí)現,時(shí)鐘中斷處理函數如下:

的捕獲器中有一個(gè)自動(dòng)增長(cháng)主時(shí)鐘,每一個(gè)硬件周期驅動(dòng)TCNT+1,并與TC7相比較。設置TC7=TCNT+OS_TICK_OC_CNTS(在系統配置文件中定義),當度過(guò)OS_TICK_OC_CNTS個(gè)硬件周期時(shí),TCNT=TC7則產(chǎn)生中斷。在中斷中調用系統時(shí)鐘節拍函數提供精確的系統時(shí)鐘節拍,并再次初始化TC7=TCNT+OS_TICK_OC_CNTS,產(chǎn)生下一個(gè)時(shí)鐘節拍。

系統時(shí)鐘節拍函數自動(dòng)檢查每個(gè)被延遲的任務(wù),當任務(wù)的延遲周期結束后,自動(dòng)將任務(wù)切換到就緒狀態(tài)。具體算法如下:

① 從任務(wù)控制塊列表頭部開(kāi)始順序檢查各任務(wù)狀態(tài)字,將所有延遲任務(wù)的任務(wù)狀態(tài)字減1。

② 當前延遲任務(wù)的狀態(tài)字變?yōu)?時(shí),該任務(wù)延時(shí)結束,置就緒任務(wù)列表改變標志位。

③ 恢復被中斷任務(wù)狀態(tài),返回中斷。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

上一頁(yè) 1 2 下一頁(yè)

評論


相關(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>