新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > μC/OS-Ⅱ在MC9S12A64上的移植及應用

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

        作者: 時間:2012-05-17 來源:網絡 收藏

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

        2.2.2 任務級任務切換

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

        void OSCtxSw(void)

        {

        asm{

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

        psha

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

        sts 0,x

        }

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

        OSTCBCur = OSTCBHighRdy; // 將優先級最高的就緒態任務的任務控制塊指針復制給當前運行的任務控制塊中

        OSPrioCur = OSPrioHighRdy;

        asm{

        ldx OSTCBCur // 找出新任務的堆棧指針

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

        pula

        staa ppage //恢復頁面寄存器

        nop

        rti

        }

        }

        2.3 信號量的建立與使用

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

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



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 深州市| 丹棱县| 芷江| 敦化市| 饶阳县| 蓬安县| 垣曲县| 盱眙县| 乐业县| 泊头市| 伊春市| 内江市| 靖西县| 炉霍县| 仲巴县| 大邑县| 双流县| 贡觉县| 兴义市| 舟山市| 抚顺市| 汤原县| 桦南县| 乐东| 凤凰县| 新巴尔虎左旗| 桂林市| 金秀| 金溪县| 南华县| 大丰市| 绥江县| 中牟县| 建水县| 河池市| 道孚县| 乌鲁木齐市| 延安市| 台中县| 彭水| 汽车|