基于μC/OS-Ⅱ的嵌入式以太網(wǎng)通信的設計

2013-10-09 17:36 來源:電子信息網(wǎng) 作者:洛小辰

uC/OS-Ⅱ是一個源碼開放的搶占式實時操作系統(tǒng)。它內(nèi)核短小精悍、可裁減、執(zhí)行時間確定。系統(tǒng)大部分代碼采用C語言編寫,與硬件有關的部分都集中在兩個文件中,給出了規(guī)范的接口說明,移植相當方便,可應用于目前大多數(shù)型號的8位、16位、32位CPU。

uC/OS-Ⅱ提供的僅僅只是一個實時的調度及任務間通信的內(nèi)核,沒有集成網(wǎng)絡協(xié)議。上網(wǎng)是當前嵌入式設備的廣泛需求,本文討論輕型TCP/IP協(xié)議棧的引入以及相關網(wǎng)絡設備驅動程序,實現(xiàn)嵌入式系統(tǒng)的網(wǎng)絡功能。

本文所用的硬件系統(tǒng)結構如圖1所示。開發(fā)板基于TMS320LF2407A的含DSP核微處理器和LAN91C111以太網(wǎng)控制器。在成功移植了μCOS-Ⅱ的基礎上進一步實現(xiàn)了以太網(wǎng)通訊功能。下面重點介紹TCP/IP協(xié)議棧的引入和LAN91C111驅動的編寫。

55


圖1 嵌入式以太網(wǎng)硬件系統(tǒng)結構圖

TCP/IP網(wǎng)絡協(xié)議棧的引入

在μCOS-Ⅱ上引入下TCP/IP協(xié)議棧,由于嵌入式系統(tǒng)的硬件資源有限,必須使用小型協(xié)議棧。這種協(xié)議棧很多,LwIP是其中之一。

關于LwIP簡介

LwIP是瑞士計算機科學院(SCICS)的Adam Dunkels等開發(fā)的一套用于嵌入式系統(tǒng)的開放源碼的輕型TCP/IP協(xié)議棧,但Lwip實現(xiàn)了較為完備的IP,ICMP, UDP, TCP協(xié)議,具有超時時間估計、快速恢復和重發(fā)、窗口調整等功能。IwIP在保持協(xié)議主要功能的基礎上減少對RAM和ROM的占用,一般它只需要幾十K的RAM和40K左右的ROM就可以運行,很適合同μCOS-Ⅱ相配合用在嵌入式系統(tǒng)中。LwIP在設計時就考慮到了將來的移植問題,它把所有與硬件、操作系統(tǒng)、編譯器相關的部分獨立出來,放在/src/arch目錄下,因此LwIP在μCOS-Ⅱ上的實現(xiàn)就是修改這個目錄下的文件,其它的文件一般不需要修改。下面分別予以說明:

協(xié)議棧的實現(xiàn)

·與CPU及編譯器相關的include文件 /src/arch/include/arch目錄下cc.h、cpu.h、perf.h中有一些與CPU或編譯器相關的定義,如數(shù)據(jù)長度,字的高低位順序等。這應該與用戶實現(xiàn)μCOS-Ⅱ時定義的數(shù)據(jù)長度等參數(shù)一致。

·與操作系統(tǒng)相關部分 sys_arch.c中的內(nèi)容是與操作系統(tǒng)相關的一些結構和函數(shù),主要分四個部分: (1)sys_sem_t信號量LwIP中需用信號量通信,所以在sys_arch中應實現(xiàn)信號量結構體和處理函數(shù):struct sys_sem_t{ sys_sem_new( )/創(chuàng)建一個信號量結構 sys_sem_free()/釋放一個信號量結構sys_sem_signal( )/發(fā)送信號量 sys_arch_sem_wait( )/請求信號量}由于μCOS-Ⅱ已經(jīng)實現(xiàn)了信號量OS_EVENT的各種操作,并且功能和LwlP上面幾個函數(shù)的目的功能是完全一樣的,所以只要把μCOS-Ⅱ的函數(shù)重新包裝成上面的函數(shù),就可以直接使用了。

(2 )sys_mbox_t消息

LwIP使用消息隊列來緩沖、傳遞數(shù)據(jù)報文,因此要在sys_arch中實現(xiàn)消息隊列結構sys_mbox_t,以及相應的操作函數(shù)。

sys_mbox_new()/創(chuàng)建一個消息隊列 sys_mbox_free( ) /釋放一個消息隊列

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

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

μCOS-Ⅱ同樣實現(xiàn)了消息隊列結構及其操作,但是μCOS-Ⅱ沒有對消息隊列中的消息進行管理,因此不能直接使用,必須在μCOS-Ⅱ的基礎上重新實現(xiàn)。

(3)sys_arch_timeout函數(shù)

LwIP中每個與外界網(wǎng)絡連接的線程都有自己的timeout屬性,即等待超時時間。這個屬性表現(xiàn)為每個線程都對應一個sys_timeout結構體隊列,包括這個線程的timeout時間長度

,以及超時后應調用的timeout函數(shù),該函數(shù)會做一些釋放連接,回收資源的工作.timeout結構體已經(jīng)由LwIP自己在sys.h中定義好了,而且對結構體隊列的數(shù)據(jù)操作也由LwIP負責,我們所要實現(xiàn)的是如下函數(shù):

struct sys_timeouts*sys_arch_timeouts(void)

這個函數(shù)的功能是返回目前正處于運行態(tài)的線程所對應的timeout隊列指針。timeout隊列屬于線程的屬性,它是OS相關的函數(shù),只能由用戶實現(xiàn)。

1 2 > 
嵌入式 以太網(wǎng) μC/OS-Ⅱ

相關閱讀

暫無數(shù)據(jù)

一周熱門