999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于uC/OS-II的LwIP網絡協議移植

2011-10-26 03:27:58楊輝
中國科技信息 2011年7期
關鍵詞:嵌入式

楊輝

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

基于uC/OS-II的LwIP網絡協議移植

楊輝

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

LwIP是一款優秀的開源TCP/IP協議棧,應用各個嵌入式應用,用于簡化接入互聯網設備的網絡協議棧應用開發。uC/OS-II是一款優秀的開源嵌入式實時操作系統。本文深入講解了LwIP移植到uC/OS-II的方法,并進行相應測試。

LwIP移值;uC/OS-II;AT91SAM7

引言

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

1 uC/OS-II嵌入式實時操作系統概述

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

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

2 開源TCP/IP網絡協議LwIP簡介

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

LwIP協議棧的特性如下:

支持多網絡接口下的 IP轉發;

支持 ICMP協議;

包括實驗性擴展的 UDP(用戶數據報協議);

包括阻塞控制、RTT估算、快速恢復和快速轉發的 TCP(傳輸控制協議);

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

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

3 LwIP在uC/OS下的移植

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

圖1 系統示意圖

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

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

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

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

typedef signed char s8_t;

typedef unsigned short u16_t;

typedef signed short s16_t;

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

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

#define PACK_STRUCT_STRUCT__attribute__((packed))

3.2 與操作系統相關文件移植

sys_arch.[ch]文件中的內容是與移植的操作系統相關的一些結構和函數,下面是相應的移植內容。

3.2.1 sys_sem_t信號量

LwIP在操作系統中需要使用相應的信號量進行通信,所以在sys_arch中,應實現相關的信號量結構體和處理函數:

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

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

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

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

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

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

3.2.3 sys_mbox_t 消息

LwIP要使用消息隊列來進行緩沖、傳遞數據報文,因此,要在sys_arch中實現消息隊列結構sys_mbox_t及其相應的發送和獲取操作函數:

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

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

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

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

3.3 網絡設備驅動程序

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

3.4 lib_arch中庫函數實現

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

4 移植功能測試

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

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

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

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

10.3969/j.issn.1001-8972.2011.07.054

猜你喜歡
嵌入式
Focal&Naim同框發布1000系列嵌入式揚聲器及全新Uniti Atmos流媒體一體機
TS系列紅外傳感器在嵌入式控制系統中的應用
電子制作(2019年7期)2019-04-25 13:17:14
基于嵌入式Linux內核的自恢復設計
嵌入式系統通信技術的應用
電子制作(2018年18期)2018-11-14 01:48:16
嵌入式PLC的設計與研究
電子制作(2018年16期)2018-09-26 03:27:18
搭建基于Qt的嵌入式開發平臺
基于嵌入式系統Windows CE的應用程序開發
嵌入式單片機在電機控制系統中的應用探討
電子制作(2017年8期)2017-06-05 09:36:15
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
Altera加入嵌入式視覺聯盟
主站蜘蛛池模板: 国产亚洲精品97AA片在线播放| 综合天天色| 99热这里只有精品5| 小说区 亚洲 自拍 另类| 国产幂在线无码精品| 欧美日韩北条麻妃一区二区| 91在线精品免费免费播放| 爆乳熟妇一区二区三区| 国产亚洲精| 在线精品视频成人网| 4虎影视国产在线观看精品| AV片亚洲国产男人的天堂| 乱码国产乱码精品精在线播放| 自慰网址在线观看| 中文字幕在线一区二区在线| www.国产福利| 制服丝袜亚洲| 国产精品永久不卡免费视频| 成人精品区| 在线观看网站国产| 亚洲成人在线免费观看| 亚洲高清日韩heyzo| 婷婷六月激情综合一区| 高清无码不卡视频| 国产精品白浆无码流出在线看| 欧美综合成人| 色婷婷国产精品视频| 国产乱人激情H在线观看| 麻豆国产在线不卡一区二区| jizz在线观看| 婷婷色一二三区波多野衣| 亚洲欧美色中文字幕| 亚洲国内精品自在自线官| 中文字幕无码av专区久久| 亚洲欧美成aⅴ人在线观看| 国产亚洲精品精品精品| 日本一区二区三区精品国产| 久久久久国色AV免费观看性色| 人人爱天天做夜夜爽| 自慰高潮喷白浆在线观看| 国产91av在线| 国产浮力第一页永久地址 | 亚洲床戏一区| 伊人久久精品亚洲午夜| 久久精品一品道久久精品| 四虎永久在线| 91免费片| 亚洲an第二区国产精品| 99久久亚洲综合精品TS| 中文字幕不卡免费高清视频| 欧美亚洲日韩中文| 免费看av在线网站网址| 日本黄色不卡视频| 久久96热在精品国产高清| 中文字幕欧美日韩| 亚洲男人天堂网址| 亚洲欧美日韩动漫| 欧美一区精品| 国产在线专区| 国产精品私拍99pans大尺度| 福利国产微拍广场一区视频在线| 伊人福利视频| 国产91av在线| 欧美日韩在线第一页| 亚洲国产精品不卡在线| 亚洲精选无码久久久| 欧美午夜小视频| 色首页AV在线| 亚洲国产精品不卡在线 | 欧美一级黄片一区2区| 婷婷亚洲天堂| 婷婷六月激情综合一区| 国产成人亚洲毛片| 精品撒尿视频一区二区三区| 色婷婷综合激情视频免费看| 国产福利大秀91| 亚洲福利视频一区二区| 亚洲熟女偷拍| 免费黄色国产视频| 国产在线观看高清不卡| 99在线观看免费视频| 99视频全部免费|