新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于嵌入式實時操作系統(tǒng)的現(xiàn)場總線網(wǎng)關的設計

        基于嵌入式實時操作系統(tǒng)的現(xiàn)場總線網(wǎng)關的設計

        作者: 時間:2012-08-21 來源:網(wǎng)絡 收藏

        在μC/OS-Ⅱ中同樣實現(xiàn)了消息隊列結(jié)構OSQ及其相應操作函數(shù),但在μC/OS-Ⅱ并沒有對消息隊列中的消息進行管理,因此不能直接使用,所以sys_mbox_t結(jié)構定義如上面所述。對隊列本身的管理利用μC/OS-Ⅱ的OSQ操作完成;對消息的創(chuàng)建、使用、刪除回收使用μC/OS-Ⅱ中的內(nèi)存管理模塊實現(xiàn),兩部分綜合起來形成了LwIP的消息隊列功能。
        2.網(wǎng)絡設備驅(qū)動程序
        驅(qū)動程序主要包括:
        (1) 初始化CPU芯片s3c4510b的ethernet controller的寄存器和PHY芯片ICS1890的控制寄存器;
        (2) 中斷處理函數(shù);
        (3) 接收數(shù)據(jù)包和發(fā)送數(shù)據(jù)包處理函數(shù)。
        四、μC/OS-Ⅱ在s3c4510b上的移值
        μC/OS-Ⅱ是一個開源的RTOS,其主要工作流程如圖4所示。任務切換的核心是利用出棧指令將每個任務的工作現(xiàn)場恢復,并且調(diào)整PC指針來完成任務的切換。μC/OS-Ⅱ移值的關鍵就是如何構造任務堆棧及切換任務時的出棧順序。在這個流程圖中我們可以看到在移值過程中需編寫的幾個子程序的位置。
        由圖4的工作流程可以看出要實現(xiàn)μC/OS-Ⅱ的移值,必須對系統(tǒng)源碼做必要的修改,主要集中在以下三個文件中。


        (一) OS CPU.H文件
        OS_CPU.H中包括了用#define定義的與處理器相關的常量、宏、數(shù)據(jù)類型、堆棧單位和堆棧增長方向。
        1.數(shù)據(jù)類型定義
        不同的處理器有不同的字長,而且數(shù)據(jù)字長和所用的編譯器也有關系,因此在移植中要定義一些數(shù)據(jù)類型。在本網(wǎng)關的設計中所用的編譯器是開源的GNU下的arm-elf-gCC,用戶需要做的就是查看所用的編譯器手冊,確定對應于μC/OS-Ⅱ的標準C數(shù)據(jù)類型。
        2.堆棧單位及增長方向
        任務堆棧的數(shù)據(jù)類型必須和CPU的寄存器長度一致,通過為OS_STK聲明正確的數(shù)據(jù)類型來完成的,在本設計中的聲明如下:
        typedef unsigned int OS_STK;
        / * Each stack entrY is 32_bit wide */
        堆棧的增長用OS_STK_GROWTH來設置,OS_STK_GROWTH為O表示堆棧從下向上增長,為1表示堆棧從上向下增長,在本設計中的定義如下:
        #define OS_STK_GROWTH l
        3.宏定義
        宏定義包括開關中斷及任務切換的宏定義:
        #define OS_ENTER_CRITICAL( )ARMDis-ableInt( )
        #define OS_EXIT_CRITICAL( )ARMEna-bleInt( )
        #define OS_TASK_SW( )OSCtXSw( )
        (二)OS_CPU_C.C
        OS_CPU_C.C主要包括任務堆棧的初始化,及系統(tǒng)鉤子函數(shù)的定義。在這個文件中包括以下6個函數(shù):
        OSTaskStkInit( )
        OSSTaskCreateHook( )
        OSTaskDelHook( )
        OSTaskSwHook( )
        OSTaskStatHook( )
        OSTimeTickHook( )
        其中5個HOOK函數(shù)如果沒有特殊要求,只需聲明為空函數(shù),必須修改的是OSTaskStkInit ( )。 OSTaskStkInit( )的實現(xiàn)如下:
        void * OSTaskStkInit (void (* task) (void * pd),void * pdata,void * ptos,INTl6Uopt)
        {
        unsigned int * stk;

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


        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 化隆| 隆安县| 军事| 房产| 克山县| 湛江市| 上思县| 台山市| 吴旗县| 简阳市| 水富县| 兴宁市| 建平县| 塔河县| 乃东县| 武冈市| 武乡县| 白玉县| 柳林县| 大英县| 灵石县| 泰安市| 金阳县| 饶阳县| 大余县| 堆龙德庆县| 通山县| 新晃| 奈曼旗| 乐安县| 平武县| 板桥市| 油尖旺区| 丁青县| 封丘县| 惠水县| 威海市| 沂水县| 油尖旺区| 宝鸡市| 无为县|