![基于ARM9的通用控制器設(shè)計(jì)_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/59af7788-dd45-4c1e-97a6-be1562a38b60/59af7788-dd45-4c1e-97a6-be1562a38b601.gif)
![基于ARM9的通用控制器設(shè)計(jì)_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/59af7788-dd45-4c1e-97a6-be1562a38b60/59af7788-dd45-4c1e-97a6-be1562a38b602.gif)
![基于ARM9的通用控制器設(shè)計(jì)_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/59af7788-dd45-4c1e-97a6-be1562a38b60/59af7788-dd45-4c1e-97a6-be1562a38b603.gif)
![基于ARM9的通用控制器設(shè)計(jì)_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/59af7788-dd45-4c1e-97a6-be1562a38b60/59af7788-dd45-4c1e-97a6-be1562a38b604.gif)
![基于ARM9的通用控制器設(shè)計(jì)_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/59af7788-dd45-4c1e-97a6-be1562a38b60/59af7788-dd45-4c1e-97a6-be1562a38b605.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、淮淮陰陰工工學(xué)學(xué)院院畢畢業(yè)業(yè)設(shè)設(shè)計(jì)計(jì)說(shuō)說(shuō)明明書(shū)書(shū)(論論文文) 第 I 頁(yè) 共 II 頁(yè)目 錄1 緒論.11. 1 控制器的種類(lèi)和特點(diǎn) .11. 2 嵌入式系統(tǒng)簡(jiǎn)介 .21. 3 ARM 簡(jiǎn)介.42 系統(tǒng)需求分析與可行性研究.42. 1 系統(tǒng)需求分析 .42. 2 系統(tǒng)可行性研究 .53 嵌入式開(kāi)發(fā)平臺(tái)介紹.63. 1 硬件開(kāi)發(fā)平臺(tái)介紹 .63. 2 軟件開(kāi)發(fā)平臺(tái)介紹 .83. 3 軟件結(jié)構(gòu)與開(kāi)發(fā)流程 .134 軟件設(shè)計(jì)與實(shí)現(xiàn).144. 1 SOCKET編程.144. 2 LCD 顯示編程 .234. 3 圖形用戶界面設(shè)計(jì) .254. 4 程序的運(yùn)行與調(diào)試 .27結(jié)論.29致謝.30參考文獻(xiàn).3
2、1淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文) 第 1 頁(yè) 共31 頁(yè)1 緒論緒論隨著現(xiàn)代科學(xué)技術(shù)的迅速發(fā)展,自動(dòng)化控制技術(shù)呈現(xiàn)日新月異的變化?,F(xiàn)代日常生活和工業(yè)生產(chǎn)中,自動(dòng)化控制技術(shù)給人們的日常生活和工作帶來(lái)了便利,為工業(yè)生產(chǎn)提供了重要的保障。其中控制自動(dòng)化主要包含 3 個(gè)層次,從下往上依次是基礎(chǔ)自動(dòng)化、過(guò)程自動(dòng)化和管理自動(dòng)化,其核心是基礎(chǔ)自動(dòng)化和過(guò)程自動(dòng)化,而基礎(chǔ)自動(dòng)化和過(guò)程自動(dòng)化的核心是各式各樣的控制器和與之配套的軟件系統(tǒng)。1. 1 控制器控制器的種類(lèi)和特點(diǎn)的種類(lèi)和特點(diǎn)運(yùn)動(dòng)控制器:早期的運(yùn)動(dòng)控制器一般采用運(yùn)算放大器等分立元件,以模擬電路硬接線方式構(gòu)成。這種控制方式具有
3、以下優(yōu)點(diǎn):對(duì)輸入信號(hào)進(jìn)行實(shí)時(shí)處理,沒(méi)有附加延時(shí),響應(yīng)速度快;控制器的精度較高且具有較大的帶寬。但是,模擬控制系統(tǒng)與數(shù)字控制系統(tǒng)相比,也有明顯的缺點(diǎn):老化和環(huán)境溫度的變化對(duì)構(gòu)成系統(tǒng)的元器件的參數(shù)影響很大;構(gòu)成模擬系統(tǒng)需要的元器件較多??删幊踢壿嬁刂破鳎嚎删幊踢壿嬁刂破?PLC)是以微處理器為基礎(chǔ),在硬件接線邏輯控制技術(shù)和計(jì)算機(jī)技術(shù)的基礎(chǔ)上發(fā)展起來(lái)的。它是將計(jì)算機(jī)技術(shù)與自動(dòng)控制技術(shù)綜合為一體的工業(yè)控制產(chǎn)品,由中央處理單元(CPU)、存儲(chǔ)器、輸入輸出單元(IO)、電源、編程器等組成,是專(zhuān)為在工業(yè)環(huán)境下應(yīng)用而設(shè)計(jì)的一種工業(yè)控制計(jì)算機(jī)。DDC(直接數(shù)字控制)控制器的內(nèi)部也是由微處理器、工作存儲(chǔ)器、程序存
4、儲(chǔ)器、時(shí)鐘模擬量輸入輸出和數(shù)字量輸入輸出等部分組成,和 PLC 有些類(lèi)似。通用計(jì)算機(jī)和工控機(jī),利用高級(jí)語(yǔ)言編制相關(guān)的控制軟件,配合與計(jì)算機(jī)進(jìn)行信號(hào)交換的通信接口板,構(gòu)成了一個(gè)控制系統(tǒng)?;趯?zhuān)用控制芯片的控制器是將實(shí)現(xiàn)控制所需的各種邏輯功能做在一塊專(zhuān)用集成電路內(nèi),并提供一些專(zhuān)用的控制指令,同時(shí)具有一些特定用途必須的輔助功能,使用戶的軟件設(shè)計(jì)工作減少到最小程度。例如伺服電機(jī)??删幊踢壿嬈骷河捎诂F(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)和復(fù)雜可編程邏輯器件(CPLD)具有用戶可編程的特性,使得用戶可以利用系統(tǒng)開(kāi)發(fā)軟件或 VHDL 等開(kāi)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文) 第 2 頁(yè)
5、共31 頁(yè)發(fā)語(yǔ)言,通過(guò)軟件編程實(shí)現(xiàn)控制算法,并將這些算法下載到相應(yīng)的可編程邏輯器件中,從而最終以硬件的方式實(shí)現(xiàn)控制。近幾年來(lái),隨著 ARM 技術(shù)的不斷成熟,使用 ARM 處理器作為核心的控制器不斷涌現(xiàn),其原因主要是 ARM 的特有優(yōu)勢(shì): ARM 嵌入式 CPU 大多工作在為特定用戶群設(shè)計(jì)的系統(tǒng)中,通常具有低功耗、體積小、集成度高等特點(diǎn),能夠把通用 CPU 中許多由板卡完成的任務(wù)集成在芯片內(nèi)部,從而有利于嵌入式系統(tǒng)設(shè)計(jì)趨于小型化,移動(dòng)能力大大增強(qiáng)。 ARM 片上資源豐富,集成了多種控制器,便于通訊和外圍擴(kuò)展。支持 Thumb(16 位)/ARM(32 位)雙指令集,很好的兼容 8 位/16 位器
6、件。 處理速度快,尋址空間可達(dá) 4G,便于移植操作系統(tǒng),由此可以實(shí)現(xiàn)系統(tǒng)資源調(diào)度、進(jìn)程管理、進(jìn)程通信等諸多功能。 操作系統(tǒng)的引入帶來(lái)了通訊協(xié)議支持,也為復(fù)雜應(yīng)用程序的開(kāi)發(fā)帶來(lái)了便利。 可靠性高,尤其對(duì)于工業(yè)級(jí) ARM 芯片,可適應(yīng)高過(guò)載、高沖擊及其他惡劣環(huán)境。 價(jià)格低,一般幾到幾十元。 ARM 嵌入式工業(yè)控制系統(tǒng)的硬件和軟件都經(jīng)過(guò)高效率地設(shè)計(jì),量體裁衣、去除冗余,在同樣的硅片面積上實(shí)現(xiàn)更高的性能,在具體應(yīng)用中更具競(jìng)爭(zhēng)力,產(chǎn)品生命周期長(zhǎng)。 第三方工具和支持較多,為系統(tǒng)開(kāi)發(fā)帶來(lái)了便利。當(dāng)然,ARM 也有自身的限制,比如 ARM 在速度和數(shù)據(jù)處理能力方面不及 DSP。但由于上述諸多優(yōu)點(diǎn),基于 ARM
7、 的控制器還是如雨后春筍般涌現(xiàn)出來(lái),并且隨著對(duì)控制性能要求的提高,基于高性能 ARM 處理器的控制器也逐漸多了起來(lái),應(yīng)用前景十分光明。1. 2 嵌入式系統(tǒng)嵌入式系統(tǒng)簡(jiǎn)介簡(jiǎn)介嵌入式系統(tǒng)(Embedded System)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁減的,能滿足應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗等指標(biāo)的嚴(yán)格要求的專(zhuān)用計(jì)算機(jī)系統(tǒng)。它可以實(shí)現(xiàn)對(duì)設(shè)備的控制、監(jiān)視或管理等功能。淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文) 第 3 頁(yè) 共31 頁(yè)嵌入式系統(tǒng)的概念是相對(duì)于通用計(jì)算機(jī)系統(tǒng)而提出的。在對(duì)可靠性和成本控制要求較高的場(chǎng)合,傳統(tǒng) PC 和工控機(jī)都有其不足之處,而
8、嵌入式系統(tǒng)正好滿足了這些要求,成為了這些場(chǎng)合的不二之選。從本質(zhì)上來(lái)說(shuō),嵌入式系統(tǒng)是微型計(jì)算機(jī)系統(tǒng),由于它們要用在具體的場(chǎng)合與環(huán)境,并且有一定的專(zhuān)用性(軟硬件的裁減和定制),所以稱(chēng)之為“嵌入式”系統(tǒng)。通用計(jì)算機(jī)系統(tǒng)是對(duì)執(zhí)行非嵌入式應(yīng)用的計(jì)算機(jī)系統(tǒng)的統(tǒng)稱(chēng)。它包括硬件和軟件兩部分。硬件包括處理器/微處理器、存儲(chǔ)器及外設(shè)器件和 I/0 端口、圖形控制器等。軟件部分包括操作系統(tǒng)軟件和應(yīng)用程序。應(yīng)用程序控制著系統(tǒng)的運(yùn)行,而操作系統(tǒng)控制著應(yīng)用程序編程與硬件的交互作用。有時(shí)設(shè)計(jì)人員把這兩種軟件組合在一起。這種系統(tǒng)具有軟件代碼小,高度智能化,響應(yīng)速度快等特點(diǎn),特別適合于要求實(shí)時(shí)的和多任務(wù)的體系。嵌入式系統(tǒng)也是一
9、種軟硬件混合系統(tǒng),整個(gè)系統(tǒng)是由硬件和軟件兩大部分組成。前者是整個(gè)系統(tǒng)的物理基礎(chǔ),它提供軟件運(yùn)行平臺(tái)和通信接口,后者是實(shí)際控制系統(tǒng)的運(yùn)行。硬件部分又包括嵌入式處理器、外圍設(shè)備和外圍電路三個(gè)部分;軟件部分分為嵌入式操作系統(tǒng)和應(yīng)用軟件兩個(gè)層次,如下表所示:表 1-1 嵌入式系統(tǒng)軟件結(jié)構(gòu)應(yīng)用軟件嵌入式操作系統(tǒng)處理器外圍設(shè)備外圍電路嵌入式系統(tǒng)的核心是嵌入式微處理器。一般具備以下 4 個(gè)特點(diǎn):1)對(duì)實(shí)時(shí)多任務(wù)有很強(qiáng)的支持能力,能完成多任務(wù)并且有較短的中斷響應(yīng)時(shí)間,從而使內(nèi)部的代碼和實(shí)時(shí)內(nèi)核心的執(zhí)行時(shí)間減少到最低限度。2)具有功能很強(qiáng)的存儲(chǔ)區(qū)保護(hù)功能。這是由于嵌入式系統(tǒng)的軟件結(jié)構(gòu)已模塊化,而為了避免在軟件模
10、塊之間出現(xiàn)錯(cuò)誤的交叉作用,需要設(shè)計(jì)強(qiáng)大的存儲(chǔ)區(qū)保護(hù)功能,同時(shí)也有利于軟件診斷。3)可擴(kuò)展的處理器結(jié)構(gòu),迅速地?cái)U(kuò)展出滿足應(yīng)用的最高性能的嵌入式微處理器。4)嵌入式微處理器必須功耗很低,尤其是用于便攜式的無(wú)線及移動(dòng)的計(jì)算和通信設(shè)備中靠電池供電的嵌入式系統(tǒng)更是如此,如需要功耗只有 mW 甚至淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文) 第 4 頁(yè) 共31 頁(yè)W 級(jí)。按照目前的情況,根據(jù)嵌入式系統(tǒng)采用的處理器,一般分為三大類(lèi):基于微處理器(CPU)的嵌入式系統(tǒng),基于微控制器(MCU)的嵌入式系統(tǒng),基于數(shù)字信號(hào)處理器(DSP)的嵌入式系統(tǒng)。1. 3 ARM 簡(jiǎn)介簡(jiǎn)介ARM(Advan
11、ced RISC Machines),既可以認(rèn)為是一個(gè)公司的名字,也可以認(rèn)為是對(duì)一類(lèi)微處理器的通稱(chēng),還可以認(rèn)為是一種技術(shù)的名字。ARM 公司主要出售芯片設(shè)計(jì)技術(shù)的授權(quán)。目前,采用 ARM 技術(shù)知識(shí)產(chǎn)權(quán)核的微處理器,即我們通常所說(shuō)的 ARM 微處理器,已遍及工業(yè)控制、消費(fèi)類(lèi)電子產(chǎn)品、通信系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)、無(wú)線系統(tǒng)等各類(lèi)產(chǎn)品市場(chǎng)。目前,全世界有幾十家大的半導(dǎo)體公司都使用 ARM 公司的授權(quán),因此既使得 ARM 技術(shù)獲得更多的第三方工具、制造、軟件的支持,又使整個(gè)系統(tǒng)成本降低,使產(chǎn)品更容易進(jìn)入市場(chǎng)被消費(fèi)者所接受,更具有競(jìng)爭(zhēng)力。近幾年 ARM 技術(shù)迅猛發(fā)展,ARM7 系列、ARM9 系列、ARM9E 系
12、列、ARM10E 系列、SecurCore 系列、Xscale 系列、StrongARM 系列的微控制陸續(xù)問(wèn)世。計(jì)算速度越來(lái)越高,有些系列主頻可達(dá) 700MHz,其存儲(chǔ)能力也大大增加,并且集多種外圍設(shè)備于一身,是真正的片上系統(tǒng)(SOC:System On Chip),從而大大簡(jiǎn)化了外圍電路的擴(kuò)展,降低了硬件成本,提高了系統(tǒng)的可靠性。本課題使用的控制器正式基于 ARM9 的高性能控制器,它具備了較高的主頻和 4G 的地址空間尋址范圍,便于配備操作系統(tǒng)。同時(shí),由于將在控制器上運(yùn)行復(fù)雜程序,并且要使用網(wǎng)絡(luò)通訊功能,操作系統(tǒng)所提供的諸多系統(tǒng)功能以及內(nèi)嵌的通訊協(xié)議將為我們帶來(lái)便利。2 系統(tǒng)需求分析與可行
13、性研究系統(tǒng)需求分析與可行性研究2. 1 系統(tǒng)需求分析系統(tǒng)需求分析本課題是基于 ARM9 的通用控制器主控模塊設(shè)計(jì)。隨著控制技術(shù)和計(jì)算機(jī)科學(xué)的快速發(fā)展,控制器呈現(xiàn)出了通用性和開(kāi)放性的發(fā)展趨勢(shì)。傳統(tǒng)的控制器存在著靈活性差、開(kāi)發(fā)周期長(zhǎng)、功能單一、成本較高和難以普及等缺點(diǎn),針對(duì)目前流行的 ARM 處理器和控制器 PC 化的發(fā)展趨勢(shì),本課題提出并設(shè)計(jì)了一組淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文) 第 5 頁(yè) 共31 頁(yè)通用靈活的控制器軟件,該控制器軟件運(yùn)行于控制器的底層,可以避免普通控制器控制運(yùn)算所帶來(lái)通信實(shí)時(shí)性問(wèn)題,控制更加直接和快速。同時(shí)還為控制器納入了一個(gè) C/S 結(jié)構(gòu)體系
14、。針對(duì)現(xiàn)有的硬件平臺(tái)和軟件資源,該控制程序應(yīng)當(dāng)具備具體如下功能:在實(shí)時(shí)性要求不高的場(chǎng)合,使程序具有統(tǒng)一的循環(huán)周期。作為客戶端能夠和服務(wù)器端進(jìn)行通信,運(yùn)行狀態(tài)和用戶配置參數(shù)有一定反饋,并能接受服務(wù)器發(fā)出的配置命令。另外,所編寫(xiě)的主控模塊能夠連接上外圍接口的相關(guān)驅(qū)動(dòng),實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 LCD 顯示功能。最后要有較方便的圖形用戶界面,實(shí)現(xiàn)簡(jiǎn)單的數(shù)據(jù)交換。隨著本課題中控制器軟硬件平臺(tái)的完善,控制程序可以繼續(xù)實(shí)現(xiàn)更多的功能模塊??梢赃M(jìn)一步完善控制程序的實(shí)時(shí)性特征,改善人機(jī)交互環(huán)境,可以添加更復(fù)雜的控制算法,實(shí)現(xiàn)更強(qiáng)大的功能。通過(guò)以上功能分析,明確了控制器程序應(yīng)具備的功能,下面將對(duì)控制器的實(shí)現(xiàn)進(jìn)行系統(tǒng)的分析
15、。2. 2 系統(tǒng)可行性研究系統(tǒng)可行性研究本控制器選用基于 ARM920T 內(nèi)核的 S3C2410 微處理器,采用 Linux 操作系統(tǒng),作為控制器系統(tǒng)的核心。擁有較完備的軟硬件開(kāi)發(fā)平臺(tái),具體的開(kāi)發(fā)平臺(tái)將在下面的章節(jié)中做詳細(xì)的介紹。用到的硬件資源:JXARM9-2410 教學(xué)系統(tǒng)的實(shí)驗(yàn)箱環(huán)境下?lián)碛胸S富的硬件資源,具有多個(gè)實(shí)現(xiàn)功能的硬件模塊并提供了豐富的外圍接口。所以,我在控制器主控模塊的設(shè)計(jì)中不需要硬件方面的設(shè)計(jì),只需要對(duì)硬件資源進(jìn)行了解,對(duì)硬件環(huán)境中所用的部分進(jìn)行歸納總結(jié)和分析。軟件資源方面采用 Redhat9.0 版本的 Linux 操作系統(tǒng),針對(duì) Linux 內(nèi)核和提供和 ARM 平臺(tái)移植
16、相關(guān)的機(jī)制,本設(shè)計(jì)將對(duì)操作系統(tǒng)進(jìn)行了一定的改進(jìn),將詳細(xì)的研究?jī)?nèi)核的移植、配置、編譯等重要環(huán)節(jié),從而完成了 linux 系統(tǒng)的建立,進(jìn)而完成整個(gè) ARMLinux 嵌入式平臺(tái)的搭建。其中軟件程序開(kāi)發(fā)平臺(tái)分為程序編輯平臺(tái)和程序編譯平臺(tái)。程序編輯工作是在 Linux 下的 vi 編輯器中進(jìn)行的。程序用 C 語(yǔ)言編寫(xiě),存儲(chǔ)為標(biāo)準(zhǔn)的 C 文件或頭文件。編輯好的程序經(jīng)過(guò)編譯、鏈接等生成可執(zhí)行的代碼。程序的編譯工淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文) 第 6 頁(yè) 共31 頁(yè)作在 Linux 環(huán)境下 gcc 編譯器下進(jìn)行了,因?yàn)榫幾g工具只能在 Linux 下運(yùn)行,所以,必須熟練掌握并
17、熟練運(yùn)用 Linux 下的操作命令。因?yàn)?Redhat9.0 版本的Linux 操作系統(tǒng)的用戶界面采用 MiniGUI,熟悉 Linux 用戶界面的操作也是十分重要的。本課題中,是在 PC 機(jī)的平臺(tái)上生成能在 ARM9 控制器平臺(tái)上運(yùn)行的可執(zhí)行代碼。這樣做的原因是 ARM9 控制器上的資源畢竟很有限,無(wú)法安裝使用相應(yīng)的編譯工具,只能借助 PC 機(jī)來(lái)完成。最后進(jìn)行可行性調(diào)試,從而完成整個(gè)功能設(shè)計(jì)。3 嵌入式開(kāi)發(fā)平臺(tái)介紹嵌入式開(kāi)發(fā)平臺(tái)介紹控制器功能的發(fā)揮離不開(kāi)控制軟件和它所依附的硬件,復(fù)雜控制功能的實(shí)現(xiàn)主要是靠軟件,而高性能的硬件又是軟件得以充分“施展”的基礎(chǔ)。下面將介紹控制軟件所依托的軟硬件環(huán)境
18、。3. 1 硬件開(kāi)發(fā)平臺(tái)硬件開(kāi)發(fā)平臺(tái)介紹介紹3. 1. 1 微處理器 S3C2410S3C2410 是 SAMSUNG 公司基于 ARM920T 處理器內(nèi)核開(kāi)發(fā)的一款 16/32位嵌入式處理器,運(yùn)行頻率高達(dá) 200 多 MHz,內(nèi)含一個(gè) ARM920T 內(nèi)核和如豐富的片內(nèi)外圍、MMU 和高速緩存等片上資源,可以廣泛用于 PDA、internet 設(shè)備和手持式設(shè)備。其主要性能簡(jiǎn)述如下:S3C2410X 芯片集成了大量的功能單元,列舉如下:(1)內(nèi)核采用 1.8 V 供電,存儲(chǔ)單元采用 3.3 V 獨(dú)立供電,外部 IO 采用 3.3 V 獨(dú)立供電,16 KB 數(shù)據(jù) Cache,16 KB 指令 C
19、ache,MMU。(2) 內(nèi)置外部存儲(chǔ)器控制器。(3) LCD 控制器,一個(gè) LCD 專(zhuān)用 DMA。(4) 4 路帶外部請(qǐng)求線的 DMA。(5) 3 個(gè)通用異步串行端口,2 通道 SPI。(6) 一個(gè)多主 IIC 總線,一個(gè) IIS 總線控制器。(7) SD 主接口版本 1.0 和多媒體卡協(xié)議版本 2.11 兼容。(8) 2 個(gè) USB Host 接口,一個(gè) USB Device(VER1.1)接口?;搓幑W(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文) 第 7 頁(yè) 共31 頁(yè)(9) 4 個(gè) PWM 定時(shí)器和一個(gè)內(nèi)部定時(shí)器。 (10) 看門(mén)狗定時(shí)器。 (11) 117 個(gè)通用 I/O
20、。 (12) 24 個(gè)外部中斷。(13) 電源控制模式:標(biāo)準(zhǔn)、慢速、休眠、掉電。 (14) 8 通道 10 位 ADC 和觸摸屏接口。 (15) 帶日歷功能的實(shí)時(shí)時(shí)鐘。 (16) 芯片內(nèi)置 PLL。(17) 16/32 位 RISC 體系結(jié)構(gòu),使用 ARM920T CPU 核的強(qiáng)大指令集。(18) ARM 帶 MMU 的先進(jìn)體系結(jié)構(gòu),支持 Windows CE、EPOC32、Linux。 (19) 指令緩存(Cache)、數(shù)據(jù)緩存、寫(xiě)緩沖和物理地址 TAG RAM,減小了對(duì)主存儲(chǔ)器帶寬和性能的影響。(20) ARM920T CPU 核支持 ARM 調(diào)試體系結(jié)構(gòu)。(21) 內(nèi)部先進(jìn)的位控制器總線
21、(AMBA2.0、AHB/APB)。整體的功能模塊結(jié)構(gòu)如下圖所示:淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文) 第 8 頁(yè) 共31 頁(yè)圖 3.1 ARM920T 內(nèi)核和 S3C2410 功能模塊結(jié)構(gòu)3. 1. 2 JXARM9-2410 教學(xué)實(shí)驗(yàn)系統(tǒng)本設(shè)計(jì)就是在 JXARM9-2410 的軟硬件環(huán)境下進(jìn)行的。JXARM9-2410 教學(xué)系統(tǒng)是一套軟硬件集成的、基于 ARM 的完整的教學(xué)實(shí)驗(yàn)系統(tǒng),該系統(tǒng)包含了豐富的硬件資源、完善而優(yōu)越的調(diào)試手段和詳盡的教學(xué)試驗(yàn)教程。JXARM9-2410 目標(biāo)處理器采用 SAMSUNG 公司的 S3C2410X 微處理器,開(kāi)發(fā)平臺(tái)采用ADT
22、IDE 集成開(kāi)發(fā)環(huán)境,它有使用方便、接口豐富、擴(kuò)充性好和實(shí)驗(yàn)豐富等特點(diǎn)。JXARM9-2410 教學(xué)系統(tǒng)采用統(tǒng)一的豪華實(shí)驗(yàn)箱包裝,除 ADT1000 仿真器外,所有配件均放置于實(shí)驗(yàn)箱之內(nèi),所包含配件有:JXARM9-2410-3 主板一塊9(內(nèi)置簡(jiǎn)易 JTAG 仿真器) ;ADT1000 仿真器一套(為可選配置) ;320 X 240 256 色彩色 LCD 顯示器一塊(帶觸摸屏) ;4 X 4 鍵盤(pán)一套;USB 連接電纜一條;PC 并口延長(zhǎng)電纜一條;RS-232 串口通訊線一條;直連網(wǎng)線一根;軟件光盤(pán)一淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文) 第 9 頁(yè) 共31 頁(yè)張
23、;實(shí)驗(yàn)指導(dǎo)書(shū)一本;GPRS 天線一根;GPS 天線一根。JXARM9-2410 嵌入式教學(xué)實(shí)驗(yàn)平臺(tái)如圖所示:圖 3.2 JXARM9-2410 嵌入式教學(xué)試驗(yàn)平臺(tái)3. 2 軟件開(kāi)發(fā)平臺(tái)軟件開(kāi)發(fā)平臺(tái)介紹介紹3. 2. 1 嵌入式操作系統(tǒng)雖然嵌入式控制器的應(yīng)用程序完全可以在裸機(jī)上運(yùn)行而脫離操作系統(tǒng),但為了使系統(tǒng)具有任務(wù)管理、定時(shí)器管理、存儲(chǔ)器管理、資源管理、事件管理、系統(tǒng)管理、消息管理、隊(duì)列管理和中斷處理的能力,提供多任務(wù)處理,更好的分配系統(tǒng)資源的功能,需要針對(duì)自己的硬件平臺(tái)和實(shí)際應(yīng)用選擇適當(dāng)?shù)那度胧讲僮飨到y(tǒng)(Embedded Operating System) 。目前常見(jiàn)的 EOS 產(chǎn)品包括有:
24、Vxwork、WindowsCE、C/OS-等等,他們各具特點(diǎn),也各自有一些不足之處。隨著 EOS 的發(fā)展,Linux 越來(lái)越多地引起了人們的重視。將 Linux 用于嵌入式系統(tǒng)有著眾多的優(yōu)勢(shì),具體體現(xiàn)在以下方面:1Linux 的源代碼是開(kāi)放的,任何人都可以獲取并修改,用之開(kāi)發(fā)自己的產(chǎn)品,甚至可以從別人開(kāi)發(fā)的基礎(chǔ)上二次開(kāi)發(fā)。Linux 可以隨意地配置,不需要任何的許可證,源代碼可以免費(fèi)得到。這使得采用 Linux 作為操作系統(tǒng)不會(huì)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文) 第 10 頁(yè) 共31頁(yè)遇到任何關(guān)于版權(quán)的糾紛。這些都會(huì)節(jié)省大量的開(kāi)發(fā)費(fèi)用。2Linux 是可以定制的
25、,可以根據(jù)需要將內(nèi)核裁減到很小。3Linux 和多數(shù) Unix 系統(tǒng)兼容,應(yīng)用程序的開(kāi)發(fā)和移植相當(dāng)容易。Linux是一個(gè)和 Unix 相似、以內(nèi)核為基礎(chǔ)的、具有完全的內(nèi)存訪問(wèn)控制,支持大量硬件(包括 X86,Alpha、ARM 和 Motorola 等現(xiàn)有的大部分芯片)等特性的一種通用操作系統(tǒng)。4Linux 具有良好的可移植性,人們已成功使 Linux 運(yùn)行于數(shù)百種硬件平臺(tái)之上。Linux 采用一個(gè)統(tǒng)一的框架對(duì)硬件進(jìn)行管理,從一個(gè)硬件平臺(tái)到另一個(gè)硬件平臺(tái)的改動(dòng)與上層應(yīng)用無(wú)關(guān)。5Linux 本身內(nèi)置網(wǎng)絡(luò)支持,提供了強(qiáng)大的網(wǎng)絡(luò)功能。雖然 Linux 并非專(zhuān)門(mén)為實(shí)時(shí)性應(yīng)用而設(shè)計(jì),但在一些對(duì)實(shí)時(shí)性要求
26、不是特別高的場(chǎng)合,Linux 不失為一個(gè)明智的選擇。本系統(tǒng)主要考慮到 Linux 的網(wǎng)絡(luò)功能、可靠性、穩(wěn)定性、源代碼公開(kāi)等優(yōu)點(diǎn),并且采用的 ARM 芯片AT91RM9200 的 MMU(內(nèi)存管理單元)支持 Linux 操作系統(tǒng),所以傾向選擇Linux 操作系統(tǒng)。3. 2. 2 嵌入式操作系統(tǒng)的移植在 PC 機(jī)的 Linux 環(huán)境下完成的嵌入式系統(tǒng)存儲(chǔ)空間往往很有限,需要把Linux 系統(tǒng)根據(jù)實(shí)際應(yīng)用需求進(jìn)行裁剪。對(duì) L inux 進(jìn)行裁減需要對(duì) L inux 系統(tǒng)有一定的了解,如啟動(dòng)過(guò)程、文件系統(tǒng)、目錄結(jié)構(gòu)、系統(tǒng)工具文件等14。1Linux內(nèi)核移植:在主機(jī)的RedHat Linux操作系統(tǒng)下安
27、裝Linux發(fā)行包以及交叉編譯器arm-linux-gcc。然后對(duì)Linux進(jìn)行配置(make menuconfig)并選擇適合本系統(tǒng)的相關(guān)配置,配置完成后進(jìn)行編譯生成Linux映像文件zImage,然后通過(guò)u-boot的tftp命令將該文件下載到目標(biāo)板并執(zhí)行。Linux內(nèi)核開(kāi)發(fā)的流程如圖所示:宿主機(jī) 目標(biāo)機(jī)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文) 第 11 頁(yè) 共31頁(yè)安裝 Linux安裝交叉編譯器配置 Linux編譯生成映像文件啟動(dòng) u-boot下載 Linux映像文件運(yùn)行 Linux圖 3.3 JXARM9-2410 系統(tǒng)內(nèi)核開(kāi)發(fā)2Linux 內(nèi)核的配置、裁剪和編
28、譯:Linux 安裝環(huán)境正確以后,就可以開(kāi)始編譯內(nèi)核,輸入命令:$cd /home/cvtech/jx2410/linux $make menuconfig顯示如圖所示:圖 3.4 內(nèi)核編譯過(guò)程圖啟動(dòng)菜單配置工具后,選擇 Load an Alternate Configuration File 選項(xiàng),然后確認(rèn)選擇到 Select,鍵入回車(chē)鍵,該選項(xiàng)將載入加載配置文件 config-jx2410 頁(yè)面,界面如圖所示:淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文) 第 12 頁(yè) 共31頁(yè)圖 3.5 內(nèi)核編譯過(guò)程圖Enter 鍵進(jìn)入,并輸入 config-jx2410,然后保存,如
29、圖所示:圖 3.6 內(nèi)核編譯過(guò)程圖接下來(lái)建立依賴(lài)關(guān)系并進(jìn)行編譯:$make dep$make zImage此處通過(guò) make zImage 進(jìn)行編譯,在編譯過(guò)程中將生成的核心進(jìn)行了壓縮,并加入了一段解壓的啟動(dòng)代碼。生成的 linux 映像文件 zImage 保存在相應(yīng)的目錄下。編譯成功后的 Linux 核心為/ home/ jx2410/ arch/ arm/zImage。通過(guò)jx2410 的 u - boot 將核心下載到 SDRAM。先將生成的 zImage 復(fù)制到/ tftpboot 淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文) 第 13 頁(yè) 共31頁(yè)目錄下。然后啟動(dòng)
30、 u boot,并在 u boot 并使用 tftp 下載。$cp / home/ jx2410/ arch/ arm/ boot/ zImage / tftpboot最后生成文件系統(tǒng),內(nèi)核啟動(dòng)過(guò)程將加載 RAMDISK 文件系統(tǒng),因此需要先將/ tftpboot/ ramdisk. gz 下載到 SDRAM,然后才能運(yùn)行內(nèi)核。使用如下代碼進(jìn)行 RAMDISK 文件系統(tǒng)的制作:$cd / home/ jx2410/ root/$mkdir rd$gunzip ramdisk. gz在 home/ jx2410/ root/ 目錄下會(huì)生成 ramdisk ,ramdisk 為解開(kāi)后的 Linux
31、的文件系統(tǒng)映像文件。在將 ramdisk 文件系統(tǒng)映像文件 mount 到新建目錄 rd 中:$mount o loop ramdisk rd/3. 2. 3 編譯環(huán)境的建立本設(shè)計(jì)的軟件程序開(kāi)發(fā)平臺(tái)分為程序編輯平臺(tái)和程序編譯平臺(tái)。程序編輯工作是在 Linux 下的 vi 編輯器中進(jìn)行的。程序用 C 語(yǔ)言編寫(xiě),存儲(chǔ)為標(biāo)準(zhǔn)的 C文件或頭文件。編輯好的程序經(jīng)過(guò)編譯、鏈接等生成可執(zhí)行的代碼。程序的編譯工作在 Linux 環(huán)境下 gcc 編譯器下進(jìn)行了,因?yàn)榫幾g工具(交叉編譯器)只能在 Linux 下運(yùn)行,而且這里牽扯到了一個(gè)交叉編譯的概念。交叉編譯就是在一個(gè)平臺(tái)上生成可以在另一個(gè)平臺(tái)上執(zhí)行的代碼。這里
32、的平臺(tái)包含兩個(gè)概念:體系結(jié)構(gòu)和操作系統(tǒng)。同一個(gè)體系結(jié)構(gòu)可以運(yùn)行不同的操作系統(tǒng);同樣,同一個(gè)操作系統(tǒng)也可以在不同的體系結(jié)構(gòu)上運(yùn)行。在本文涉及到的情況下,是在 PC機(jī)的平臺(tái)上(體系結(jié)構(gòu)是 X86,操作系統(tǒng)是標(biāo)準(zhǔn) Linux 比如 Redhat9)生成能在ARM9 控制器平臺(tái)上(體系結(jié)構(gòu)是 S3C2410X 處理器,操作系統(tǒng)是裁減過(guò)的Linux)運(yùn)行的可執(zhí)行代碼。這樣做的原因是 ARM9 控制器上的資源畢竟很有限,無(wú)法安裝使用相應(yīng)的編譯工具,只能借助 PC 機(jī)來(lái)完成。由于本設(shè)計(jì)的目標(biāo)機(jī)采用JXARM9-2410硬件系統(tǒng),編譯環(huán)境的建立既交叉編譯器的建立有自帶的資源。面幾個(gè)基本操作步驟:在宿主機(jī)端,插
33、入JXARM9-2410光盤(pán)到光驅(qū)中,在Linux下執(zhí)行: $mount /dev/cdrom /mnt 若系統(tǒng)不識(shí)別/dev/cdrom的話,使用如下命令,假設(shè)CDROM為第二個(gè)IDE淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文) 第 14 頁(yè) 共31頁(yè)口的主驅(qū),即為/dev/hdc,則: $mount t iso9660 /dev/hdc /mnt 然后讀取光盤(pán)內(nèi)容并安裝: $cd /mnt $cd linux 然后執(zhí)行腳本文件linuxinstall,該程序?qū)⒆詣?dòng)安裝編譯器和Linux源代碼,在安裝之前請(qǐng)確保已經(jīng)建立cvtech用戶名,并保證以root登陸。 $./li
34、nuxinstall 得到編譯結(jié)果,在/tftpboot/目錄下將產(chǎn)生 zImage 文件,該文件為 Linux 映像,然后通過(guò) bootloader 下載到 JXARM9-2410 中運(yùn)行。3. 3 軟件結(jié)構(gòu)軟件結(jié)構(gòu)與開(kāi)發(fā)流程與開(kāi)發(fā)流程本設(shè)計(jì)在分析了控制器的軟件環(huán)境和功能需求后,采用了一種縱向分層和橫向分塊的嵌入式系統(tǒng)軟件結(jié)構(gòu),將分層結(jié)構(gòu)和模塊化結(jié)構(gòu)的優(yōu)點(diǎn)相結(jié)合,使控制程序具備可重用性、可繼承性和易維護(hù)性,并保證上層軟件的設(shè)備無(wú)關(guān)性。分層結(jié)構(gòu)和模塊化結(jié)構(gòu)各具優(yōu)點(diǎn)。分層結(jié)構(gòu)采用的是層次化的組織方法,每一層向上一層提供服務(wù),并利用下一層的服務(wù)。分層結(jié)構(gòu)常常應(yīng)用在網(wǎng)絡(luò)通訊中,它具有如下特點(diǎn):支持基
35、于抽象程度遞增的系統(tǒng)設(shè)計(jì),可以把一個(gè)復(fù)雜的系統(tǒng)按遞增的步驟分解開(kāi)。躍層影響小,每一層只和相鄰的層打交道,因此功能的改變至多影響上下層。支持復(fù)用,只要提供的服務(wù)接口定義不變,同一層的不同實(shí)現(xiàn),可以交換使用,對(duì)整個(gè)系統(tǒng)并沒(méi)有影響。而模塊化是指按適當(dāng)?shù)脑瓌t把一個(gè)情況復(fù)雜、規(guī)模較大的程序系統(tǒng)劃分為一個(gè)個(gè)較小的、功能相關(guān)而又相對(duì)獨(dú)立的模塊,這些模塊是具有獨(dú)立功能的程序,可以單獨(dú)設(shè)計(jì)、調(diào)試與管理。模塊化程序設(shè)計(jì)通常按功能劃分法把模塊組成樹(shù)狀結(jié)構(gòu),層次清楚,各模塊大小適中,模塊間接口簡(jiǎn)單和統(tǒng)一。模塊化程序結(jié)構(gòu)的優(yōu)點(diǎn)是:將復(fù)雜系統(tǒng)化大為小,化繁為簡(jiǎn)?;搓幑W(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論
36、文) 第 15 頁(yè) 共31頁(yè)使系統(tǒng)便于維護(hù)。提高系統(tǒng)的設(shè)計(jì)效率,可多人并行開(kāi)發(fā)。嵌入式軟件的開(kāi)發(fā)流程與通用軟件的開(kāi)發(fā)流程大同小異,整個(gè)開(kāi)發(fā)流程有需求分析階段、設(shè)計(jì)階段、生成代碼階段和固化階段。軟件的編寫(xiě)和開(kāi)發(fā)調(diào)試的主要流程為:編寫(xiě)、交叉編譯、交叉鏈接、重定位、下載和調(diào)試12,如圖所示:交叉編譯交叉鏈接代碼編程交叉調(diào)試C/匯編源程序obj 文件obj 文件交叉函數(shù)庫(kù)目標(biāo)機(jī)圖 3.7 系統(tǒng)軟件的開(kāi)發(fā)步驟4 軟件設(shè)計(jì)與實(shí)現(xiàn)軟件設(shè)計(jì)與實(shí)現(xiàn)4. 1 Socket 編程編程Linux 是和網(wǎng)絡(luò)密切相關(guān)的,其自身也常常被用來(lái)支持各種應(yīng)用的網(wǎng)絡(luò)需求。Socket 在所有網(wǎng)絡(luò)操作系統(tǒng)和網(wǎng)絡(luò)應(yīng)用程序中都是必不可少
37、的,它是網(wǎng)絡(luò)通信中應(yīng)用進(jìn)程和網(wǎng)絡(luò)協(xié)議之間的接口。Socket 接口是為方便開(kāi)發(fā)人員進(jìn)行TCP / IP 程序開(kāi)發(fā),而為 TCP / IP 協(xié)議所開(kāi)發(fā)的一組應(yīng)用程序接口。當(dāng)服務(wù)器和應(yīng)用程序需要和其他進(jìn)程通信時(shí)就需創(chuàng)建套接口。套接口地址的格式是一個(gè)IP 地址和一個(gè)端口號(hào),套接口是進(jìn)程間通信的端點(diǎn),每個(gè)套接口的名字都是惟一的,所以依靠套接口來(lái)確定整個(gè) Internet 域中的一個(gè)網(wǎng)絡(luò)進(jìn)程。TCP 和 UDP是傳輸層協(xié)議,TCP 是保證傳輸?shù)拿嫦蜻B接的協(xié)議,而 UDP 是無(wú)連接協(xié)議,不能保證消息傳送到目的地15。套接口 socket 包括數(shù)據(jù)流套接口和數(shù)據(jù)報(bào)套接口兩種類(lèi)型。數(shù)據(jù)流套接口淮陰工學(xué)院畢業(yè)設(shè)
38、計(jì)說(shuō)明書(shū)(論文)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文) 第 16 頁(yè) 共31頁(yè)是可靠的面向連接的通信數(shù)據(jù)流,如果在套接口中以“1,2”的順序放入兩個(gè)數(shù)據(jù)它們?cè)诹钜欢艘矔?huì)以“1,2”的順序到達(dá),他們也可以被認(rèn)為是無(wú)錯(cuò)誤的傳輸。數(shù)據(jù)報(bào)套接口使用 UDP 來(lái)傳送數(shù)據(jù)包,所以數(shù)據(jù)報(bào)的順序是沒(méi)有障礙的,數(shù)據(jù)報(bào)是按照一種應(yīng)答的方式進(jìn)行數(shù)據(jù)傳輸?shù)摹?. 1. 1 Socket 流程圖設(shè)計(jì)1. 數(shù)據(jù)流通信:Socket 數(shù)據(jù)流編程中,首先在服務(wù)器端使用 socket()建立一個(gè)通信的端點(diǎn),再用 bind()命令把一個(gè)地址綁定到這個(gè)端點(diǎn)上,然后,服務(wù)器端使用 listen()偵聽(tīng)連接請(qǐng)求,當(dāng)遠(yuǎn)端的客戶機(jī)試圖使用 co
39、nnect()連接 listen()正在偵聽(tīng)的端口時(shí),連接將會(huì)在隊(duì)列中等待,直到使用 accept()處理它,在 accept()處理了連接請(qǐng)求后,將會(huì)生成一個(gè)新的描述這個(gè)連接端口的套接字來(lái)收發(fā)數(shù)據(jù)。如果 listen()一直沒(méi)有偵聽(tīng)到連接請(qǐng)求,服務(wù)器任務(wù)就會(huì)在 accept()處阻塞,一直到有連接請(qǐng)求到來(lái)。對(duì)于客戶機(jī)任務(wù)來(lái)說(shuō),它也需要先用 socket()建立一個(gè)通信端口,但是它不必用 bind()命令把一個(gè)地址綁定到這個(gè)端點(diǎn)上,而是直接使用 connect()向指定的服務(wù)器發(fā)出連接請(qǐng)求,如果連接請(qǐng)求被接收,下一步就可以進(jìn)行數(shù)據(jù)流通信了。整個(gè)數(shù)據(jù)流通信的流程如圖所示:淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)
40、(論文)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文) 第 17 頁(yè) 共31頁(yè)Server socketbind()listen()阻塞,等待客戶連接請(qǐng)求accept()recv()處理服務(wù)請(qǐng)求send()close()Client socketclose()recv()send()connect()服務(wù)請(qǐng)求服務(wù)響應(yīng)連接建立圖 4.1 TCP socket 的開(kāi)發(fā)過(guò)程2數(shù)據(jù)報(bào)通信:對(duì)于數(shù)據(jù)報(bào)通信的服務(wù)器端來(lái)說(shuō),它不必再在一個(gè)端口上偵聽(tīng)以等待建立連接,而只需生成一個(gè)端口描述符,而且把這個(gè)端口描述符綁定到本地地址上就可以了,對(duì)于客戶端也是一樣的。這樣整個(gè)通信過(guò)程就簡(jiǎn)潔多了。需要說(shuō)明的是,UDP 的客戶端可以使用
41、 connect(),但是這時(shí)使用 connect()并不真正產(chǎn)生連接,而只是填寫(xiě)對(duì)端套接字的有關(guān)信息。使用 connect()的好處是,隨后的程序通信中不必每次指定地址,可以使用 recv()和 send()等進(jìn)行通信。否則,就應(yīng)該使用 recvfrom()、sndto()等實(shí)現(xiàn)函數(shù)通信,而每次都指定對(duì)端地址信息。整個(gè)數(shù)據(jù)報(bào)通信的流程如圖所示:淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文) 第 18 頁(yè) 共31頁(yè)Server socketbind()recvfrom()阻塞,等待客戶連接請(qǐng)求accept()sendto()close()Client socketclose(
42、)recvfrom()sendto()bind()應(yīng)答數(shù)據(jù)請(qǐng)求數(shù)據(jù)圖 4.2 UDP Socket 的開(kāi)發(fā)過(guò)程本設(shè)計(jì)中主要選擇 TCP 協(xié)議,運(yùn)用流式 Socket 編程技術(shù)實(shí)現(xiàn)服務(wù)器端和客戶端之間的通信。服務(wù)器端主要用到的函數(shù)有:socket()、bind ()、listen()、accept()等。用 gcc 交叉編譯工具編譯服務(wù)器端程序 Server. c 生成可執(zhí)行程序Server??蛻舳酥饕玫降暮瘮?shù)有 Socket()、connect()。用 gcc 編譯客戶端程序Client.c 生成可執(zhí)行程序 Client。再將可執(zhí)行應(yīng)用程序加入到 Cramfs 文件系統(tǒng)里,下載到 JXARM
43、9-2410 教學(xué)試驗(yàn)箱中。4. 1. 2 Socket 詳細(xì)編程網(wǎng)絡(luò)的 Socket 數(shù)據(jù)傳輸是一種特殊的 I/O,Socket 也是一種文件描述符。Socket 也具有一個(gè)類(lèi)似于打開(kāi)文件的函數(shù)調(diào)用 Socket(),該函數(shù)返回一個(gè)整型的Socket 描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^(guò)該 Socket 實(shí)現(xiàn)的。1. Socket 的建立:為了建立 Socket,程序可以調(diào)用 Socket 函數(shù),該函數(shù)返回一個(gè)類(lèi)似于文件描述符的句柄。socket 函數(shù)原型為:int socket(int domain, int type, int protocol);淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文
44、)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文) 第 19 頁(yè) 共31頁(yè)domain 指明所使用的協(xié)議族為 PF_INET,表示互聯(lián)網(wǎng)協(xié)議族(TCP/IP 協(xié)議族);type 參數(shù)指定 socket 的類(lèi)型:SOCK_STREAM 或SOCK_DGRAM,Socket 接口還定義了原始 Socket(SOCK_RAW),允許程序使用低層協(xié)議;protocol 賦值0。Socket()調(diào)用返回一個(gè)整型 socket 描述符,在后面的調(diào)用中使用它。Socket 描述符是一個(gè)指向內(nèi)部數(shù)據(jù)結(jié)構(gòu)的指針,它指向描述符表入口。調(diào)用 Socket 函數(shù)時(shí),socket 執(zhí)行體將建立一個(gè) Socket,實(shí)際上“建立一個(gè)Soc
45、ket”意味著為一個(gè) Socket 數(shù)據(jù)結(jié)構(gòu)分配存儲(chǔ)空間。Socket 執(zhí)行體來(lái)管理描述符表。兩個(gè)網(wǎng)絡(luò)程序之間的一個(gè)網(wǎng)絡(luò)連接包括五種信息:通信協(xié)議、本地協(xié)議地址、本地主機(jī)端口、遠(yuǎn)端主機(jī)地址和遠(yuǎn)端協(xié)議端口。Socket 數(shù)據(jù)結(jié)構(gòu)中包含這五種信息。2. Socket 的配置:通過(guò) socket 調(diào)用返回一個(gè) socket 描述符后,在使用 socket 進(jìn)行網(wǎng)絡(luò)傳輸以前,必須配置該 socket。面向連接的 socket 客戶端通過(guò)調(diào)用 Connect 函數(shù)在socket 數(shù)據(jù)結(jié)構(gòu)中保存本地和遠(yuǎn)端信息。無(wú)連接 socket 的客戶端和服務(wù)端以及面向連接 socket 的服務(wù)端通過(guò)調(diào)用 bind 函
46、數(shù)來(lái)配置本地信息。Bind 函數(shù)將 socket 與本機(jī)上的一個(gè)端口相關(guān)聯(lián),隨后在該端口監(jiān)聽(tīng)服務(wù)請(qǐng)求。Bind 函數(shù)原型為:int bind(int sockfd,struct sockaddr *my_addr,int addrlen);Sockfd 是調(diào)用 socket 函數(shù)返回的 socket 描述符,my_addr 是一個(gè)指向包含有本機(jī) IP 地址及端口號(hào)等信息的 sockaddr 類(lèi)型的指針;addrlen 設(shè)置為sizeof(struct sockaddr)。struct sockaddr 結(jié)構(gòu)類(lèi)型是用來(lái)保存 socket 信息的:struct sockaddr unsigned
47、short sa_family; /* 地址族, AF_xxx */char sa_data14; /* 14 字節(jié)的協(xié)議地址 */;淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文) 第 20 頁(yè) 共31頁(yè)sa_family 賦值為 AF_INET,代表 Internet(TCP/IP)地址族;sa_data 則包含該 socket 的 IP 地址和端口號(hào)。另外還有一種結(jié)構(gòu)類(lèi)型:struct sockaddr_in short int sin_family; /* 地址族 */unsigned short int sin_port; /* 端口號(hào) */struct in_add
48、r sin_addr; /* IP 地址 */unsigned char sin_zero8; /* 填充 0 以保持與 struct sockaddr 同樣大小 */;這個(gè)結(jié)構(gòu)更方便使用。sin_zero 用來(lái)將 sockaddr_in 結(jié)構(gòu)填充到structsockaddr 同樣的長(zhǎng)度,可以用 bzero()或 memset()函數(shù)將其置為零。指sockaddr_in 的指針和指向 sockaddr 的指針可以相互轉(zhuǎn)換,一個(gè)函數(shù)所需參數(shù)類(lèi)型是 sockaddr 時(shí),就在函數(shù)調(diào)用的時(shí)候?qū)⒁粋€(gè)指向 sockaddr_in 的指針轉(zhuǎn)換為指向 sockaddr 的指針;或者相反。使用 bind 函
49、數(shù)時(shí),用下面的賦值實(shí)現(xiàn)自動(dòng)獲得本機(jī) IP 地址和隨機(jī)獲取一個(gè)沒(méi)有被占用的端口號(hào):my_addr.sin_port = 0; /* 系統(tǒng)隨機(jī)選擇一個(gè)未被使用的端口號(hào) */my_addr.sin_addr.s_addr = INADDR_ANY; /* 填入本機(jī) IP 地址 */通過(guò)將 my_addr.sin_port 置為 0,函數(shù)會(huì)自動(dòng)選擇一個(gè)未占用的端口來(lái)使用。同樣,通過(guò)將 my_addr.sin_addr.s_addr 置為 INADDR_ANY,系統(tǒng)會(huì)自動(dòng)填入本機(jī) IP 地址。在使用 bind 函數(shù)時(shí),需要將 sin_port 和 sin_addr 轉(zhuǎn)換成為網(wǎng)絡(luò)字節(jié)優(yōu)先順序;而 sin_
50、addr 則不需要轉(zhuǎn)換。計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)有兩種字節(jié)優(yōu)先順序:高位字節(jié)優(yōu)先和低位字節(jié)優(yōu)先。Internet 上數(shù)據(jù)以高位字節(jié)優(yōu)先順序在網(wǎng)絡(luò)上傳輸,所以對(duì)于在內(nèi)部是以低位字節(jié)優(yōu)先方式存儲(chǔ)數(shù)據(jù)的機(jī)器,在 Internet 上傳輸數(shù)據(jù)時(shí)就需要進(jìn)行轉(zhuǎn)換,否則就會(huì)出現(xiàn)數(shù)據(jù)不一致。下面是幾個(gè)字節(jié)順序轉(zhuǎn)換函數(shù):htonl():把 32 位值從主機(jī)字節(jié)序轉(zhuǎn)換成網(wǎng)絡(luò)字節(jié)序htons():把 16 位值從主機(jī)字節(jié)序轉(zhuǎn)換成網(wǎng)絡(luò)字節(jié)序淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文) 第 21 頁(yè) 共31頁(yè)ntohl():把 32 位值從網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)換成主機(jī)字節(jié)序ntohs():把 16 位值從網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)
51、換成主機(jī)字節(jié)序Bind()函數(shù)在成功被調(diào)用時(shí)返回 0;出現(xiàn)錯(cuò)誤時(shí)返回-1,并將 errno 置為相應(yīng)的錯(cuò)誤號(hào)。在調(diào)用 bind 函數(shù)時(shí)一般不要將端口號(hào)置為小于 1024 的值,因?yàn)? 到 1024 是保留端口號(hào),可以選擇大于 1024 中的任何一個(gè)沒(méi)有被占用的端口號(hào)。3. 建立連接:面向連接的客戶程序使用 Connect 函數(shù)來(lái)配置 socket,并與遠(yuǎn)端服務(wù)器建立一個(gè) TCP 連接,其函數(shù)原型為:int connect(int sockfd, struct sockaddr *serv_addr,int addrlen); Sockfd 是 socket 函數(shù)返回的 socket 描述符;s
52、erv_addr 是包含遠(yuǎn)端主機(jī) IP地址和端口號(hào)的指針;addrlen 是遠(yuǎn)端地質(zhì)結(jié)構(gòu)的長(zhǎng)度。Connect 函數(shù)在出現(xiàn)錯(cuò)誤時(shí)返回-1,并且設(shè)置 errno 為相應(yīng)的錯(cuò)誤碼。進(jìn)行客戶端程序設(shè)計(jì)無(wú)須調(diào)用bind(),因?yàn)檫@種情況下只需知道目的機(jī)器的 IP 地址,而客戶通過(guò)哪個(gè)端口與服務(wù)器建立連接并不需要關(guān)心,socket 執(zhí)行體為程序自動(dòng)選擇一個(gè)未被占用的端口,并通知程序數(shù)據(jù)什么時(shí)候到達(dá)端口。Connect 函數(shù)啟動(dòng)和遠(yuǎn)端主機(jī)的直接連接。只有面向連接的客戶程序使用socket 時(shí)才需要將此 socket 與遠(yuǎn)端主機(jī)相連。無(wú)連接協(xié)議從不建立直接連接。面向連接的服務(wù)器也從不啟動(dòng)一個(gè)連接,它只是被動(dòng)
53、的在協(xié)議端口監(jiān)聽(tīng)客戶的請(qǐng)求。Listen 函數(shù)使 socket 處于被動(dòng)的監(jiān)聽(tīng)模式,并為該 socket 建立一個(gè)輸入數(shù)據(jù)隊(duì)列,將到達(dá)的服務(wù)請(qǐng)求保存在此隊(duì)列中,直到程序處理它們。int listen(int sockfd, int backlog);Sockfd 是 Socket 系統(tǒng)調(diào)用返回的 socket 描述符;backlog 指定在請(qǐng)求隊(duì)列中允許的最大請(qǐng)求數(shù),進(jìn)入的連接請(qǐng)求將在隊(duì)列中等待 accept()處理它們。backlog 對(duì)隊(duì)列中等待服務(wù)的請(qǐng)求的數(shù)目進(jìn)行了限制,系統(tǒng)缺省值為 20。一個(gè)服務(wù)請(qǐng)求到來(lái)時(shí),輸入隊(duì)列已滿,該 socket 將拒絕連接請(qǐng)求,客戶將收到一個(gè)出錯(cuò)信息。當(dāng)出現(xiàn)
54、錯(cuò)誤時(shí) listen 函數(shù)返回-1,并置相應(yīng)的 errno 錯(cuò)誤碼。淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文) 第 22 頁(yè) 共31頁(yè)accept()函數(shù)讓服務(wù)器接收客戶的連接請(qǐng)求。在建立好輸入隊(duì)列后,服務(wù)器就調(diào)用 accept 函數(shù),然后睡眠并等待客戶的連接請(qǐng)求。int accept(int sockfd, void *addr, int *addrlen);sockfd 是被監(jiān)聽(tīng)的 socket 描述符,addr 是一個(gè)指向 sockaddr_in 變量的指針,該變量用來(lái)存放提出連接請(qǐng)求服務(wù)的主機(jī)的信息;addrten 為一個(gè)指向值為sizeof(struct soc
55、kaddr_in)的整型指針變量。出現(xiàn)錯(cuò)誤時(shí) accept 函數(shù)返回-1 并置相應(yīng)的 errno 值。首先,當(dāng) accept 函數(shù)監(jiān)視的 socket 收到連接請(qǐng)求時(shí),socket 執(zhí)行體將建立一個(gè)新的 socket,執(zhí)行體將這個(gè)新 socket 和請(qǐng)求連接進(jìn)程的地址聯(lián)系起來(lái),收到服務(wù)請(qǐng)求的初始 socket 仍可以繼續(xù)在以前的 socket 上監(jiān)聽(tīng),同時(shí)可以在新的socket 描述符上進(jìn)行數(shù)據(jù)傳輸操作。4. 數(shù)據(jù)傳輸:Send()和 recv()這兩個(gè)函數(shù)用于面向連接的 socket 上進(jìn)行數(shù)據(jù)傳輸。Send()函數(shù)原型為:int send(int sockfd, const void *m
56、sg, int len, int flags);Sockfd 是用來(lái)傳輸數(shù)據(jù)的 socket 描述符;msg 是一個(gè)指向要發(fā)送數(shù)據(jù)的指針;Len 是以字節(jié)為單位的數(shù)據(jù)的長(zhǎng)度;flags 一般情況下置為 0。Send()函數(shù)返回實(shí)際上發(fā)送出的字節(jié)數(shù)。在程序中將 send()的返回值與欲發(fā)送的字節(jié)數(shù)進(jìn)行比較。當(dāng) send()返回值與 len 不匹配時(shí),應(yīng)該對(duì)這種情況進(jìn)行處理。char *msg = Hello!;int len, bytes_sent; len = strlen(msg);bytes_sent = send(sockfd, msg,len,0); recv()函數(shù)原型為:int r
57、ecv(int sockfd,void *buf,int len,unsigned int flags);淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文) 第 23 頁(yè) 共31頁(yè)Sockfd 是接受數(shù)據(jù)的 socket 描述符;buf 是存放接收數(shù)據(jù)的緩沖區(qū);len 是緩沖的長(zhǎng)度。Flags 也被置為 0。Recv()返回實(shí)際上接收的字節(jié)數(shù),當(dāng)出現(xiàn)錯(cuò)誤時(shí),返回-1 并置相應(yīng)的 errno 值。Sendto()和 recvfrom()用于在無(wú)連接的數(shù)據(jù)報(bào) socket 方式下進(jìn)行數(shù)據(jù)傳輸。由于本地 socket 并沒(méi)有與遠(yuǎn)端機(jī)器建立連接,所以在發(fā)送數(shù)據(jù)時(shí)指明了目的地址。 send
58、to()函數(shù)原型為:int sendto(int sockfd, const void *msg,int len,unsigned int flags,const struct sockaddr *to, int tolen);該函數(shù)比 send()函數(shù)多了兩個(gè)參數(shù),to 表示目地機(jī)的 IP 地址和端口號(hào)信息,而 tolen 被賦值為 sizeof (struct sockaddr)。Sendto 函數(shù)也返回實(shí)際發(fā)送的數(shù)據(jù)字節(jié)長(zhǎng)度或在出現(xiàn)發(fā)送錯(cuò)誤時(shí)返回-1。Recvfrom()函數(shù)原型為:int recvfrom(int sockfd,void *buf,int len,unsigned in
59、t flags,struct sockaddr *from,int *fromlen);from 是一個(gè) struct sockaddr 類(lèi)型的變量,該變量保存源機(jī)的 IP 地址及端口號(hào)。Fromlen 設(shè)置為 sizeof (struct sockaddr)。當(dāng) recvfrom()返回時(shí),fromlen 包含實(shí)際存入 from 中的數(shù)據(jù)字節(jié)數(shù)。Recvfrom()函數(shù)返回接收到的字節(jié)數(shù),當(dāng)出現(xiàn)錯(cuò)誤時(shí)返回-1,并置相應(yīng)的 errno。socket 調(diào)用了 connect()函數(shù)時(shí),利用 send()和 recv()進(jìn)行數(shù)據(jù)傳輸,但該socket 仍然是數(shù)據(jù)報(bào) socket,并且利用傳輸層的
60、UDP 服務(wù)。但在發(fā)送或接收數(shù)據(jù)報(bào)時(shí),內(nèi)核會(huì)自動(dòng)為之加上目地和源地址信息。5. 結(jié)束傳輸:當(dāng)所有的數(shù)據(jù)操作結(jié)束以后,調(diào)用 close()函數(shù)來(lái)釋放該 socket,從而停止在該 socket 上的任何數(shù)據(jù)操作:close(sockfd);也可以調(diào)用 shutdown()函數(shù)來(lái)關(guān)閉該 socket。該函數(shù)允許停止在某個(gè)方向上的數(shù)據(jù)傳輸,而一個(gè)方向上的數(shù)據(jù)傳輸繼續(xù)進(jìn)行。如關(guān)閉某 socket 的寫(xiě)操作而允許繼續(xù)在該 socket 上接受數(shù)據(jù),直至讀入所有數(shù)據(jù)。int shutdown(int sockfd,int how);淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文)淮陰工學(xué)院畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(論文) 第 24
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學(xué)生玩具創(chuàng)業(yè)計(jì)劃書(shū)
- “十三五”規(guī)劃重點(diǎn)-滴眼液項(xiàng)目建議書(shū)(立項(xiàng)報(bào)告)
- 沖壓模具加工合同范例
- 包裝設(shè)計(jì)版權(quán)轉(zhuǎn)讓合同范本
- 住宅樓開(kāi)發(fā)商合同范本
- 2025年度戶外活動(dòng)裝備租賃合同
- 2025年中國(guó)皮革工業(yè)專(zhuān)用設(shè)備制造行業(yè)市場(chǎng)深度研究及投資戰(zhàn)略規(guī)劃報(bào)告
- 2025年木制防火門(mén)防火窗行業(yè)深度研究分析報(bào)告
- 刑事律師合同范本
- 產(chǎn)品抵押 合同范本
- 開(kāi)工第一課安全教育記錄表
- 一氧化碳中毒與搶救知識(shí)考核試題與答案
- 部編版小學(xué)語(yǔ)文四年級(jí)下冊(cè)教師教學(xué)用書(shū)(教學(xué)參考)完整版
- 初中生物面團(tuán)發(fā)酵實(shí)驗(yàn)報(bào)告
- 工程項(xiàng)目總投資的構(gòu)成及估算
- 串通招投標(biāo)法律問(wèn)題研究
- 高原鐵路建設(shè)衛(wèi)生保障
- 顳下頜關(guān)節(jié)盤(pán)復(fù)位固定術(shù)后護(hù)理查房
- 新版藥品管理法培訓(xùn)完整版本課件
- 硝苯地平控釋片
- 合成聚氨酯原料及助劑生產(chǎn)項(xiàng)目
評(píng)論
0/150
提交評(píng)論