新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 實時操作系統µC/OS-II在ARM7上的移植

        實時操作系統µC/OS-II在ARM7上的移植

        作者: 時間:2012-04-10 來源:網絡 收藏

        1 引言

        本文引用地址:http://www.104case.com/article/171661.htm

        目前,嵌入式系統在家電、移動電話、PDA等各種領域的應用日益廣泛,程序設計也越來越復雜,這就需要采用一個通用的嵌入式來對其進行管理和控制。的嵌入式系統開發,可大大減輕程序員的負擔,提供了多任務的管理功能,只需專注于每個任務的管理。對于不同的應用,可以按照相同的步驟完成系統設計。如果更換硬件平臺,則只需要對操作系統進行少量的工作,與硬件無關的應用代碼完全無需修改,同時,可增強代碼的可讀性、可維護性和可擴展性。

        ;是一種專門為微處理器設計的搶占式多任務操作系統,具有源代碼公開、可性和可靠性高等特點。由于;是為嵌入式應用編寫的通用軟件,故在具體應用時需根據不同單片機的特點進行移植,其大部分代碼是用標準C語言所寫,只有與處理器相關的一部分代碼用匯編語言編寫,因而具有很強的移植性,能在從8位到64位單片機以及DSP等超過40種不同構架的微處理器上實現運行。本文主要介紹;在Samsung公司的一款TDMI的嵌入式處理器S3C44B0X上移植應用。

        要實現µC/OS-II在S3C44B0X的構建、裁剪和移植,需要有S3C44B0X的編譯器,本文采用的是英蓓特公司推出的EmbestIDE for ARM編譯器。

        2 µC/OS-II在S3C44B0X上移植的可行性分析

        所謂移植,就是使一個內核能在某個微處理器或微控制器上運行。要使µC/OS-II能夠正常運行,處理器必須滿足以下幾個條件:

        (1)處理器的C編譯器能產生可重人代碼;

        (2)在程序中可以打開或者關閉中斷;

        (3)處理器支持中斷,并且能產生定時中斷(通常在l0~l000Hz之間);

        (4)處理器支持能夠容納一定量數據的硬件堆棧;

        (5)處理器有將堆棧指針和其他CPU寄存器存儲和讀出到堆棧(或者內存)的指令。Samsung公司的S3C44BOX處理器能夠滿足以上的要求,所以可以將µC/OS-II移植到S3C44B0X上。

        3 µC/OS-II在S3C44B0X上移植的概要

        µC/OS-II硬件和軟件的體系結構如圖1所示。從圖中可以看出,對µC/OS-II的移植實際上就是對與處理器有關的代碼進行重寫或修改。本文中移植代碼結構由四部分組成,分別是用戶代碼部分、核心代碼部分、設置代碼部分、與處理器相關的移植代碼部分。用戶代碼即應用軟件,用來實現用戶的具體要求,例如本文中和PC機的串口通訊代碼;核心代碼部分, 包含OS_CORE.C、COS_FLAG.C、OS_MBOX.C、OS_MEME.C、OS_Q.C、OS_SEM.C、OS_TASK.C、 OS_TIME.C、µC/OS-II.C、µC/OS-II.H 十個文件;設置代碼部分,即µC/OS-II配置代碼,包含OS_CFG.H、INCLUDES.H 兩個文件,用來配置事件控制塊的數目以及是否包含消息管理相關代碼等;與處理器相關代碼即µC/OS-II要移植的處理器配置代碼,包含 OS_CPU.H、OS_CPU_A.ASM、OS_CPU_C.C三個文件,在µC/OS-II的移植過程中,用戶所需要關注的就是這部分文件。

        43.jpg
        圖1 µC/OS-II軟硬件體系結構

        4 µC/OS-II在S3C44B0X上移植代碼分析

        4.1 OS_CPU.H文件分析

        OS_CPU.H包括用#define定義的與處理器有關的常量、宏和類型定義。

        (1)定義與編譯器相關的數據類型。

        µC/OS-II為了保證可移植性,程序中沒有直接使用int、unsigned int等定義,而是自己定義了一套數據類型,例如,INT8U表示8位無符號整型,INT16U表示16位無符號整型等。對于ARM這樣的32位內核,INT16U是unsigned short型;若是16位的處理器,則是unsigned int型。不能使用bit型變量,把BOOLEAN型定義成unsigned char型。另外S3C44B0X數據寬度和堆棧寬度都是32位,分別將OS_STK和OS_CPU_SR定義成unsigned int型。

        (2)義堆棧增長方向

        在µC/OS-II中,用OS_STK_GROWTH來設置堆棧的增長方向,OS_STK_GROWTH為0表示堆棧從低地址向高地址增長;OS_STK_GROWTH為l表示堆棧從高地址向低地址增長,其宏定義為:

        #define OS_STK_GROWTH l; //堆棧從高地址向低地址增長

        #define OS_STK_GROWTH 0; //堆棧從低地址向高地址增長

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 泾川县| 湟源县| 三亚市| 屯昌县| 庆安县| 富蕴县| 海城市| 南华县| 满洲里市| 修武县| 都兰县| 泽普县| 石柱| 乌鲁木齐县| 雅江县| 桐柏县| 武宁县| 临城县| 中宁县| 电白县| 河南省| 东台市| 岐山县| 慈利县| 浑源县| 连州市| 鄂伦春自治旗| 河东区| 湘潭县| 恭城| 高青县| 蓝田县| 全椒县| 泸定县| 莎车县| 通道| 五寨县| 南昌市| 莒南县| 金乡县| 田东县|