在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > μC/OS-Ⅱ在MC9S12A64上的移植及應(yīng)用

            μC/OS-Ⅱ在MC9S12A64上的移植及應(yīng)用

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

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

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

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

            void OSCtxSw(void)

            {

            asm{

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

            psha

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

            sts 0,x

            }

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

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

            OSPrioCur = OSPrioHighRdy;

            asm{

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

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

            pula

            staa ppage //恢復(fù)頁面寄存器

            nop

            rti

            }

            }

            2.3 信號量的建立與使用

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

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



            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉