www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀]基于 LWIP 的嵌入式網(wǎng)絡(luò)系統(tǒng)設(shè)計和實現(xiàn)

ARM(Advanced RISC Machines)是目前在嵌入式領(lǐng)域里應用最廣泛的 RISC 微處理器 結(jié)構(gòu),以低成本、低功耗、高性能的特點占據(jù)了嵌入式系統(tǒng)應用領(lǐng)域的領(lǐng)先地位,已遍及工業(yè)控制、消費類電子產(chǎn)品、通信系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)、無線系統(tǒng)等各類產(chǎn)品市場。S3C2410 芯 片是由韓國 SAMSUNG 公司推出的基于 ARM920T 核的通用處理器,是為應用于小型掌上設(shè)備嵌入式系統(tǒng)應用而提供的微控制解決方案。SMDK2410 開發(fā)板是 SAMSUNG 公司推出 的基于此芯片的示例板,其網(wǎng)絡(luò)部分使用的是 CS8900A 芯片。

鑒于 ARM 處理器多方面的優(yōu)勢,現(xiàn)在已有多款操作系統(tǒng)實現(xiàn)了對其的支持,包括 Linux、 VxWork、WinCE、C/OS-II 等。其中 C/OS-II 以其源碼公開、代碼精簡(全部僅 6000 余 行),高效穩(wěn)定,移植性好,可裁剪等特點,正在不斷擴大影響力。但是,?C/OS-II 只提供 了基本的操作系統(tǒng)功能,例如進程調(diào)度、同步、進程通信等,卻不提供一般操作系統(tǒng)都提供的如文件系統(tǒng)、網(wǎng)絡(luò)等功能,一定程度上限制了其使用。

LWIP是開放源代碼的獨立TCP/IP協(xié)議棧,由瑞士計算機科學院的  Adam unkels  等開 發(fā),其目的是在支持比較完整的TCP/IP協(xié)議的基礎(chǔ)上減少代碼尺寸,同時減少對存儲器的使 用量,并且其移植接口簡潔清晰,便于添加入其它操作系統(tǒng)中。

本文以SMDK2410開發(fā)板為硬件平臺,構(gòu)建了一個以C/OS-II和LWIP為基礎(chǔ)的軟件系 統(tǒng),并給出了一個在該系統(tǒng)上的網(wǎng)絡(luò)服務(wù)應用程序,從而實現(xiàn)了一個完整的嵌入式網(wǎng)絡(luò)系統(tǒng)。

1  整體介紹 本嵌入式系統(tǒng)體系結(jié)構(gòu)如圖1所示,在最終運行于SMDK2410開發(fā)板上的軟件實際上包含五部分,分別是:硬件初始化程序、用戶應用程序、C/OS-II操作系統(tǒng)、LWIP網(wǎng)絡(luò)協(xié)議 棧、CS8900A網(wǎng)卡驅(qū)動程序:

由于各部分相對的獨立性,為了能使其協(xié)同工作,要實現(xiàn)各個模塊之間的接口,這需要做五部分的工作

編寫SMDK2410開發(fā)板初始化代碼,在系統(tǒng)啟動后初始化硬件,為軟件提供運行 環(huán)境。

移植C/OS-II到SMDK2410開發(fā)板,即為C/OS-II添加硬件相關(guān)代碼。

移植LWIP到C/OS-II,即為LWIP實現(xiàn)與操作系統(tǒng)相關(guān)的接口函數(shù)。

編寫CS8900A網(wǎng)卡驅(qū)動支持LWIP,即為LWIP實現(xiàn)底層硬件數(shù)據(jù)接收功能。

基于LWIP和C/OS-II提供的系統(tǒng)函數(shù),編寫用戶網(wǎng)絡(luò)應用程序。

2    軟件系統(tǒng)各部分介紹

2.1  初始化硬件平臺 初始化代碼的目的是使系統(tǒng)硬件環(huán)境處于一個合適的狀態(tài),從而為執(zhí)行操作系統(tǒng)做好準備,它是整個軟件系統(tǒng)最開始運行的程序。主要包括以下工作,由匯編文件 init.S 實現(xiàn):

中斷向量表的建立:ARM要求中斷向量表必須放置在從0X0地址開始,連續(xù)4byte 的空間內(nèi)。每當一個中斷發(fā)生以后,ARM處理器便強制把PC指針置為向量表中對 應中斷類型的地址值。中斷向量表的建立是通過一系列的跳轉(zhuǎn)指令b來完成的,一 般如下:

b

ResetHandler

//加電和復位處理函數(shù)的地址

b

HandlerIRQ

//通用中斷服務(wù)函數(shù)的地址

b

HandlerFIQ

//快速中斷處理函數(shù)的地址

……

內(nèi)部寄存器的設(shè)置:主要完成對 S3C2410 芯片中的時鐘管理、電源管理(包括掉電與重啟處理)、內(nèi)存管理等。這部分工作在  ResetHandler  處理函數(shù)中完成,以 下兩部分工作也是在此函數(shù)中實現(xiàn)的。

堆棧的初始化:因為 ARM 有 7 種執(zhí)行狀態(tài),每一種狀態(tài)的堆棧指針寄存器(SP) 都是獨立的。因此,對程序中需要用到的每一種模式都要給 SP 定義一個堆棧地址。 方法是改變狀態(tài)寄存器內(nèi)的狀態(tài)位,使處理器切換到不同的狀態(tài),然后給 SP 賦值。 注意:不要切換到 User 模式進行 User 模式的堆棧設(shè)置,因為進入 User 模式后就 不能再操作 CPSR 回到別的模式了,可能會對接下去的程序執(zhí)行造成影響。

代碼的搬移:全部可執(zhí)行代碼最初被燒寫在了硬件電路板中的只讀 NorFlash  中, 雖然 CPU  可以直接從中執(zhí)行,但是速度較慢,所以,要將可執(zhí)行的代碼搬移到系統(tǒng) RAM 中,以提高運行速度。

程序跳轉(zhuǎn):在初始化代碼的最后,會通過跳轉(zhuǎn)指令啟動軟件系統(tǒng)的 main()函數(shù)。

2.2  C/OS-II  在 S3C2410  芯片上的移植

C/OS-II  實際上可以看作是一個多任務(wù)的調(diào)度器,并提供了和多任務(wù)調(diào)度相關(guān)的一些 系統(tǒng)服務(wù),如信號量、郵箱等,大部分代碼由  C 語言編寫,硬件獨立。相對于移植工作而言,除一些類型定義等工作外,主要集中在多任務(wù)切換的實現(xiàn)上,這需要依據(jù)特定處理器結(jié) 構(gòu)使用匯編語言實現(xiàn)處理器現(xiàn)場的保護和恢復。全部工作包括在對三個與體系結(jié)構(gòu)相關(guān)文件[1]的修改上,具體如下:

OS_CPU.H  文件:這個文件中包括了用#define 語句定義的、與處理器相關(guān)的常 數(shù)、宏以及數(shù)據(jù)類型。我們要根據(jù)具體的處理器和編譯器重寫,主要包括數(shù)據(jù)類型 的重新定義、堆棧單位和增長方向的設(shè)定,以及開關(guān)中斷的宏定義和任務(wù)切換的宏 定義。

OS_CPU_C.C  文件  :當 C/OS-II 進行任務(wù)切換或中斷時要保護 CPU 的寄存器 到任務(wù)堆棧,在這個文件中定義了該堆棧的初始化函數(shù),即設(shè)定了要保護的每一個 寄存器在堆棧中,使堆棧如同中斷剛發(fā)生過一樣。此外還有一些 HOOK 函數(shù),必須 聲明。

OS_CPU_A.S  文件:C/OS-II 是多任務(wù)實時操作系統(tǒng),在進行任務(wù)調(diào)度時需要切換任務(wù)上下文,這些和處理器相關(guān)的任務(wù)切換函數(shù)在這個文件中定義,此外還有時 鐘中斷處理函數(shù)和進退臨界區(qū)宏指令也需要在此文件中實現(xiàn)。

2.3  LWIP  在 C/OS-II  上的移植

LWIP是獨立的TCP/IP協(xié)議棧,代碼中沒有使用和操作系統(tǒng)及硬件相關(guān)的函數(shù)與數(shù)據(jù)結(jié)構(gòu),而是當需要這樣的函數(shù)時,通過操作系統(tǒng)模擬層加以使用。操作系統(tǒng)模擬層向諸如定時 器、處理同步、消息傳送機制等的操作系統(tǒng)服務(wù)提供一套統(tǒng)一的接口。原則上,移植LWIP 到其他操作系統(tǒng)時,僅僅需要實現(xiàn)適合該操作系統(tǒng)的操作系統(tǒng)模擬層,它包括以下這些函數(shù)[2]:

sys_init()                                                        //初始化接口函數(shù)

sys_arch_timeouts()       //定時器接口函數(shù)

sys_sem_new()                      //創(chuàng)建信號量接口函數(shù)

sys_sem_signal()    //發(fā)送信號量接口函數(shù)

sys_arch_sem_wait()      //等待信號量接口函數(shù)

sys_sem_free()     //釋放信號量接口函數(shù)

sys_mbox_t sys_mbox_new()   //創(chuàng)建消息郵箱接口函數(shù)

sys_mbox_post()  //發(fā)送消息接口函數(shù)

sys_arch_mbox_fetch()       //取得消息接口函數(shù)

sys_mbox_free()  //釋放消息郵箱接口函數(shù)

sys_thread_new() //創(chuàng)建線程接口函數(shù)

這些函數(shù)的實現(xiàn),基本上是根據(jù) ?C/OS-II 操作系統(tǒng)的相關(guān)數(shù)據(jù)結(jié)構(gòu),重定義這些函數(shù) 中的數(shù)據(jù)結(jié)構(gòu)如 sys_sem_t、sys_mbox_t 等,再封裝 ?C/OS-II 操作系統(tǒng)相應的系統(tǒng)調(diào)用函 數(shù)來完成的。以接口函數(shù) sys_sem_new()為例,其實現(xiàn)如下:

sys_sem_t sys_sem_new(u8_t count)

{

sys_sem_t pSem;

pSem = OSSemCreate((u16_t)count );

return pSem;

}

在 LWIP 中使用的這個信號量創(chuàng)建函數(shù),可以看到是通過封裝 ?C/OS-II 操作系統(tǒng)的信號 量創(chuàng)建函數(shù) OSSemCreate()來完成的,其中使用的數(shù)據(jù)結(jié)構(gòu) sys_sem_t  也被重定義如下:

typedef OS_EVENT* sys_sem_t;

其中數(shù)據(jù)結(jié)構(gòu) OS_EVENT 同樣為 C/OS-II 操作系統(tǒng)所有,其它函數(shù)的實現(xiàn)與此類似,不再重復。

此外,為支持操作系統(tǒng)模擬層,還需要建立 cc.h  、perf.h 文件,完成與 CPU 或編譯器 相關(guān)的定義,如數(shù)據(jù)長度、字的高低位順序等,這些應該與實現(xiàn) C/OS-II 時相一致。

2.4  CS8900A  芯片驅(qū)動程序?qū)?LWIP 的支持對于 LWIP 來說,它同樣為網(wǎng)絡(luò)驅(qū)動提供了一個移植接口,它使用 netif 數(shù)據(jù)結(jié)構(gòu)代表 網(wǎng)絡(luò)驅(qū)動層,此數(shù)據(jù)結(jié)構(gòu)部分如下:

struct netif {

struct netif *next;

err_t (* input)(struct pbuf *p, struct netif *inp);

err_t (* output)(struct netif *netif, struct pbuf *p, struct ip_addr *ipaddr);

err_t (* linkoutput)(struct netif *netif, struct pbuf *p);

……

};

LWIP  和網(wǎng)絡(luò)驅(qū)動程序會共用一個這樣的數(shù)據(jù)結(jié)構(gòu),從而實現(xiàn)了兩者的聯(lián)系。其中

output( )函數(shù)提供給 LWIP 的 IP 模塊,linkoutput( )函數(shù)提供給 LWIP 的 ARP 模塊。LWIP 的

驅(qū)動編寫 示例 [3] 指出, output(  ) 函封裝 了  LWIP  中  ARP  模塊的數(shù)據(jù) 發(fā)送函 數(shù) etharp_output(  ),此函數(shù)最終會調(diào)用到 linkoutput(  )函數(shù),即 linkoutput(  )函數(shù)是實際的數(shù) 據(jù)發(fā)送函數(shù)(這個函數(shù)由網(wǎng)絡(luò)驅(qū)動程序?qū)崿F(xiàn))。另一方面,當網(wǎng)絡(luò)驅(qū)動的中斷處理函數(shù)接收到一個數(shù)據(jù)包后,也會調(diào)用此結(jié)構(gòu)中的 input( )函數(shù)(這個函數(shù)由 LWIP 實現(xiàn)),將數(shù)據(jù)轉(zhuǎn)交給 LWIP。接口結(jié)構(gòu)[4]如圖 2 所示:

具體在為 LWIP 編寫網(wǎng)絡(luò)驅(qū)動程序時我們要實現(xiàn)以下函數(shù):

初始化函數(shù):init( )

在這個函數(shù)里,主要的任務(wù)就是初始化數(shù)據(jù)結(jié)構(gòu)  netif,包擴硬件地址、最大傳輸 單元 mtu 和 state(指向設(shè)備驅(qū)動中網(wǎng)絡(luò)接口的特定狀態(tài))以及 output( )函數(shù)、linkoutput( )函數(shù)和 input( )函數(shù)等。

數(shù)據(jù)發(fā)送函數(shù):output( )

此函數(shù)只是簡單的封裝了 LWIP 中 ARP 模塊的數(shù)據(jù)發(fā)送函數(shù) etharp_output( )。

數(shù)據(jù)發(fā)送函數(shù):linkoutput( )

這是真正的網(wǎng)卡數(shù)據(jù)發(fā)送函數(shù),output( )函數(shù)最終會調(diào)用到此函數(shù)。它將上層傳遞 來的數(shù)據(jù)轉(zhuǎn)移到 CS8900A 網(wǎng)卡芯片上,使網(wǎng)卡將數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)上。

中斷函數(shù):net_isr( )

CS8900A 芯片將其要求的所有中斷事件放在中斷狀態(tài)隊列寄存器 ISQ 中,所以當 其產(chǎn)生中斷要求 CPU 處理時,中斷處理函數(shù)要循環(huán)處理 CS8900A 芯片的 ISQ,判斷 中斷事件類型,然后做相應處理。例如,如果是數(shù)據(jù)接收事件,則將數(shù)據(jù)從網(wǎng)卡中轉(zhuǎn)移到內(nèi)存,在必要處理后,調(diào)用 netif 中的 input( )函數(shù)將數(shù)據(jù)遞交給 LWIP 層。 整體驅(qū)動程序由 CS8900A.c 實現(xiàn),簡要流程圖[5]如圖 3 所示:

3  應用

在完成上述工作后,一個嵌入式網(wǎng)絡(luò)系統(tǒng)的軟件平臺基本完成。在這樣的一個軟件平臺 上,通過調(diào)用 LWIP 提供的函數(shù),即可以開發(fā)網(wǎng)絡(luò)應用程序。本文編寫了一個 web 服務(wù)器應 用程序,將主機與 SMDK 開發(fā)板連入局域網(wǎng)環(huán)境下,從主機 IE 瀏覽器敲入 SMDK2410 開發(fā)板 IP 地址后,可瀏覽 SMDK2410 開發(fā)板提供的 http 網(wǎng)頁,如圖 4 所示。

4  結(jié)束語

目前,基于 S3C2410 芯片的 SMDK2410 開發(fā)板在國內(nèi)嵌入式教育領(lǐng)域正得到越來越 廣泛的使用,本文給出了基于此硬件平臺的 ?C/OS-II&LWIP 完整移植方案,構(gòu)建了一個嵌 入式網(wǎng)絡(luò)實驗系統(tǒng),并強調(diào)了硬件平臺初始化和網(wǎng)卡芯片驅(qū)動程序的移植和實現(xiàn),使得最終的軟件系統(tǒng)可實際工作。同時,由于移植的相似性,可以較容易的修改代碼將其移植到其它 不同類型的開發(fā)板中運行,為基于 ?C/OS-II 和 LWIP 的網(wǎng)絡(luò)研究和應用提供了基礎(chǔ)。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉