新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > uC/OS-II在凌陽單片機SPCE061A上的移植

        uC/OS-II在凌陽單片機SPCE061A上的移植

        作者: 時間:2013-10-16 來源:網絡 收藏

        3 uC/OS-II BSP代碼的編寫

          BSP(板級支持包)是介于底層硬件和操作系統之間的軟件層,它對底層硬件進行封裝,使得操作系統不再面對具體的硬件。我們以凌陽SPACE061A單片機為例介紹BSP代碼的編寫。

        3.1 任務切換

          凌陽SPACE061A單片機有R1~R5 五個通用寄存器,還有1個SR(CPU狀態寄存器),再加上PC,總共有7個CPU內部寄存器在任務切換時需要保存。系統調用OSCtxSw( )來實現任務的切換,下面給出其部分代碼:
        _OSCtxSw:
        PUSHALL // 將所有寄存器壓棧
        OSIntCtxSw_in:
        // 求出系統堆棧的長度 ,并將其存入R2
        R1=SP
        R2=OSStkStart
        R1+=1
        R2=R2-R1
        R1=[_OSTCBCuγ]// R1≤OSTCBStkPtr, R1 為任
        //務堆棧的頭指針
        R1=[R1] // 首先將系統堆棧長度保存在任
        //務堆棧中
        [R1]=R2
        R3=OSStkStart // 得到堆棧的起始地址
        // 保存系統堆棧到任務堆棧
        save_stack:
        R3-=1
        R1+=1
        R4=[R3]
        [R1]=R4
        R2-=1
        JNZ save_stack
        CALL _OSTaskSwHook
        R1=[_OSTCBHighRdy]
        [_OSTCBCur]=R1
        R1=[_OSPrioHighRdy]
        [_OSPrioCur]=R1
        JMP OSCtxSw_in

        3.2 系統時鐘

          以凌陽單片機的TMB2時基信號作為系統時鐘,每經歷一個時鐘節拍的時間將產生一次中斷,在中斷服務子程序中會調用OSTickISR()函數,匯編代碼如下:
        _OSTickISR:
        PUSHALL
        R1=0x0001
        test R1,[P_INT_Ctrl]
        JZ OUT
        R1=0x0001
        [P_INT_Clear]=R1
        CALL _OSIntEnter
        CALL _OSTimeTick
        CALL _OSIntExit
        OUT:
        R1=0x0001
        [P_INT_Clear]=R1
        POPALL
        RETI

        結 語

          RTOS是當今嵌入式應用的熱點。應用RTOS,可以提高產品的可靠性,降低研發周期。具有很好的實時性和很小的代碼量,因此掌握uCOS-II的移植方法是相當重要的。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 抚宁县| 英山县| 建湖县| 临高县| 巴东县| 宜川县| 罗平县| 上饶县| 星座| 都江堰市| 九龙城区| 马公市| 蒙城县| 新和县| 香港 | 广平县| 农安县| 蒙阴县| 锡林郭勒盟| 沙坪坝区| 武强县| 彭水| 济南市| 舞阳县| 亳州市| 家居| 成都市| 石嘴山市| 安宁市| 钦州市| 讷河市| 江孜县| 惠安县| 澜沧| 清丰县| 永宁县| 思南县| 乌拉特中旗| 靖远县| 石棉县| 崇信县|