<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è) > 嵌入式系統 > 設計應用 > μC/OS-Ⅱ在MC9S12A64上的移植及應用

μC/OS-Ⅱ在MC9S12A64上的移植及應用

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

當時(shí)鐘節拍中斷發(fā)生時(shí),CPU12會(huì )自動(dòng)把CPU寄存器推入堆棧,但并不包括存儲頁(yè)面寄存器PPAGE,如果單片機系統的尋址范圍超過(guò)64KB,需要通過(guò)給PPAGE賦值來(lái)區分不同的16KB地址,則需要把PPAGE也推入堆棧。OSTimtick()當某任務(wù)的任務(wù)控制塊中的時(shí)間延時(shí)項 OSTCBDly減到了零,這個(gè)任務(wù)就進(jìn)入了就緒態(tài)。OSIntExit()會(huì )調用中斷級的任務(wù)切換函數OSIntCtxSw()做任務(wù)切換,而不再執行后面的指令。如果沒(méi)有更高優(yōu)先級的任務(wù)進(jìn)入就緒態(tài),則CPU會(huì )返回中斷前狀態(tài)。

2.2.2 任務(wù)級任務(wù)切換

OSCtxSW()實(shí)際上就是軟中斷服務(wù)子程序,軟中斷服務(wù)子程序向量地址必須指向OSCtxSW(),在連接文件中設置。如果當前任務(wù)調用μC/OS-Ⅱ提供的系統服務(wù),并使得更高優(yōu)先級任務(wù)處于就緒狀態(tài),μC/OS-Ⅱ就會(huì )借助上面提到的向量地址找到OSCtxSw()。

void OSCtxSw(void)

{

asm{

ldaa ppage //將任務(wù)的存儲頁(yè)面寄存器推入堆棧

psha

ldx OSTCBCur // 保存被掛起任務(wù)的堆棧指針到任務(wù)控制塊

sts 0,x

}

OSTaskSwHook(); // 如果有時(shí)間要求苛刻的任務(wù),可以通過(guò)用戶(hù)接口函數調用

OSTCBCur = OSTCBHighRdy; // 將優(yōu)先級最高的就緒態(tài)任務(wù)的任務(wù)控制塊指針復制給當前運行的任務(wù)控制塊中

OSPrioCur = OSPrioHighRdy;

asm{

ldx OSTCBCur // 找出新任務(wù)的堆棧指針

lds 0,x // 裝入CPU的SP寄存器中

pula

staa ppage //恢復頁(yè)面寄存器

nop

rti

}

}

2.3 信號量的建立與使用

(1)首先到μC/OS-II配置文件OS_CFG.C中將OS_SEM_EN設置為1這樣μC/OS-II才能支持信號量。接著(zhù)要調用OSSemCreate()函數建立該信號量,如果信號量是用于對共享資源的訪(fǎng)問(wèn),那么該信號量的初始值應設為1。

(2)等待信號量OSSemPend()函數,它首先檢查指針pevent所指的任務(wù)控制塊是否是由OSSemCreate()。如果信號量當前是可用的,將信號量的計數值減1,然后函數將“無(wú)錯”錯誤代碼返回給它的調用函數。如果信號量的計數值為0,則調用OSSemPend()函數的任務(wù)要進(jìn)入睡眠狀態(tài),等待另一個(gè)任務(wù)發(fā)出該信號量。OSSemPend()允許用戶(hù)定義一個(gè)最長(cháng)等待時(shí)間作為它的參數,這樣可以避免該任務(wù)無(wú)休止地等待下去。如果該參數值為0,則該任務(wù)將一直等待下去。



評論


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