新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于LPC2478的網絡型電能質量監測裝置人機交互功能研發

        基于LPC2478的網絡型電能質量監測裝置人機交互功能研發

        作者: 時間:2012-08-21 來源:網絡 收藏

        2. 1 μC/OS-Ⅱ的移植

        μC /OS-Ⅱ嵌入式操作系統的移植工作包含以下幾個內容:編寫硬件初始化啟動代碼;編寫設備驅動代碼;修改操作系統與硬件相關的代碼。

        所謂啟動代碼,就是處理器在啟動的時候執行的一段代碼,主要任務是定義程序入口指針;設置異常向量;初始化處理器各模式下的堆棧和寄存器;配置 CPU 時鐘源;初始化系統功能模塊;跳轉到C 語言主程序中等等。由于以上的操作均與處理器體系結構和系統配置密切相關,所以一般由匯編來編寫。在裝置中示意性的啟動代碼為:

        PRESERVE8

        Vectors LDR PC,Reset_Addr

        LDR PC,Undef_Addr

        LDR PC,SWI_Addr

        LDR PC,PA^_Addr

        LDR PC,DA^_Addr

        LDR PC,IRQ_Addr

        LDR PC,FIQ_Addr

        Reset_Addr

        為每一種處理器模式初始化堆棧;

        地址重映射,設置MEMMAP = 1;

        配置時鐘源,設置Fpclk = 72M;

        初始化FLASH;

        初始化SDRAM;

        IMPORT __main

        LDR R0,= __main

        BX R0;跳轉到主程序中

        設備驅動代碼是操作系統和硬件之間的橋梁。通過驅動代碼,用戶可以不用了解具體硬件的細節,只需調用驅動層所提供的函數就能對硬件進行操作。在移植μC /OS-Ⅱ時,亦只需根據硬件環境編寫必要的硬件驅動程序即可。在此移植中,涉及到功能的硬件除微處理器 外主要是鍵盤和液晶,液晶部分的驅動代碼包含在了μC /GUI 圖形接口的移植步驟中。而鍵盤的主要功能為接受用戶的輸入,在微處理器 中,可以使用I /O 中斷的功能來實現對鍵盤輸入的監測,驅動代碼則為鍵盤的中斷處理程序:

        void Key_Handler(void)

        { DWORD key_n = 0;

        key_n = IO0_INT_STAT_F; / /讀取中斷狀態

        IO0_INT_EN_F & = 0xE07F8FFF; / /禁止中斷

        IO0_INT_CLR | = 0xFFFFFFFF; / /清除中斷

        if ((key_n&0x00800000) = = 0x00800000)

        { OSMboxPost(Keybox,(void * )1);}

        if ((key_n&0x01000000) = = 0x01000000)

        { OSMboxPost(Keybox,(void * )2);}

        if (key_n&0x02000000) = = 0x02000000)

        { OSMboxPost(Keybox,(void * )3);}

        if ((key_n&0x08000000) = = 0x08000000)

        { OSMboxPost(Keybox,(void * )4);}

        if ((key_n&0x10000000) = = 0x10000000)

        { OSMboxPost(Keybox,(void * )5);}

        if ((key_n&0x00001000) = = 0x00001000)

        { OSMboxPost(Keybox,(void * )6);}

        IO0_INT_EN_F | = 0x1F807000; / /開啟中斷

        }

        編寫完硬件初始化啟動代碼和設備驅動代碼之后,在修改操作系統與硬件相關的代碼之前,應該了解μC /OS-Ⅱ的體系結構如圖3 所示。移植μC /OS-Ⅱ,最主要的工作就是移植與硬件相關的3 個文件,即OS _CPU. H、OS _CPU_C. C 和OS _CPU_A. ASM。OS_CPU. H 中含有用#define 定義的與處理器有關的常量、宏和類型定義。通過對此處定義的修改,可以使源代碼中對數據類型的使用不依賴于具體的處理器。移植時,只要使處理器、編譯器和 μC /OS-Ⅱ三者之間數據類型統一即可。在此文件中還有一個μC /OS-Ⅱ對堆棧增長方式的定義OS_STK_GROWTH,由于Keil 只支持遞減堆棧,因此,此處需要定義OS _ STK _GROWTH 的值為1。OS_CPU_C. C 文件中,需要進行的工作是編寫任務堆棧初始化函數OSTask-StkInit()。該函數在創建一個任務時被調用。根據微處理器的寄存器結構,就可以確定在本次移植中針對 應該使用的任務的堆棧結構,從而可以寫出堆棧初始化函數代碼。在OS_CPU_A. ASM 文件中,有4 個函數需要編寫,分別是啟動最高優先級就緒任務函數OSStartHighRdy(),時鐘節拍中斷服務子程序OSTickISR(),任務級任務切換函數OS_TASK_SW( ) 及中斷級任務切換函數OSIntCtxSw()。

        μC/OS-Ⅱ的體系結構圖
        μC/OS-Ⅱ的體系結構圖
        圖3 μC/OS-Ⅱ的體系結構圖。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 交城县| 澄江县| 萨嘎县| 新建县| 建阳市| 集贤县| 寿阳县| 巴东县| 阜新市| 新化县| 蓝田县| 张家川| 邹平县| 洛南县| 安平县| 营口市| 图们市| 马山县| 来宾市| 怀集县| 金昌市| 旺苍县| 奉节县| 鹤山市| 辉县市| 乐平市| 涿鹿县| 崇信县| 灵台县| 建瓯市| 青海省| 东阳市| 石河子市| 三穗县| 连城县| 洛浦县| 鱼台县| 兴义市| 霍城县| 通州市| 潢川县|