資料介紹
uC/OS-Ⅱ是一個源碼開放的搶占式實時操作系統(tǒng)。它內(nèi)核短小精悍、可裁減、執(zhí)行時間確定。系統(tǒng)大部分代碼采用C語言編寫,與硬件有關(guān)的部分都集中在兩個文件中,給出了規(guī)范的接口說明,移植相當(dāng)方便,可應(yīng)用于目前大多數(shù)型號的8位、16位、32位CPU。
uC/OS-Ⅱ提供的僅僅只是一個實時的調(diào)度及任務(wù)間通信的內(nèi)核,沒有集成網(wǎng)絡(luò)協(xié)議。上網(wǎng)是當(dāng)前嵌入式設(shè)備的廣泛需求,本文討論輕型TCP/IP協(xié)議棧的引入以及相關(guān)網(wǎng)絡(luò)設(shè)備驅(qū)動程序,實現(xiàn)嵌入式系統(tǒng)的網(wǎng)絡(luò)功能。
本文所用的硬件系統(tǒng)結(jié)構(gòu)如圖1所示。開發(fā)板基于TMS320LF2407A的含DSP核微處理器和LAN91C111以太網(wǎng)控制器。在成功移植了μCOS-Ⅱ的基礎(chǔ)上進一步實現(xiàn)了以太網(wǎng)通訊功能。下面重點介紹TCP/IP協(xié)議棧的引入和LAN91C111驅(qū)動的編寫。
圖1 嵌入式以太網(wǎng)硬件系統(tǒng)結(jié)構(gòu)圖
TCP/IP網(wǎng)絡(luò)協(xié)議棧的引入
在μCOS-Ⅱ上引入下TCP/IP協(xié)議棧,由于嵌入式系統(tǒng)的硬件資源有限,必須使用小型協(xié)議棧。這種協(xié)議棧很多,LwIP是其中之一。
關(guān)于LwIP簡介
LwIP是瑞士計算機科學(xué)院(SCICS)的Adam Dunkels等開發(fā)的一套用于嵌入式系統(tǒng)的開放源碼的輕型TCP/IP協(xié)議棧,但Lwip實現(xiàn)了較為完備的IP,ICMP, UDP, TCP協(xié)議,具有超時時間估計、快速恢復(fù)和重發(fā)、窗口調(diào)整等功能。IwIP在保持協(xié)議主要功能的基礎(chǔ)上減少對RAM和ROM的占用,一般它只需要幾十K的RAM和40K左右的ROM就可以運行,很適合同μCOS-Ⅱ相配合用在嵌入式系統(tǒng)中。LwIP在設(shè)計時就考慮到了將來的移植問題,它把所有與硬件、操作系統(tǒng)、編譯器相關(guān)的部分獨立出來,放在/src/arch目錄下,因此LwIP在μCOS-Ⅱ上的實現(xiàn)就是修改這個目錄下的文件,其它的文件一般不需要修改。下面分別予以說明:
協(xié)議棧的實現(xiàn)
·與CPU及編譯器相關(guān)的include文件 /src/arch/include/arch目錄下cc.h、cpu.h、perf.h中有一些與CPU或編譯器相關(guān)的定義,如數(shù)據(jù)長度,字的高低位順序等。這應(yīng)該與用戶實現(xiàn)μCOS-Ⅱ時定義的數(shù)據(jù)長度等參數(shù)一致。
·與操作系統(tǒng)相關(guān)部分 sys_arch.c中的內(nèi)容是與操作系統(tǒng)相關(guān)的一些結(jié)構(gòu)和函數(shù),主要分四個部分: (1)sys_sem_t信號量LwIP中需用信號量通信,所以在sys_arch中應(yīng)實現(xiàn)信號量結(jié)構(gòu)體和處理函數(shù):struct sys_sem_t{ sys_sem_new( )/創(chuàng)建一個信號量結(jié)構(gòu) sys_sem_free()/釋放一個信號量結(jié)構(gòu)sys_sem_signal( )/發(fā)送信號量 sys_arch_sem_wait( )/請求信號量}由于μCOS-Ⅱ已經(jīng)實現(xiàn)了信號量OS_EVENT的各種操作,并且功能和LwlP上面幾個函數(shù)的目的功能是完全一樣的,所以只要把μCOS-Ⅱ的函數(shù)重新包裝成上面的函數(shù),就可以直接使用了。
?。? )sys_mbox_t消息
LwIP使用消息隊列來緩沖、傳遞數(shù)據(jù)報文,因此要在sys_arch中實現(xiàn)消息隊列結(jié)構(gòu)sys_mbox_t,以及相應(yīng)的操作函數(shù)。
sys_mbox_new()/創(chuàng)建一個消息隊列 sys_mbox_free( ) /釋放一個消息隊列
sys_mbox_post( )/向消息隊列發(fā)送消息
sys_arch_mbox_fetch( )/從消息隊列中獲取消息
μCOS-Ⅱ同樣實現(xiàn)了消息隊列結(jié)構(gòu)及其操作,但是μCOS-Ⅱ沒有對消息隊列中的消息進行管理,因此不能直接使用,必須在μCOS-Ⅱ的基礎(chǔ)上重新實現(xiàn)。
?。?)sys_arch_timeout函數(shù)
LwIP中每個與外界網(wǎng)絡(luò)連接的線程都有自己的timeout屬性,即等待超時時間。這個屬性表現(xiàn)為每個線程都對應(yīng)一個sys_timeout結(jié)構(gòu)體隊列,包括這個線程的timeout時間長度
,以及超時后應(yīng)調(diào)用的timeout函數(shù),該函數(shù)會做一些釋放連接,回收資源的工作.timeout結(jié)構(gòu)體已經(jīng)由LwIP自己在sys.h中定義好了,而且對結(jié)構(gòu)體隊列的數(shù)據(jù)操作也由LwIP負責(zé),我們所要實現(xiàn)的是如下函數(shù):
struct sys_timeouts*sys_arch_timeouts(void)
這個函數(shù)的功能是返回目前正處于運行態(tài)的線程所對應(yīng)的timeout隊列指針。timeout隊列屬于線程的屬性,它是OS相關(guān)的函數(shù),只能由用戶實現(xiàn)。
?。?)sys_thread_new創(chuàng)建新線程
LwIP可以是單線程運行,也可以多線程運行。為提高效率并降低編程復(fù)雜度,就需要用戶實現(xiàn)創(chuàng)建新線程的函數(shù):
void sys_thread_new(void(*thread)(void*arg), void*arg);
在μCOS-Ⅱ中,沒有線程(thread)的概念,只有任務(wù)(Task)。它已經(jīng)提供了創(chuàng)建新任務(wù)的系統(tǒng)API調(diào)用OSTaskCreate,因此只要把OSTaskCreate封裝一下,就可以實現(xiàn)sys_hread_new.
·lib_ arch中庫函數(shù)的實現(xiàn)
LwIP協(xié)議棧中用到了8個外部函數(shù),這些函數(shù)通常與用戶使用的系統(tǒng)或編譯器有關(guān),因此留給用戶自己實現(xiàn),有關(guān)程序如下:
u16_t htons(u16_t n); /16位數(shù)據(jù)高低字節(jié)交換
u16_t ntohs(u16_t n);
int strlen(const char * str);/返回字符串長度
int strncmp(const char * strl,const char * str2,int len);/字符串比較
void bcopy(const void * src, void * dest, int len);/內(nèi)存數(shù)據(jù)塊之間的互相拷貝
void bzero(void *data, int n); /內(nèi)存中指定長度的數(shù)據(jù)塊清零
類似于操作系統(tǒng)在硬件上的移植,LwIP的移植也是根據(jù)實現(xiàn)的硬件以及操作系統(tǒng)對象,對相應(yīng)的文件進行修改。整個通訊協(xié)議的引入可以很快實現(xiàn)。
LAN91C111驅(qū)動的實現(xiàn)
在上面為μCOS-Ⅱ引入了TCP/IP協(xié)議棧之后,為了實現(xiàn)以太網(wǎng)通信功能還必須完成相關(guān)網(wǎng)絡(luò)設(shè)備驅(qū)動程序的添加。LwIP的網(wǎng)絡(luò)驅(qū)動有一定的模板,其中src/netif/ethernetif.c文件即為驅(qū)動的模板,用戶為自己的網(wǎng)絡(luò)設(shè)備實現(xiàn)驅(qū)動時應(yīng)參照這個模板,根據(jù)相應(yīng)的網(wǎng)絡(luò)芯片來實現(xiàn)。本系統(tǒng)選用的網(wǎng)絡(luò)芯片是由SMSC公司生產(chǎn)的自適應(yīng)10M/100M第三代快速以太網(wǎng)控制器芯片LAN91C111,集成了SMSC/CD協(xié)議的MAC(媒體層)和PHY(物理層)。由于其靈活性和集成度高,具有較高的性價比。
LAN91C111工作流程比較簡單,驅(qū)動程序?qū)⒁l(fā)送的數(shù)據(jù)包按指定格式寫入芯片并啟動發(fā)送命令,LAN91C111會自動把數(shù)據(jù)包轉(zhuǎn)換成物理幀格式在物理信道上傳輸;反之芯片收到物理信號后自動將其還原成數(shù)據(jù),并按指定格式存放在芯片RAM中以便主機程序取用。簡言之就是LAN91C111完成數(shù)據(jù)包和電信號之間的相
互轉(zhuǎn)換: 數(shù)據(jù)包 電信號。LAN91C111的編程主要包括:初始化、發(fā)送數(shù)據(jù)包、接收數(shù)據(jù)包三部分。
uC/OS-Ⅱ提供的僅僅只是一個實時的調(diào)度及任務(wù)間通信的內(nèi)核,沒有集成網(wǎng)絡(luò)協(xié)議。上網(wǎng)是當(dāng)前嵌入式設(shè)備的廣泛需求,本文討論輕型TCP/IP協(xié)議棧的引入以及相關(guān)網(wǎng)絡(luò)設(shè)備驅(qū)動程序,實現(xiàn)嵌入式系統(tǒng)的網(wǎng)絡(luò)功能。
本文所用的硬件系統(tǒng)結(jié)構(gòu)如圖1所示。開發(fā)板基于TMS320LF2407A的含DSP核微處理器和LAN91C111以太網(wǎng)控制器。在成功移植了μCOS-Ⅱ的基礎(chǔ)上進一步實現(xiàn)了以太網(wǎng)通訊功能。下面重點介紹TCP/IP協(xié)議棧的引入和LAN91C111驅(qū)動的編寫。
圖1 嵌入式以太網(wǎng)硬件系統(tǒng)結(jié)構(gòu)圖
TCP/IP網(wǎng)絡(luò)協(xié)議棧的引入
在μCOS-Ⅱ上引入下TCP/IP協(xié)議棧,由于嵌入式系統(tǒng)的硬件資源有限,必須使用小型協(xié)議棧。這種協(xié)議棧很多,LwIP是其中之一。
關(guān)于LwIP簡介
LwIP是瑞士計算機科學(xué)院(SCICS)的Adam Dunkels等開發(fā)的一套用于嵌入式系統(tǒng)的開放源碼的輕型TCP/IP協(xié)議棧,但Lwip實現(xiàn)了較為完備的IP,ICMP, UDP, TCP協(xié)議,具有超時時間估計、快速恢復(fù)和重發(fā)、窗口調(diào)整等功能。IwIP在保持協(xié)議主要功能的基礎(chǔ)上減少對RAM和ROM的占用,一般它只需要幾十K的RAM和40K左右的ROM就可以運行,很適合同μCOS-Ⅱ相配合用在嵌入式系統(tǒng)中。LwIP在設(shè)計時就考慮到了將來的移植問題,它把所有與硬件、操作系統(tǒng)、編譯器相關(guān)的部分獨立出來,放在/src/arch目錄下,因此LwIP在μCOS-Ⅱ上的實現(xiàn)就是修改這個目錄下的文件,其它的文件一般不需要修改。下面分別予以說明:
協(xié)議棧的實現(xiàn)
·與CPU及編譯器相關(guān)的include文件 /src/arch/include/arch目錄下cc.h、cpu.h、perf.h中有一些與CPU或編譯器相關(guān)的定義,如數(shù)據(jù)長度,字的高低位順序等。這應(yīng)該與用戶實現(xiàn)μCOS-Ⅱ時定義的數(shù)據(jù)長度等參數(shù)一致。
·與操作系統(tǒng)相關(guān)部分 sys_arch.c中的內(nèi)容是與操作系統(tǒng)相關(guān)的一些結(jié)構(gòu)和函數(shù),主要分四個部分: (1)sys_sem_t信號量LwIP中需用信號量通信,所以在sys_arch中應(yīng)實現(xiàn)信號量結(jié)構(gòu)體和處理函數(shù):struct sys_sem_t{ sys_sem_new( )/創(chuàng)建一個信號量結(jié)構(gòu) sys_sem_free()/釋放一個信號量結(jié)構(gòu)sys_sem_signal( )/發(fā)送信號量 sys_arch_sem_wait( )/請求信號量}由于μCOS-Ⅱ已經(jīng)實現(xiàn)了信號量OS_EVENT的各種操作,并且功能和LwlP上面幾個函數(shù)的目的功能是完全一樣的,所以只要把μCOS-Ⅱ的函數(shù)重新包裝成上面的函數(shù),就可以直接使用了。
?。? )sys_mbox_t消息
LwIP使用消息隊列來緩沖、傳遞數(shù)據(jù)報文,因此要在sys_arch中實現(xiàn)消息隊列結(jié)構(gòu)sys_mbox_t,以及相應(yīng)的操作函數(shù)。
sys_mbox_new()/創(chuàng)建一個消息隊列 sys_mbox_free( ) /釋放一個消息隊列
sys_mbox_post( )/向消息隊列發(fā)送消息
sys_arch_mbox_fetch( )/從消息隊列中獲取消息
μCOS-Ⅱ同樣實現(xiàn)了消息隊列結(jié)構(gòu)及其操作,但是μCOS-Ⅱ沒有對消息隊列中的消息進行管理,因此不能直接使用,必須在μCOS-Ⅱ的基礎(chǔ)上重新實現(xiàn)。
?。?)sys_arch_timeout函數(shù)
LwIP中每個與外界網(wǎng)絡(luò)連接的線程都有自己的timeout屬性,即等待超時時間。這個屬性表現(xiàn)為每個線程都對應(yīng)一個sys_timeout結(jié)構(gòu)體隊列,包括這個線程的timeout時間長度
,以及超時后應(yīng)調(diào)用的timeout函數(shù),該函數(shù)會做一些釋放連接,回收資源的工作.timeout結(jié)構(gòu)體已經(jīng)由LwIP自己在sys.h中定義好了,而且對結(jié)構(gòu)體隊列的數(shù)據(jù)操作也由LwIP負責(zé),我們所要實現(xiàn)的是如下函數(shù):
struct sys_timeouts*sys_arch_timeouts(void)
這個函數(shù)的功能是返回目前正處于運行態(tài)的線程所對應(yīng)的timeout隊列指針。timeout隊列屬于線程的屬性,它是OS相關(guān)的函數(shù),只能由用戶實現(xiàn)。
?。?)sys_thread_new創(chuàng)建新線程
LwIP可以是單線程運行,也可以多線程運行。為提高效率并降低編程復(fù)雜度,就需要用戶實現(xiàn)創(chuàng)建新線程的函數(shù):
void sys_thread_new(void(*thread)(void*arg), void*arg);
在μCOS-Ⅱ中,沒有線程(thread)的概念,只有任務(wù)(Task)。它已經(jīng)提供了創(chuàng)建新任務(wù)的系統(tǒng)API調(diào)用OSTaskCreate,因此只要把OSTaskCreate封裝一下,就可以實現(xiàn)sys_hread_new.
·lib_ arch中庫函數(shù)的實現(xiàn)
LwIP協(xié)議棧中用到了8個外部函數(shù),這些函數(shù)通常與用戶使用的系統(tǒng)或編譯器有關(guān),因此留給用戶自己實現(xiàn),有關(guān)程序如下:
u16_t htons(u16_t n); /16位數(shù)據(jù)高低字節(jié)交換
u16_t ntohs(u16_t n);
int strlen(const char * str);/返回字符串長度
int strncmp(const char * strl,const char * str2,int len);/字符串比較
void bcopy(const void * src, void * dest, int len);/內(nèi)存數(shù)據(jù)塊之間的互相拷貝
void bzero(void *data, int n); /內(nèi)存中指定長度的數(shù)據(jù)塊清零
類似于操作系統(tǒng)在硬件上的移植,LwIP的移植也是根據(jù)實現(xiàn)的硬件以及操作系統(tǒng)對象,對相應(yīng)的文件進行修改。整個通訊協(xié)議的引入可以很快實現(xiàn)。
LAN91C111驅(qū)動的實現(xiàn)
在上面為μCOS-Ⅱ引入了TCP/IP協(xié)議棧之后,為了實現(xiàn)以太網(wǎng)通信功能還必須完成相關(guān)網(wǎng)絡(luò)設(shè)備驅(qū)動程序的添加。LwIP的網(wǎng)絡(luò)驅(qū)動有一定的模板,其中src/netif/ethernetif.c文件即為驅(qū)動的模板,用戶為自己的網(wǎng)絡(luò)設(shè)備實現(xiàn)驅(qū)動時應(yīng)參照這個模板,根據(jù)相應(yīng)的網(wǎng)絡(luò)芯片來實現(xiàn)。本系統(tǒng)選用的網(wǎng)絡(luò)芯片是由SMSC公司生產(chǎn)的自適應(yīng)10M/100M第三代快速以太網(wǎng)控制器芯片LAN91C111,集成了SMSC/CD協(xié)議的MAC(媒體層)和PHY(物理層)。由于其靈活性和集成度高,具有較高的性價比。
LAN91C111工作流程比較簡單,驅(qū)動程序?qū)⒁l(fā)送的數(shù)據(jù)包按指定格式寫入芯片并啟動發(fā)送命令,LAN91C111會自動把數(shù)據(jù)包轉(zhuǎn)換成物理幀格式在物理信道上傳輸;反之芯片收到物理信號后自動將其還原成數(shù)據(jù),并按指定格式存放在芯片RAM中以便主機程序取用。簡言之就是LAN91C111完成數(shù)據(jù)包和電信號之間的相
互轉(zhuǎn)換: 數(shù)據(jù)包 電信號。LAN91C111的編程主要包括:初始化、發(fā)送數(shù)據(jù)包、接收數(shù)據(jù)包三部分。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 嵌入式實時操作系統(tǒng)μC/OS-Ⅱ在LPC1788上的移植及應(yīng)用
- 嵌入式三軸運動控制系統(tǒng)的以太網(wǎng)通信問題和解決方案 9次下載
- EtherCAT的工業(yè)以太網(wǎng)通信芯片的設(shè)計 16次下載
- 嵌入式系統(tǒng)設(shè)計與實例開發(fā)—ARM與uC/OS-Ⅱ 0次下載
- 基于μC/OS-Ⅱ的嵌入式洗碗機控制器的設(shè)計與實現(xiàn) 12次下載
- 嵌入式實時操作系統(tǒng)uCOS-II原理 261次下載
- 基于ARM的多路串行和以太網(wǎng)通信技術(shù)的研究與應(yīng)用 76次下載
- 基于DSP的嵌入式TCP/IP協(xié)議棧在μC/OS-Ⅱ上的實現(xiàn) 65次下載
- ARM與C/OS-Ⅱ嵌入式系統(tǒng)設(shè)計與實例開發(fā)
- 基于OpenTCP的嵌入式以太網(wǎng)模塊設(shè)計
- 基于以太網(wǎng)和嵌入式Web Server的控制系統(tǒng)設(shè)計研究
- 基于ARM的單芯片嵌入式網(wǎng)關(guān)設(shè)計
- EPA 通信協(xié)議在μC/OS-II嵌入式系統(tǒng)中的設(shè)計與實現(xiàn)
- 嵌入式實時操作系統(tǒng)μC/OS-Ⅱ在ARM處理器上的實現(xiàn)
- 如何提高移植uC/OS-Ⅱ的ARM嵌入式系統(tǒng)執(zhí)行效率和實時性
- 工業(yè)以太網(wǎng)通信協(xié)議的主要類別 792次閱讀
- 上位機與PLC的以太網(wǎng)通信方法 1509次閱讀
- plc以太網(wǎng)通訊模塊在哪 plc以太網(wǎng)通訊掉線怎么解決 2508次閱讀
- 嵌入式以太網(wǎng)功能實現(xiàn)架構(gòu)、電路設(shè)計與應(yīng)用 1815次閱讀
- S7-1200與S7-300 PN口之間的以太網(wǎng)通信方法 6675次閱讀
- 基于以太網(wǎng)和現(xiàn)場總線控制系統(tǒng)實現(xiàn)嵌入式HTTP服務(wù)器的設(shè)計 812次閱讀
- 基于通用型單片機和以太網(wǎng)控制器實現(xiàn)嵌入式以太網(wǎng)接口的設(shè)計 3217次閱讀
- 米爾科技嵌入式實時操作系統(tǒng)介紹 2179次閱讀
- 基于SOPC技術(shù)的嵌入式以太網(wǎng)網(wǎng)絡(luò)終端設(shè)備解決方案設(shè)計詳解 1228次閱讀
- 以ARM處理器為基礎(chǔ)的以太網(wǎng)的嵌入式控制實現(xiàn)設(shè)計詳解 2403次閱讀
- S7-200SMART開放以太網(wǎng)通信 1.9w次閱讀
- 基于Xilinx FPGA的嵌入式串行千兆以太網(wǎng)設(shè)計 3324次閱讀
- 基于FPGA的高速嵌入式通信系統(tǒng)的設(shè)計與實現(xiàn) 3617次閱讀
- 嵌入式以太網(wǎng)解決方案:集設(shè)計方案、開發(fā)工具于一體 1273次閱讀
- 嵌入式工業(yè)以太網(wǎng)的應(yīng)用研究 1449次閱讀
下載排行
本周
- 1TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 2開關(guān)電源基礎(chǔ)知識
- 5.73 MB | 6次下載 | 免費
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計
- 0.60 MB | 3次下載 | 免費
- 5基于FPGA的光纖通信系統(tǒng)的設(shè)計與實現(xiàn)
- 0.61 MB | 2次下載 | 免費
- 6基于FPGA的C8051F單片機開發(fā)板設(shè)計
- 0.70 MB | 2次下載 | 免費
- 751單片機窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費
- 8基于51單片機的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33564次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關(guān)電源設(shè)計實例指南
- 未知 | 21548次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設(shè)計》 溫德爾著
- 0.00 MB | 6653次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537796次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191185次下載 | 免費
- 7十天學(xué)會AVR單片機與C語言視頻教程 下載
- 158M | 183278次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多