• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于uC/OS-II的LwIP網(wǎng)絡協(xié)議移植

    2011-10-26 03:27:58楊輝
    中國科技信息 2011年7期
    關鍵詞:信號量網(wǎng)絡接口網(wǎng)絡協(xié)議

    楊輝

    中北大學電子與計算機科學技術學院多核實驗室 太原 030051

    基于uC/OS-II的LwIP網(wǎng)絡協(xié)議移植

    楊輝

    中北大學電子與計算機科學技術學院多核實驗室 太原 030051

    LwIP是一款優(yōu)秀的開源TCP/IP協(xié)議棧,應用各個嵌入式應用,用于簡化接入互聯(lián)網(wǎng)設備的網(wǎng)絡協(xié)議棧應用開發(fā)。uC/OS-II是一款優(yōu)秀的開源嵌入式實時操作系統(tǒng)。本文深入講解了LwIP移植到uC/OS-II的方法,并進行相應測試。

    LwIP移值;uC/OS-II;AT91SAM7

    引言

    隨著互聯(lián)網(wǎng)的普及度越來越高,能夠接入互聯(lián)網(wǎng)的設備越來越多,互聯(lián)網(wǎng)已經(jīng)成為人們工作生活中不可或缺的通信渠道之一。在嵌入式操作系統(tǒng)中加入網(wǎng)絡協(xié)議棧是一項重要的研究內(nèi)容。uC/OS-II是一款優(yōu)秀的、開源的嵌入式實時操作系統(tǒng)內(nèi)核,實現(xiàn)了實時任務調(diào)度、任務間通信及其管理系統(tǒng)內(nèi)存,但是缺少文件系統(tǒng),圖形界面,以及網(wǎng)絡協(xié)議的支持。本文介紹了uC/OS-II嵌入式實時操作系統(tǒng)中加入LwIP網(wǎng)絡協(xié)議棧的方法,從而使得嵌入式系統(tǒng)能夠接入互聯(lián)網(wǎng)。

    1 uC/OS-II嵌入式實時操作系統(tǒng)概述

    uC/OS II 是Labrosse設計的一款完整的、開源的搶占式實時多任務嵌入式操作系統(tǒng)內(nèi)核。代碼絕大部分采用標準C語言編寫,小部分底層硬件代碼采用匯編語言編寫,因此具有良好的移植性及裁剪性,從8位到64位處理器,已經(jīng)成功移植到超過40種不同構(gòu)架的微處理上。uC/OS II已經(jīng)廣泛應用在諸多領域,如手機、工控設備、醫(yī)療設備,甚至是飛行器等要求極高的應用。

    uC/OS II是第一個支持ARM Cortex內(nèi)核的嵌入式操作系統(tǒng),其大部分代碼是用標準C語言編寫,這樣對于移植工作很方便。在移植時,只需要用匯編語言及C語言編寫一些與處理器相關的代碼即可。uC/OS II代碼設計的結(jié)構(gòu)清晰,層次分明,代碼總體來說分為三個層次:處理器無關代碼層,處理器相關代碼層,以及應用程序相關代碼層。

    2 開源TCP/IP網(wǎng)絡協(xié)議LwIP簡介

    LwIP是由瑞士計算機科學院Adam Dunkels等人開發(fā)的專門用于嵌入式系統(tǒng)的開源TCP/IP協(xié)議棧[1]。LwIP可以移植到操作系統(tǒng)上,也可以在無操作系統(tǒng)的情況下獨立運行。LwIP是一種輕型的TCP/IP協(xié)議棧,在實現(xiàn)TCP/IP基本功能的基礎上,減少自身代碼容量,并且在運行時,減少對RAM的占用。LwIP需要20KB的RAM空間和40KB左右的ROM空間即可運行,這樣使得 LwIP協(xié)議棧適合在低端嵌入式系統(tǒng)中使用。

    LwIP協(xié)議棧的特性如下:

    支持多網(wǎng)絡接口下的 IP轉(zhuǎn)發(fā);

    支持 ICMP協(xié)議;

    包括實驗性擴展的 UDP(用戶數(shù)據(jù)報協(xié)議);

    包括阻塞控制、RTT估算、快速恢復和快速轉(zhuǎn)發(fā)的 TCP(傳輸控制協(xié)議);

    提供專門的內(nèi)部回調(diào)接口(Raw API),用于提高應用程序性能;

    可選擇的 Berkeley 接口 API(多線程情況下)。

    3 LwIP在uC/OS下的移植

    本文所用到的嵌入式操作系統(tǒng)uC/OS-II版本為V2.5.4.,本文在移植時所用到的開發(fā)環(huán)境為RVMDK4.0。首先我們獲取LwIP代碼,只需到LwIP的官方網(wǎng)站下載。將代碼文件添加至所建立的工程中即可。LwIP協(xié)議棧在最初設計時就考慮到移植問題,將硬件接口代碼、OS接口代碼、編譯器相關代碼獨立分開出來,放在/src/arch目錄下面。在LwIP移植到uC/OS-II中時,只需修改這個目錄下的文件即可移植后的功能框圖如圖1所示。下面是具體的移植過程。

    圖1 系統(tǒng)示意圖

    3.1 移植CPU及編譯器相關頭文件

    在/src/arch/include/arch目錄下面,是關于CPU及編譯器相關的頭文件。這些文件里面定義了數(shù)據(jù)長度,字高低位順序等,這些應該與用戶實現(xiàn)uC/OS-II時定義的數(shù)據(jù)長度一致。我們這里主要涉及cc.h,cpu.h,perf.h這三個文件。下面定義為:

    #define BYTE_ORDER LITTLE_ENDIAN //小端存儲類型

    typedef unsigned char u8_t; //關于數(shù)據(jù)類型長度的定義,下同

    typedef signed char s8_t;

    typedef unsigned short u16_t;

    typedef signed short s16_t;

    注意,C語言的結(jié)構(gòu)體是4字節(jié)對齊的,但是在處理數(shù)據(jù)包時,則是根據(jù)結(jié)構(gòu)體中不同數(shù)據(jù)長度來讀取相應數(shù)據(jù)的,所以在定義struct的時候要加上_packed關鍵字。在LwIP代碼中,結(jié)構(gòu)體中定義了幾個PACKED_FIELED_xxx宏,缺省的情況下是空的,可以在移植的時候添加不同的編譯器所對應的_packed關鍵字。下面是對應的宏定義代碼:

    #define PACK_STRUCT_FIELD(x)x __attribute__((packed))

    #define PACK_STRUCT_STRUCT__attribute__((packed))

    3.2 與操作系統(tǒng)相關文件移植

    sys_arch.[ch]文件中的內(nèi)容是與移植的操作系統(tǒng)相關的一些結(jié)構(gòu)和函數(shù),下面是相應的移植內(nèi)容。

    3.2.1 sys_sem_t信號量

    LwIP在操作系統(tǒng)中需要使用相應的信號量進行通信,所以在sys_arch中,應實現(xiàn)相關的信號量結(jié)構(gòu)體和處理函數(shù):

    sys_ sem _send signal() //發(fā)送信號量

    sys_ arch_sem _req() //請求信號量

    在uC/OS-II中已經(jīng)實現(xiàn)了OS_EVENT信號量的各種操作,在功能上同LwIP上的幾個函數(shù)的目標功能是完全一樣的,因此,只要把uC/OS-II的函數(shù)進行重新封裝成上面的函數(shù)即可。

    3.2.2 sys_thread_new 創(chuàng)建新線程LwIP可以是單線程運行,即只有一個tcpip線程(tcpip_thread),負責處理所有的 tcp/ucp連接,各種網(wǎng)絡程序都通過tcpip線程與網(wǎng)絡交互。但LwIP也可以多線程運行,以提高效率,降低編程復雜度。這時需要用戶實現(xiàn)創(chuàng)建新線程的函數(shù):

    void sys_thread_new(void (* thread)(void *arg),void *arg);

    在uC/OS-II中,沒有線程的概念,只有任務。它已經(jīng)提供了創(chuàng)建新任務的系統(tǒng)API調(diào)用OSTaskCreate,因此,只要把OSTaskCreate封裝一下,就可以實現(xiàn)sys_thread_new。需要注意的是,LwIP中的thread并沒有uC/OS-II中優(yōu)先級的概念,實現(xiàn)時,要由用戶事先為 LwIP中創(chuàng)建的線程分配好優(yōu)先級。

    3.2.3 sys_mbox_t 消息

    LwIP要使用消息隊列來進行緩沖、傳遞數(shù)據(jù)報文,因此,要在sys_arch中實現(xiàn)消息隊列結(jié)構(gòu)sys_mbox_t及其相應的發(fā)送和獲取操作函數(shù):

    sys_mbox_post() //向隊列發(fā)送消息

    sys_arch_mbox_fetch() //從隊列中獲取消息

    uC/OS-II同樣實現(xiàn)了消息隊列結(jié)構(gòu)OSQ及其操作,但是,uC/OS-II 沒有對消息隊列中的消息進行管理,因此不能直接使用,必須在uC/OS-II的基礎上進行重新實現(xiàn)。為了實現(xiàn)對消息的管理,我們定義一個結(jié)構(gòu)體積。

    包括OS_EVENT類型的指針(pQ)和隊列內(nèi)的消息兩部分。對隊列本身的管理利用uC/OS-II自己的 OSQ操作完成,然后使用uC/OS-II中的內(nèi)存管理模塊實現(xiàn)對消息的創(chuàng)建、使用、刪除回收,兩部分綜合起來形成了 LwIP的消息隊列功能。

    3.3 網(wǎng)絡設備驅(qū)動程序

    LwIP可以有多個相應的網(wǎng)絡接口,每個網(wǎng)絡接口都有一個對應的 struct netif結(jié)構(gòu), 此netif包含了其屬性、收發(fā)函數(shù)等。LwIP中的代碼通過調(diào)用netif的函數(shù)netif->input()及netif->output()進行以太網(wǎng)的包收發(fā)操作。我們在驅(qū)動程序中主要做的移植工作是實現(xiàn)對應網(wǎng)絡接口的初始化、接收、發(fā)送及對應中斷處理函數(shù)。網(wǎng)絡驅(qū)動程序工作在IP協(xié)議模型的網(wǎng)絡接口層

    3.4 lib_arch中庫函數(shù)實現(xiàn)

    LwIP協(xié)議棧需要實現(xiàn)8個外部函數(shù),這些函數(shù)都是與CPU和用戶編譯器相關的,需要用戶去實現(xiàn)。

    4 移植功能測試

    在完成上面的移植工作后,就可以對移植代碼進行應用程序測試。測試工作主要為初始化LwIP協(xié)議棧,并創(chuàng)建TCP或者UDP等任務進行測試。

    正確編譯運行后,用ping ip地址命令可以得到ICMP reply 響應。用 telnet ip地址 7(登錄 7號端口)命令可以看到echo server 的回顯效果。說明 ARP、ICMP、IP、TCP協(xié)議都已正確運行,說明網(wǎng)絡協(xié)議已經(jīng)成功移植??傊?,LwIP作為的開源TCP/IP協(xié)議棧,在帶網(wǎng)絡嵌入式設備開發(fā)中可以比較廣泛的的使用。

    [1] 張翠, 鄧志良.LwIP協(xié)議棧在uC/OS-Ⅱ上的移植和應用.微計算機信息.2010,23(2):43-45

    [2] 胡俐蕊.基于LwIP的uC/OS-Ⅱ網(wǎng)絡應用程序設計方法.計算機應用與軟件.2010,19(1):145-148

    10.3969/j.issn.1001-8972.2011.07.054

    猜你喜歡
    信號量網(wǎng)絡接口網(wǎng)絡協(xié)議
    基于STM32的mbedOS信號量調(diào)度機制剖析
    計算機網(wǎng)絡理論下的傳播研究結(jié)構(gòu)模型:Communication一詞的兩種翻譯
    變電站網(wǎng)絡接口物理防護系統(tǒng)設計與實現(xiàn)
    Nucleus PLUS操作系統(tǒng)信號量機制的研究與測試
    測控技術(2018年8期)2018-11-25 07:42:12
    一種藍牙多跳網(wǎng)絡協(xié)議的設計與研究
    電子制作(2018年17期)2018-09-28 01:56:52
    基于DPI技術的語音視頻流量監(jiān)控系統(tǒng)設計與實現(xiàn)
    淺析CTC與GSM-R系統(tǒng)網(wǎng)絡接口及路由配置改進措施
    芻議局域網(wǎng)中網(wǎng)絡協(xié)議的添加與配置
    科技資訊(2015年10期)2015-06-29 18:17:23
    網(wǎng)絡設置管理
    京滬高鐵GSM-R網(wǎng)絡接口監(jiān)測網(wǎng)關子系統(tǒng)的設計與實現(xiàn)
    开化县| 宁南县| 牡丹江市| 盐津县| 勃利县| 阳西县| 琼海市| 台东市| 图木舒克市| 林甸县| 射阳县| 余江县| 上思县| 泽普县| 承德县| 丰宁| 盐津县| 舞钢市| 宜昌市| 万州区| 濮阳县| 托克逊县| 江华| 榕江县| 开江县| 西峡县| 泸水县| 县级市| 密云县| 曲松县| 长沙市| 嘉善县| 伊通| 吴江市| 怀柔区| 桦川县| 三明市| 岳普湖县| 望都县| 新泰市| 襄垣县|