新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于嵌入式實時操作系統的現場總線網關的設計

        基于嵌入式實時操作系統的現場總線網關的設計

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

        (1) μC/OS-Ⅱ的移植;
        (2) TCP/IP協議棧LwIP的移植;
        (3)網絡設備驅動程序。
        l.LwIP協議棧的移植
        為了使WorldFIP現場總線可以和Internet通信,在設計中必須把TCP/IP協議棧移植到μC/OS-Ⅱ操作系統中(μC/OS-Ⅱ移植將在后面介紹)。為了節省對系統資源的占用,設計中選用了開源的TCP/IP協議棧——LwIP。LwIP協議棧是一個輕量的TCP/IP協議棧,一般只需要幾十千字節的RAM和40K左右的ROM就可以運行,這使LwIP協議棧適合在低端系統中使用。LwIP的源碼可以到相關的網站上下載,目前的版本是0.6.3。LwIP的特性如下:
        (1)支持多網絡接口下的IP轉發;
        (2)提供專門的內部回調接口(Raw API)用于提高應用程序性能;
        (3)可選擇的Berkeley接API。
        為了方便移植,LwIP協議棧把所有與硬件、OS、編譯器相關的部分單獨放在/src/arch目錄下,因此移植時只需修改這個目錄下的文件即可,其他源文件一般不需要修改。在移植的過程中,最主要的是和OS相關的一些函數和結構,這些函數和結構在arch目錄下的sys_arch.h和sys_arch.c中定義和實現。主要有:
        (l)sys_arch_timeout函數。
        這個函數描述的是LwIP中與外界網絡連接的線程等待超時timeout屬性,該屬性與OS相關。每個線程的timeout屬性對應著一個在sys.h中定義的結構體sys_timeout,我們所要實現的是如下函數:
        struct sys_timeouts * sys_arch_timeouts(void)
        該函數的功能是返回目前正處于運行態的線程所對應的timeout隊列指針。
        (2)sys_sem_t信號量。
        在LwIP中用信號量來實現同步,因此需要在sys_arch中實現sys_sem_t結構體和處理函數:
        typedef OS_EVENT * sys_sem_t;
        sys_sem_t sys_sem_new (lNT8U count);
        void sys_sem_signal (sys_sem_t sem);
        INTl6U sys_arch_sem_wait (sys_sem_t sem,INTl6U timeout);
        void sys_sem_free (sys_sem_t sem);
        μC/OS-Ⅱ已經實現了信號量的各種操作,而且功能和LwIP中的幾個函數完全一樣的,所以在LwIP中只需把μC/OS-Ⅱ中的函數封裝打包。
        (3) sys_mbox_t消息。
        在LwIP中實現緩沖、數據傳遞要用到消息隊列,所以在sys_arch中實現sys_mbox_t結構體和處理函數:
        typedef struct
        {
        OS_EVENT * pQ;
        void * pvQEntries [MAX _ QUEUE _ EN_ TRIES];
        } sys_mbox_t;
        sys_mbox_t;
        sys_mbox_t sys_mbox_new (void);
        void sys_mbox_post(sys_mbox_t mbox,void * msg);
        INT16U sys_arch_mbox_fetch (sys_mbox_tmbox,void * * msg,INT16U timeout);
        void sys_mbox_free (sys_mbox_t mbox);

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


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 阿尔山市| 黑河市| 文山县| 宁远县| 镇坪县| 鄂托克旗| 济宁市| 桐乡市| 阳信县| 金门县| 巴彦淖尔市| 长岛县| 沈阳市| 策勒县| 美姑县| 赤城县| 汉中市| 调兵山市| 麦盖提县| 灵宝市| 毕节市| 迁西县| 东台市| 达孜县| 闻喜县| 新密市| 梅州市| 郴州市| 宜宾市| 墨竹工卡县| 介休市| 东丰县| 抚松县| 佛教| 西乌| 阳春市| 济源市| 武乡县| 呼和浩特市| 桦川县| 方山县|