<strike id="os0yi"><s id="os0yi"></s></strike>
<noscript id="os0yi"></noscript>
    • 歡迎光臨燃氣表信息網!
     
    當前位置: 首頁 » 技術前沿 » 技術論文 » 正文

    嵌入式實時操作系統與網絡構件的設計

    字體: 放大字體  縮小字體 發布日期:2007-11-07  作者:肖軍,邵景峰,馬輝,劉文臣  瀏覽次數:1297
    1、引言

        近年來,嵌入式實時操作系統接入網絡后將使遠程監測、遠程控制、遠程診斷和遠程維護變得越來越容易。從根本上講,嵌入式設備接入網絡,當前基本上所采用的網絡協議是基于TCP/IP通信協議。

        由于嵌入式系統是以計算機技術為基礎、軟硬件可裁減并對成本、體積、功耗有嚴格要求的專用系統,它對TCP/IP通信協議的支持有其自身的特點,這些特點也決定嵌入式實時操作系統與網絡構件的體系結構。

        本方案以LPC2210為核心元件研究了嵌入式實時操作系統與網絡構件的硬件電路,同時在μC/OS-Ⅱ平臺上編寫了應用軟件程序。

        2、嵌入式實時操作系統與網絡構件的系統整體結構

        嵌入式實時操作系統與網絡構件的硬件原理圖如圖1所示。系統采用PHILIPS公司LPC2210微處理器,外擴一片FLASH SST 39VF160,并接入RTL8019AS以太網芯片(Webchip),再與接口連接器HR901170A相連。并將開放源代碼的TCP/IP協議棧LwIP移植到μC/OS-Ⅱ系統上。


    圖1 硬件結構原理圖

        RTL8019AS以太網芯片(Webchip)是獨立于各種微控制器的專用網絡接口芯片,它通過標準的輸入、輸出口與MCU相連。具有16位的數據總線和24為的地址總線,并且內部集成了DMA控制器、ISA總線控制器和集成16k SRAM、網絡PHY收發器,兼容NE2k標準。用戶可以通過DMA方式把需要發送的數據寫入片內SRAM中,讓芯片自動將數據發送出去;而芯片接收到數據后,用戶可以通過DMA方式將其讀出。

        HR901170A是中山市漢仁電子有限公司生產的RJ45接口連接器(帶網絡變壓器/濾波器),該連接器滿足IEEE802.3和IEEE902.3ab標準,能夠較好的抑制電磁干擾。通過HR901170A系統就可以連接到以太網上了。

        該方案設計相對簡單,硬件電路中采用的LPC2210是PHILIPS公司推出的微處理器,帶有16k RAM,76個通用I/O口,12個獨立外部中斷引腳,集成有8通道的10位A/D,能夠基于芯片設計復雜的系統。雖然LPC2210具有較快的訪問速度,但片內沒有集成FLASH,所以這里擴展一片16Mbit FLASH SST 39VF160保存用戶程序。其架構滿足了μC/OS-Ⅱ正常運行的基本要求。

        3、嵌入式實時操作系統與網絡構件的軟件設計

        為使嵌入式實時操作系統與網絡構件具有交好的實時性和穩定性,在實時多任務操作系統μC/OS-Ⅱ平臺上設計系統軟件。系統中各個任務在宏觀上按照一定的關系并行工作,CPU資源得到充分利用,系統可靠性得到很大的保證,方便組織開發任務。在μC/OS-Ⅱ平臺上,軟件設計工作主要包括三個方面的內容:μC/OS-Ⅱ在LPC2210上的移植和LwIP協議在μC/OS-Ⅱ上的實現以及系統應用軟件的編寫。本設計的系統結構圖如圖2所示:


    圖2 系統結構圖

        該系統采用源碼公開的嵌入式實時操作系統μC/OS-Ⅱ,版本號為V2.52。其特點是源碼公開、可讀性強、移植性好、可配置、可裁剪。它采用優先級搶占式調度方案,優先級最高的任務一旦準備就緒,則擁有CPU的所有權并開始投入運行。μC/OS-Ⅱ的軟硬件體系結構圖如圖3所示。應用程序建立在操作系統之上,處于系統的頂層,每個任務在宏觀上是并行運行。與CPU類型無關的代碼提供了系統服務,即內核、任務管理、內存管理等。μC/OS-Ⅱ的移植部分用于完成與不同處理器的接口工作。μC/OS-Ⅱ的移植必須要求處理器及其編譯器滿足一定的條件。


    圖3 μC/OS-Ⅱ硬件和軟件體系結構原理圖

        μC/OS-Ⅱ的移植工作主要集中在下面幾個文中:OS_CPU.H,OS_CPU_A.ASM,OS_CPU_C.C。另外,在INCLUDES.H中必須包括LPC2210文件LPC2210.H;OS_CFG.H用于系統應用μC/OS-Ⅱ中的初始化配置。OS_CPU.H主要包括了一些與處理器和編譯器相關的常量和類型定義等,而且要注意的是LPC2210的堆棧方向是由高到低,用OS_STK_GROWTH來設置堆棧的增長方向。因此將OS_STK_GROWTH設為1。
        OS_CPU_A.ASM中需要編寫4個匯編語言函數:OS_TASK_SW(),OS_IntCtxSw(),OSStartHighRdy()和OSTickISR()。

        OSStartHighRdy()代碼如下:

        LDR  r4, addr_OSTCBCur    
        ;獲得當前任務TCB地址
        LDR  r5, addr_OSTCBHighRdy
        ;獲得優先級最高任務TCB地址
        ……
        ;恢復CPU工作模式
        LDMFD  sp!, {r4}
        MSR   SPSR_cxsf, r4
        LDMFD  sp!, {r4}
        MSR   CPSR_cxsf, r4
        LDMFD  sp!, {r0-r12, lr, pc}

        OS_TASK_SW( )函數匯編代碼如下:

        STMFD  sp!,  {lr}  ;保存pc
        STMFD  sp!,  {lr}  ;保存lr
        STMFD  sp!,  {r0~r12}
        ;保存寄存器和返回地址
        …… 
        ;得到當前任務TCB地址
        LDR  r4, addr_OSTCBCur
        LDR  r5, [r4]
        STR  sp, [r5]    
        ;保存sp在被占先任務的TCB
        ;得到最高優先級任務的TCB地址
        LDR  r6, addr_OSTCBHighRdy
        LDR  r6, [r6]
        LDR  sp, [r6]    
        ;得到新任務堆棧指針
        ;OSTCBCur = OSTCBHighRdy
        STR  r6, [r4]    
        ;設置新的當前任務的TCB地址
        ……

        OSIntCtxSw()函數匯編代碼如下:

        LDR  sp,=IRQ_STACK  
        SUB  r7, sp, #4  
        ;將處理器切換到管理模式
        MRS  r1, SPSR
        ORR  r1, r1, #0xC0
        MSR  CPSR_cxsf, r1  
        ;完成模式切換
        ……
        STMFD  sp!, {r4}    
        ;保存程序狀態寄存器
        ……
        OS_CPU_C.C需要用C語言編寫6個與操作系統相關的函數:OSTaskStkInt(),OStaskCreateHooK(),OStaskDelHook(),OStaskSwHook(),OStaskStatHook(),  OSTimeTickHook()。必須編寫的是OSTaskStkInt(),其余5個函數必須聲明但可以不編寫代碼。

        void *OSTaskStkInit(void(*task)(void *pd),void *pdata, OS_STK *ptos, INT16U opt)
        { OS_STK *stk;
        opt = opt
        //防止編譯錯誤
        stk = ptos;   
        //裝載堆棧指針
        ……
        *--stk = (USER_USING_MODE|0x00);
        //spsr,允許IRQ,FIQ中斷
        *--stk = ();  
        //關中斷計數器OsEnterSum
         return (stk);
        }

        下來要做的就是LwIP在μC/OS-Ⅱ上的移植,即就是把與硬件、OS、編譯器相關的部分獨立出來放在/src/arch目錄下。LwIP在μC/OS-Ⅱ上的實現就是修改這個目錄下的文件,其它文件一般不做修改。首先要修改與CPU或編譯器相關的文件,如數據長度,字的高低位順序等要和用戶實現μC/OS-Ⅱ移植時定義的數據長度參數是一致的;然后要修改與操作系統相關的函數與數據結構;最后是庫函數的實現,如u16_t htons();u16_t ntohs(); u32_t htonl();u32_t ntohl();int strlen(); int strncmp(); void bcopy(); void bzero(); 

        前4個函數由用戶自己實現,而ADS編譯器中庫里面已經有了后四個函數。用戶在其它CPU上實現時應根據自己的編譯器來決定。

        LwIP在μC/OS-Ⅱ上的移植結束后,剩下的工作就是編寫應用程序。將系統劃分成若干個任務,每個任務對應一個獨立的無限循環的主程序,完成一個特定的功能。系統任務優先級的劃分是根據任務的重要性而定的,當然還要考慮到系統的安全性因素。為簡化設計,應用程序采用靜態優先級,即應用程序在執行的過程中各個任務優先級保持不變。系統的軟件架構搭建好了以后,用C編寫各個任務就容易多了。主程序中關鍵代碼如下:

        #define  TASK_STK_SIZE    64  
        ;聲明任務堆棧
        OS_STK  TaskStartStk[TASK_STK_SIZE] 
        ;開始任務堆棧
        OS_STK  TaskWatchStk[TASK_STK_SIZE] 
        ;監視任務堆棧
        ……
        void TaskWatch(void *data)    
        ;聲明監視任務的函數原型
        ……
        void main(void)
        { OSInit() 
        /*初始化μC/OS-Ⅱ*/
        OSTaskCreate(TaskStart,(void*)0,& TaskStartStk[TASK_STK_SIZE-1],0);
        OSStart();
        /*開始多任務*/
        }
        void TaskStart(void *data)
        { data=data;
        /*防止編譯器錯誤*/
        ……}

        將主程序和μC/OS-Ⅱ中的系統文件放在同一工程下,進行編譯即可。為了提高執行效率,可以根據實際應用修改μC/OS-Ⅱ的部分常用代碼,甚至剪切掉某些不必要的代碼。

        4、結束語

        基于嵌入式實時操作系統與網絡構件的設計方案在硬件上簡潔可靠;軟件可維護性好,可擴展性好,有利于系統的后續開發,降低了系統設計的復雜性。隨著嵌入式產品研究的深入,網絡接口芯片的研究也會快速發展,是智能化產品的設計更趨向簡單、標準、成熟。可以看出,嵌入式實時操作系統與網絡將會得到更大的發展和更廣闊的應用。

     
    免責聲明:
    本站所提供的文章資訊、圖片、音頻、視頻來源于互聯網及公開渠道,僅供學習參考,版權歸原創者所有! 如有侵犯您的版權,請通知我們,我們會遵循相關法律法規采取措施刪除相關內容。


     
    [ 技術前沿搜索 ]  [ 加入收藏 ]  [ 告訴好友 ]  [ 打印本文 ]  [ 關閉窗口 ]

     
     
     
    一周資訊排行
    圖文推薦
     
     
     
     
    亚洲AV无码久久精品蜜桃| 国产精品久久久久久久久软件| 久久久久国产精品人妻| 国产精品午夜高清在线观看| 丰满人妻熟妇乱又伦精品| 免费精品国偷自产在线在线| 国产免费伦精品一区二区三区| 精品无码av一区二区三区| 国产精品免费视频一区| 亚洲精品亚洲人成在线播放| 国产精品毛片无码| 在线精品国精品国产不卡| 无码精品久久久天天影视| 国产福利专区精品视频| 久久99精品国产麻豆| 丁香六月婷婷精品免费观看 | 国产剧情精品在线| 久久精品亚洲视频| 国产亚洲美女精品久久久| 国产精品夜夜春夜夜爽久久小| 久久99国产精品99久久| 国产精品第一页爽爽影院| 最新国产精品剧情在线SS| 久久伊人精品一区二区三区| 久久久久亚洲精品无码网址 | 国产精品亚洲一区二区无码| 亚洲av无码成人精品国产| 国99精品无码一区二区三区| 精品人妻AV区波多野结衣| 国产精品一久久香蕉产线看| 久久成人国产精品二三区| 99国产精品久久| 成人国产精品高清在线观看| 国产精品成人久久久| 国产麻豆精品原创| 99视频30精品视频在线观看| www.精品国产| 国产精品高清在线观看地址 | 久久精品国产半推半就| 亚洲国产精品人人做人人爱| 无码人妻精品一二三区免费|