




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、【W(wǎng)ord版本下載可任意編輯】 LWIP 的嵌入式網(wǎng)絡(luò)系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn) ARM(Advanced RISC Machines)是目前在嵌入式領(lǐng)域里應(yīng)用廣泛的 RISC 微處理器 構(gòu)造,以低成本、低功耗、高性能的特點(diǎn)占據(jù)了嵌入式系統(tǒng)應(yīng)用領(lǐng)域的地位,已遍及工業(yè)控制、消費(fèi)類電子產(chǎn)品、通信系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)、無(wú)線系統(tǒng)等各類產(chǎn)品市場(chǎng)。S3C2410 芯 片是由韓國(guó) SAMSUNG 公司推出的基于 ARM920T 核的通用處理器,是為應(yīng)用于小型掌上設(shè)備嵌入式系統(tǒng)應(yīng)用而提供的微控制解決方案。SMDK2410 開(kāi)發(fā)板是 SAMSUNG 公司推出 的基于此芯片的例如板,其網(wǎng)絡(luò)部分使用的是 CS8900A 芯片。 鑒于
2、 ARM 處理器多方面的優(yōu)勢(shì),現(xiàn)在已有多款操作系統(tǒng)實(shí)現(xiàn)了對(duì)其的支持,包括 Linux、 VxWork、WinCE、C/OS-II 等。其中 C/OS-II 以其源碼公開(kāi)、代碼精簡(jiǎn)(全部?jī)H 6000 余 行),高效穩(wěn)定,移植性好,可裁剪等特點(diǎn),正在不斷擴(kuò)大影響力。但是,?C/OS-II 只提供 了基本的操作系統(tǒng)功能,例如進(jìn)程調(diào)度、同步、進(jìn)程通信等,卻不提供一般操作系統(tǒng)都提供的如文件系統(tǒng)、網(wǎng)絡(luò)等功能,一定程度上限制了其使用。 LWIP是開(kāi)放源代碼的獨(dú)立TCP/IP協(xié)議棧,由瑞士計(jì)算機(jī)科學(xué)院的 Adam unkels 等開(kāi) 發(fā),其目的是在支持比較完整的TCP/IP協(xié)議的根底上減少代碼尺寸,同時(shí)減少對(duì)
3、存儲(chǔ)器的使 用量,并且其移植接口簡(jiǎn)潔清晰,便于添參加其它操作系統(tǒng)中。 本文以SMDK2410開(kāi)發(fā)板為硬件平臺(tái),構(gòu)建了一個(gè)以C/OS-II和LWIP為根底的軟件系 統(tǒng),并給出了一個(gè)在該系統(tǒng)上的網(wǎng)絡(luò)服務(wù)應(yīng)用程序,從而實(shí)現(xiàn)了一個(gè)完整的嵌入式網(wǎng)絡(luò)系統(tǒng)。 1 整體介紹 本嵌入式系統(tǒng)體系構(gòu)造如圖1所示,在終運(yùn)行于SMDK2410開(kāi)發(fā)板上的軟件實(shí)際上包含五部分,分別是:硬件初始化程序、用戶應(yīng)用程序、C/OS-II操作系統(tǒng)、LWIP網(wǎng)絡(luò)協(xié)議 棧、CS8900A網(wǎng)卡驅(qū)動(dòng)程序: 由于各部分相對(duì)的獨(dú)立性,為了能使其協(xié)同工作,要實(shí)現(xiàn)各個(gè)模塊之間的接口,這需要做五部分的工作 編寫SMDK2410開(kāi)發(fā)板初始化代碼,在系統(tǒng)
4、啟動(dòng)后初始化硬件,為軟件提供運(yùn)行 環(huán)境。 移植C/OS-II到SMDK2410開(kāi)發(fā)板,即為C/OS-II添加硬件相關(guān)代碼。 移植LWIP到C/OS-II,即為L(zhǎng)WIP實(shí)現(xiàn)與操作系統(tǒng)相關(guān)的接口函數(shù)。 編寫CS8900A網(wǎng)卡驅(qū)動(dòng)支持LWIP,即為L(zhǎng)WIP實(shí)現(xiàn)底層硬件數(shù)據(jù)接收功能。 基于LWIP和C/OS-II提供的系統(tǒng)函數(shù),編寫用戶網(wǎng)絡(luò)應(yīng)用程序。 軟件系統(tǒng)各部分介紹 2.1 初始化硬件平臺(tái) 初始化代碼的目的是使系統(tǒng)硬件環(huán)境處于一個(gè)合適的狀態(tài),從而為執(zhí)行操作系統(tǒng)做好準(zhǔn)備,它是整個(gè)軟件系統(tǒng)開(kāi)始運(yùn)行的程序。主要包括以下工作,由匯編文件 init.S 實(shí)現(xiàn): 中斷向量表的建立:ARM要求中斷向量表必須放置
5、在從0X0地址開(kāi)始,連續(xù)4byte 的空間內(nèi)。每當(dāng)一個(gè)中斷發(fā)生以后,ARM處理器便強(qiáng)制把PC指針置為向量表中對(duì) 應(yīng)中斷類型的地址值。中斷向量表的建立是通過(guò)一系列的跳轉(zhuǎn)指令b來(lái)完成的,一 般如下: b ResetHandler /加電和復(fù)位處理函數(shù)的地址 b HandlerIRQ /通用中斷服務(wù)函數(shù)的地址 b HandlerFIQ /快速中斷處理函數(shù)的地址 內(nèi)部存放器的設(shè)置:主要完成對(duì) S3C2410 芯片中的時(shí)鐘管理、電源管理(包括掉電與重啟處理)、內(nèi)存管理等。這部分工作在 ResetHandler 處理函數(shù)中完成,以 下兩部分工作也是在此函數(shù)中實(shí)現(xiàn)的。 堆棧的初始化:因?yàn)?ARM 有 7 種
6、執(zhí)行狀態(tài),每一種狀態(tài)的堆棧指針存放器(SP) 都是獨(dú)立的。因此,對(duì)程序中需要用到的每一種模式都要給 SP 定義一個(gè)堆棧地址。 方法是改變狀態(tài)存放器內(nèi)的狀態(tài)位,使處理器切換到不同的狀態(tài),然后給 SP 賦值。 注意:不要切換到 User 模式開(kāi)展 User 模式的堆棧設(shè)置,因?yàn)檫M(jìn)入 User 模式后就 不能再操作 CPSR 回到別的模式了,可能會(huì)對(duì)接下去的程序執(zhí)行造成影響。 代碼的搬移:全部可執(zhí)行代碼初被燒寫在了硬件電路板中的只讀 NorFlash 中, 雖然 CPU 可以直接從中執(zhí)行,但是速度較慢,所以,要將可執(zhí)行的代碼搬移到系統(tǒng) RAM 中,以提高運(yùn)行速度。 程序跳轉(zhuǎn):在初始化代碼的,會(huì)通過(guò)跳
7、轉(zhuǎn)指令啟動(dòng)軟件系統(tǒng)的 main()函數(shù)。 2.2 C/OS-II 在 S3C2410 芯片上的移植 C/OS-II 實(shí)際上可以看作是一個(gè)多任務(wù)的調(diào)度器,并提供了和多任務(wù)調(diào)度相關(guān)的一些 系統(tǒng)服務(wù),如信號(hào)量、郵箱等,大部分代碼由 C 語(yǔ)言編寫,硬件獨(dú)立。相對(duì)于移植工作而言,除一些類型定義等工作外,主要集中在多任務(wù)切換的實(shí)現(xiàn)上,這需要依據(jù)特定處理器結(jié) 構(gòu)使用匯編語(yǔ)言實(shí)現(xiàn)處理器現(xiàn)場(chǎng)的保護(hù)和恢復(fù)。全部工作包括在對(duì)三個(gè)與體系構(gòu)造相關(guān)文件的修改上,具體如下: OS_CPU.H 文件:這個(gè)文件中包括了用define 語(yǔ)句定義的、與處理器相關(guān)的常 數(shù)、宏以及數(shù)據(jù)類型。我們要根據(jù)具體的處理器和編譯器重寫,主要包括
8、數(shù)據(jù)類型 的重新定義、堆棧單位和增長(zhǎng)方向的設(shè)定,以及開(kāi)關(guān)中斷的宏定義和任務(wù)切換的宏 定義。 OS_CPU_C.C 文件 :當(dāng) C/OS-II 開(kāi)展任務(wù)切換或中斷時(shí)要保護(hù) CPU 的存放器 到任務(wù)堆棧,在這個(gè)文件中定義了該堆棧的初始化函數(shù),即設(shè)定了要保護(hù)的每一個(gè) 存放器在堆棧中,使堆棧如同中斷剛發(fā)生過(guò)一樣。此外還有一些 HOOK 函數(shù),必須 聲明。 OS_CPU_A.S 文件:C/OS-II 是多任務(wù)實(shí)時(shí)操作系統(tǒng),在開(kāi)展任務(wù)調(diào)度時(shí)需要切換任務(wù)上下文,這些和處理器相關(guān)的任務(wù)切換函數(shù)在這個(gè)文件中定義,此外還有時(shí) 鐘中斷處理函數(shù)和進(jìn)退臨界區(qū)宏指令也需要在此文件中實(shí)現(xiàn)。 2.3 LWIP 在 C/OS-
9、II 上的移植 LWIP是獨(dú)立的TCP/IP協(xié)議棧,代碼中沒(méi)有使用和操作系統(tǒng)及硬件相關(guān)的函數(shù)與數(shù)據(jù)構(gòu)造,而是當(dāng)需要這樣的函數(shù)時(shí),通過(guò)操作系統(tǒng)模擬層加以使用。操作系統(tǒng)模擬層向諸如定時(shí) 器、處理同步、消息傳送機(jī)制等的操作系統(tǒng)服務(wù)提供一套統(tǒng)一的接口。原則上,移植LWIP 到其他操作系統(tǒng)時(shí),僅僅需要實(shí)現(xiàn)適合該操作系統(tǒng)的操作系統(tǒng)模擬層,它包括以下這些函數(shù): sys_init() /初始化接口函數(shù) sys_arch_timeouts() /定時(shí)器接口函數(shù) sys_sem_new() /創(chuàng)立信號(hào)量接口函數(shù) sys_sem_signal() /發(fā)送信號(hào)量接口函數(shù) sys_arch_sem_wait() /等待
10、信號(hào)量接口函數(shù) sys_sem_free() /釋放信號(hào)量接口函數(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ù)的實(shí)現(xiàn),基本上是根據(jù) ?C/OS-II 操作系統(tǒng)的相關(guān)數(shù)據(jù)構(gòu)造,重定義這些函數(shù) 中的數(shù)據(jù)構(gòu)造如 sys_sem_t、sys_mbox_t 等,再封裝 ?C/OS-II 操作系統(tǒng)相應(yīng)的系統(tǒng)調(diào)用函 數(shù)來(lái)完成的。以接口函數(shù) sy
11、s_sem_new()為例,其實(shí)現(xiàn)如下: sys_sem_t sys_sem_new(u8_t count) sys_sem_t pSem; pSem = OSSemCreate(u16_t)count ); return pSem; 在 LWIP 中使用的這個(gè)信號(hào)量創(chuàng)立函數(shù),可以看到是通過(guò)封裝 ?C/OS-II 操作系統(tǒng)的信號(hào) 量創(chuàng)立函數(shù) OSSemCreate()來(lái)完成的,其中使用的數(shù)據(jù)構(gòu)造 sys_sem_t 也被重定義如下: typedef OS_EVENT* sys_sem_t; 其中數(shù)據(jù)構(gòu)造 OS_EVENT 同樣為 C/OS-II 操作系統(tǒng)所有,其它函數(shù)的實(shí)現(xiàn)與此類似,不再重復(fù)。
12、 此外,為支持操作系統(tǒng)模擬層,還需要建立 cc.h 、perf.h 文件,完成與 CPU 或編譯器 相關(guān)的定義,如數(shù)據(jù)長(zhǎng)度、字的高低位順序等,這些應(yīng)該與實(shí)現(xiàn) C/OS-II 時(shí)相一致。 2.4 CS8900A 芯片驅(qū)動(dòng)程序?qū)?LWIP 的支持對(duì)于 LWIP 來(lái)說(shuō),它同樣為網(wǎng)絡(luò)驅(qū)動(dòng)提供了一個(gè)移植接口,它使用 netif 數(shù)據(jù)構(gòu)造代表 網(wǎng)絡(luò)驅(qū)動(dòng)層,此數(shù)據(jù)構(gòu)造部分如下: struct netif struct netif *next; err_t (* input)(struct pbuf *p, struct netif *inp); err_t (* output)(struct netif *
13、netif, struct pbuf *p, struct ip_addr *ipaddr); err_t (* linkoutput)(struct netif *netif, struct pbuf *p); ; LWIP 和網(wǎng)絡(luò)驅(qū)動(dòng)程序會(huì)共用一個(gè)這樣的數(shù)據(jù)構(gòu)造,從而實(shí)現(xiàn)了兩者的聯(lián)系。其中 output( )函數(shù)提供應(yīng) LWIP 的 IP 模塊,linkoutput( )函數(shù)提供應(yīng) LWIP 的 ARP 模塊。LWIP 的 驅(qū)動(dòng)編寫 例如 指出, output( ) 函封裝 了 LWIP 中 ARP 模塊的數(shù)據(jù) 發(fā)送函 數(shù) etharp_output( ),此函數(shù)終會(huì)調(diào)用到 linkout
14、put( )函數(shù),即 linkoutput( )函數(shù)是實(shí)際的數(shù) 據(jù)發(fā)送函數(shù)(這個(gè)函數(shù)由網(wǎng)絡(luò)驅(qū)動(dòng)程序?qū)崿F(xiàn))。另一方面,當(dāng)網(wǎng)絡(luò)驅(qū)動(dòng)的中斷處理函數(shù)接收到一個(gè)數(shù)據(jù)包后,也會(huì)調(diào)用此構(gòu)造中的 input( )函數(shù)(這個(gè)函數(shù)由 LWIP 實(shí)現(xiàn)),將數(shù)據(jù)轉(zhuǎn)交給 LWIP。接口構(gòu)造如圖 2 所示: 具體在為 LWIP 編寫網(wǎng)絡(luò)驅(qū)動(dòng)程序時(shí)我們要實(shí)現(xiàn)以下函數(shù): 初始化函數(shù):init( ) 在這個(gè)函數(shù)里,主要的任務(wù)就是初始化數(shù)據(jù)構(gòu)造 netif,包擴(kuò)硬件地址、傳輸 單元 mtu 和 state(指向設(shè)備驅(qū)動(dòng)中網(wǎng)絡(luò)接口的特定狀態(tài))以及 output( )函數(shù)、linkoutput( )函數(shù)和 input( )函數(shù)等。
15、數(shù)據(jù)發(fā)送函數(shù):output( ) 此函數(shù)只是簡(jiǎn)單的封裝了 LWIP 中 ARP 模塊的數(shù)據(jù)發(fā)送函數(shù) etharp_output( )。 數(shù)據(jù)發(fā)送函數(shù):linkoutput( ) 這是真正的網(wǎng)卡數(shù)據(jù)發(fā)送函數(shù),output( )函數(shù)終會(huì)調(diào)用到此函數(shù)。它將上層傳遞 來(lái)的數(shù)據(jù)轉(zhuǎn)移到 CS8900A 網(wǎng)卡芯片上,使網(wǎng)卡將數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)上。 中斷函數(shù):net_isr( ) CS8900A 芯片將其要求的所有中斷事件放在中斷狀態(tài)隊(duì)列存放器 ISQ 中,所以當(dāng) 其產(chǎn)生中斷要求 CPU 處理時(shí),中斷處理函數(shù)要循環(huán)處理 CS8900A 芯片的 ISQ,判斷 中斷事件類型,然后做相應(yīng)處理。例如,如果是數(shù)據(jù)接收事件,則將數(shù)據(jù)從網(wǎng)卡中轉(zhuǎn)移到內(nèi)存,在必要處理后,調(diào)用 netif 中的 input( )函數(shù)將數(shù)據(jù)遞交給 LWIP 層。 整體驅(qū)動(dòng)程序由 CS8900A.c 實(shí)現(xiàn),簡(jiǎn)要流程圖如圖 3 所示: 3 應(yīng)用 在完成上述工作后,一個(gè)嵌入式網(wǎng)絡(luò)系統(tǒng)的軟件平臺(tái)基本完成。在這樣的一個(gè)軟件平臺(tái) 上,通過(guò)調(diào)用 LWIP 提供的函數(shù),即可以開(kāi)發(fā)網(wǎng)絡(luò)應(yīng)用程序。本文編寫了一個(gè) web 服務(wù)器應(yīng) 用程序,將主機(jī)與 SMDK 開(kāi)發(fā)板連入局域網(wǎng)環(huán)境下,從主機(jī) IE 瀏覽器敲入 SMDK2410 開(kāi)發(fā)板 IP 地址后,可瀏覽 SMDK2410 開(kāi)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 紙制品制造企業(yè)人力資源管理考核試卷
- 環(huán)境監(jiān)測(cè)與重金屬污染土壤修復(fù)考核試卷
- 紙張品質(zhì)控制與管理考核試卷
- 絹絲在復(fù)合材料領(lǐng)域的創(chuàng)新研發(fā)與應(yīng)用實(shí)踐考核試卷
- 網(wǎng)絡(luò)安全技術(shù)實(shí)踐教程(微課版)-教案 病毒與木馬的認(rèn)知與防護(hù)
- 肇慶市實(shí)驗(yàn)中學(xué)高中物理:習(xí)題課高效課堂教學(xué)設(shè)計(jì)
- 內(nèi)蒙古自治區(qū)呼倫貝爾市、興安盟2025屆初三第三次質(zhì)量檢測(cè)試題語(yǔ)文試題含解析
- 上海市浦東新區(qū)四校2024-2025學(xué)年高三月考(5)語(yǔ)文試題含解析
- 西華師范大學(xué)《諾貝爾生理學(xué)或醫(yī)學(xué)獎(jiǎng)史話》2023-2024學(xué)年第一學(xué)期期末試卷
- 蘭州信息科技學(xué)院《航天醫(yī)學(xué)工程概論》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年同等學(xué)力申碩《英語(yǔ)》試題真題及答案
- 公共資源交易知識(shí)培訓(xùn)
- 《危機(jī)管理案例》課件
- DB13-T5687-2023負(fù)壓封閉引流術(shù)護(hù)理規(guī)范
- 海綿材料項(xiàng)目可行性研究報(bào)告
- 2025年四川成都地鐵運(yùn)營(yíng)有限公司招聘筆試參考題庫(kù)含答案解析
- 【MOOC】《學(xué)術(shù)交流英語(yǔ)》(東南大學(xué))章節(jié)中國(guó)大學(xué)慕課答案
- 幼兒園閱讀活動(dòng)環(huán)境創(chuàng)設(shè)
- 環(huán)保公司簡(jiǎn)介范文6篇范文
- 如何與人有效溝通培訓(xùn)
- 食品企業(yè)生產(chǎn)部門質(zhì)量獎(jiǎng)懲條例
評(píng)論
0/150
提交評(píng)論