版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 學(xué)號(hào): 4110008032 </p><p> 泰山醫(yī)學(xué)院畢業(yè)設(shè)計(jì)(論文)</p><p> 題目: 基于ARM Cortex-M3的雙以太網(wǎng)口通信的實(shí)現(xiàn) </p><p> 2014年 6 月 10 日</p><p> 院(部)系信息工程學(xué)院</p><p> 所 學(xué) 專 業(yè)計(jì)
2、算機(jī)科學(xué)與技術(shù)</p><p> 年級(jí)、班級(jí)2010級(jí)本科1班</p><p> 完成人姓名</p><p> 指導(dǎo)教師姓名專業(yè)技術(shù)職稱副教授</p><p><b> 摘要</b></p><p> 隨著嵌入式系統(tǒng)技術(shù)的發(fā)展,嵌入式系統(tǒng)技術(shù)與以太網(wǎng)技術(shù)融合的也越來(lái)越緊密,雖然嵌入式系統(tǒng)的應(yīng)用
3、程序完全可以在ARM裸機(jī)上運(yùn)行,但是隨著測(cè)控設(shè)備功能的增強(qiáng),嵌入式系統(tǒng)所需完成的任務(wù)越來(lái)越復(fù)雜,需要管理的外設(shè)越來(lái)越多,傳統(tǒng)的軟件開(kāi)發(fā)模式已經(jīng)顯得力不從心。而采用嵌入式操作系統(tǒng)作為軟件開(kāi)發(fā)平臺(tái),就可以由操作系統(tǒng)來(lái)完成任務(wù)的管理和系統(tǒng)資源的分配,開(kāi)發(fā)工作的重點(diǎn)才能集中于實(shí)際應(yīng)用系統(tǒng)性能的提高。此外,在操作系統(tǒng)基礎(chǔ)上可實(shí)現(xiàn)統(tǒng)一規(guī)范的編程,使程序具有良好的可讀性和可移植性,并可提高開(kāi)發(fā)的效率。</p><p> AR
4、M Cortex-M3處理器結(jié)合了多種突破性技術(shù),令芯片供應(yīng)商提供超低費(fèi)用的芯片。該處理器還集成了許多緊耦合系統(tǒng)外設(shè),令系統(tǒng)能滿足下一代產(chǎn)品的控制需求。</p><p> 本論文是基于ARM Cortex-M3微處理器MB9F618和近來(lái)比較流行RT-Thread操作系統(tǒng)的雙以太網(wǎng)口通信的研制過(guò)程為主要內(nèi)容,闡述了其具體使用的技術(shù)和各模塊的實(shí)現(xiàn)方法,區(qū)別于一般的TCP/IP協(xié)議,本系統(tǒng)采用了LwIP的通信協(xié)議,
5、LwIP實(shí)現(xiàn)的重點(diǎn)是在保持TCP協(xié)議主要的功能的基礎(chǔ)上減少對(duì)RAM的占用,它只需要十幾KB的RAM和40K左右的ROM就可以運(yùn)行,這使LwIP協(xié)議棧適合在低端的嵌入式系統(tǒng)中使用。在以上的硬件和軟件的共同支持下,最終完成了雙以太網(wǎng)口之間通信的研究。</p><p> 關(guān)鍵詞: ARM Cortex-M3;RT-Thread;LwIP;雙以太網(wǎng)的通信</p><p><b> A
6、bstract</b></p><p> With the development of embedded systems technology,embedded system technology and the integration of Ethernet technology is also more closely,though embedded systems applications
7、can run on ARM bare metal , but with enhanced functionality and control devices , embedded systems needed to complete the task more complex, the need to manage more and more peripherals , traditional software development
8、 model has appeared to be inadequate . The focus on distribution development of embedded operating s</p><p> In addition, the operating system can be realized on the basis of a standardized programming, the
9、 program has good readability and portability , and improve development efficiency.</p><p> ARM Cortex-M3 processor combines multiple breakthrough technologies enable chip vendors to provide ultra-low cost
10、of the chip . The processor also integrates a number of tightly-coupled system peripherals , so that the control system can meet the needs of the next generation of products.</p><p> This thesis is based on
11、 the development process of dual Ethernet port communication ARM Cortex-M3 microprocessor MB9F618 and recently more popular RT-Thread operating system as the main content , technology and describes the implementati
12、on of each module of its specific use , the difference in general TCP / IP protocol , the system uses a communication protocol LwIP focus LwIP achieve is to reduce the occupancy of RAM on the basis of maintaining the ma
13、in features of the TCP protocol on , </p><p> Keywords : ARM Cortex-M3 ;RT-Thread ;LwIP ;dual Ethernet communication</p><p><b> 目錄</b></p><p><b> 前言1</b>
14、</p><p> 第一章 相關(guān)技術(shù)背景介紹3</p><p> 1. 嵌入式系統(tǒng)的定義3</p><p> 2. 嵌入式處理器分類與現(xiàn)狀4</p><p> 3. 嵌入式操作系統(tǒng)6</p><p> 4. 網(wǎng)絡(luò)協(xié)議棧6</p><p><b> 5. 本章小結(jié)
15、7</b></p><p> 第二章 系統(tǒng)硬件平臺(tái)8</p><p> 1. ARM Cortex-M3處理器8</p><p> 2. 系統(tǒng)任務(wù)要求9</p><p> 2.1 硬件方面9</p><p> 2.1 軟件方面9</p><p> 3. 開(kāi)發(fā)板M
16、B9F618簡(jiǎn)介9</p><p> 3.2 開(kāi)發(fā)板外觀9</p><p> 3.2 配置說(shuō)明10</p><p> 4. 本章小結(jié)11</p><p> 第三章 軟件的設(shè)計(jì)12</p><p> 1. 嵌入式操作系統(tǒng)的選擇12</p><p> 1.1 RT-Threa
17、d操作系統(tǒng)的簡(jiǎn)介1錯(cuò)誤!未定義書(shū)簽。</p><p> 1.2 虛擬文件系統(tǒng)13</p><p> 1.3 shell系統(tǒng)13</p><p> 1.4 圖形用戶界面13</p><p> 1.5 支持的平臺(tái)13</p><p> 1.6 RT-Thread的內(nèi)核對(duì)象模型14</p>
18、<p> 1.7 內(nèi)核對(duì)象管理工作模式14</p><p> 1.8 線程狀態(tài)15</p><p> 2. LwIP協(xié)議棧錯(cuò)誤!未定義書(shū)簽。</p><p> 2.1 LwIP協(xié)議棧簡(jiǎn)介16</p><p> 2.2 LwIP的以太網(wǎng)數(shù)據(jù)接收18</p><p> 3. LwIP協(xié)議棧
19、的初始化21</p><p> 4. MB9F618網(wǎng)口設(shè)置22</p><p> 5. 主要函數(shù)功能的簡(jiǎn)介25</p><p> 6. 本章小結(jié)25</p><p> 第四章 系統(tǒng)功能模塊調(diào)試27</p><p> 1. 程序燒寫(xiě)27</p><p> 2. 程序燒寫(xiě)后
20、27</p><p> 3. 雙網(wǎng)卡測(cè)試27</p><p> 4. 網(wǎng)口的通信29</p><p> 5. 本章小結(jié)31</p><p><b> 結(jié)論32</b></p><p><b> 參考文獻(xiàn)33</b></p><p>
21、;<b> 致謝34</b></p><p><b> 前言</b></p><p> 最近幾年,嵌入式系統(tǒng)產(chǎn)品日臻完善,并在全世界各行業(yè)得到廣泛應(yīng)用。嵌入式系統(tǒng)產(chǎn)品的研制和應(yīng)用已經(jīng)成為我國(guó)信息化帶動(dòng)工業(yè)化、工業(yè)化促進(jìn)信息化發(fā)展的新的國(guó)民經(jīng)濟(jì)增長(zhǎng)點(diǎn)。</p><p> 隨著信息化、智能化、網(wǎng)絡(luò)化的發(fā)展,嵌入式技術(shù)
22、將全面展開(kāi),現(xiàn)在嵌入式已經(jīng)成為通信和消費(fèi)類產(chǎn)品的共同發(fā)展方向??傮w來(lái)說(shuō),嵌入式系統(tǒng)分別在硬件和軟件方面獲得發(fā)展。嵌入式系統(tǒng)必將成為當(dāng)今IT界的又一焦點(diǎn),開(kāi)發(fā)自主知識(shí)產(chǎn)權(quán)的嵌入式處理器和嵌入式操作系統(tǒng),對(duì)于我們國(guó)家的民族IT產(chǎn)業(yè)來(lái)講具有十分重要的戰(zhàn)略意義。從國(guó)內(nèi)IT市場(chǎng)來(lái)看,嵌入式系統(tǒng)及其產(chǎn)品在由家電產(chǎn)品和Internet衍生出來(lái)的新型市場(chǎng)中占有主導(dǎo)地位和獨(dú)特份額。</p><p> 在消費(fèi)家電的智能化的今天,嵌
23、入式更顯重要。像我們平常見(jiàn)到的手機(jī)、PDA、電子字典、可視電話、VCD/DVD/MP3Player、數(shù)字相機(jī)(DC)、數(shù)字?jǐn)z像機(jī)(DV)、U-Disk、機(jī)頂盒(Set Top Box)、高清電視(HDTV)、游戲機(jī)、智能玩具、交換機(jī)、路由器、數(shù)控設(shè)備或儀表、汽車電子、家電控制系統(tǒng)、醫(yī)療儀器、航天航空設(shè)備等等,都是典型的嵌入式系統(tǒng)。據(jù)預(yù)測(cè),隨著Internet的迅速發(fā)展和廉價(jià)微處理器的出現(xiàn),嵌入式系統(tǒng)將在日常生活里形成更大的應(yīng)用領(lǐng)域。&l
24、t;/p><p> 新的微處理器層出不窮,嵌入式操作系統(tǒng)自身結(jié)構(gòu)的設(shè)計(jì)更加便于移植,能夠在短時(shí)間內(nèi)支持更多的微處理器。嵌入式系統(tǒng)的開(kāi)發(fā)成了一項(xiàng)系統(tǒng)工程,開(kāi)發(fā)廠商不僅要提供嵌入式軟硬件系統(tǒng)本身,同時(shí)還要提供強(qiáng)大的硬件開(kāi)發(fā)工具和軟件支持包。各類嵌入式Linux操作系統(tǒng)迅速發(fā)展,由于具有源代碼開(kāi)放、系統(tǒng)內(nèi)核小、執(zhí)行效率高、網(wǎng)絡(luò)結(jié)構(gòu)完整等特點(diǎn),很適合信息家電等嵌入式系統(tǒng)的需要,目前已經(jīng)形成了能與Windows CE、Pal
25、m OS等嵌入式操作系統(tǒng)進(jìn)行有力競(jìng)爭(zhēng)的局面。網(wǎng)絡(luò)化、信息化的要求隨著Internet技術(shù)的成熟和帶寬的提高而日益突出,以往功能單一的設(shè)備如電話、手機(jī)、冰箱、微波爐等功能不再單一,結(jié)構(gòu)變得更加復(fù)雜,網(wǎng)絡(luò)互聯(lián)成為必然趨勢(shì)。精簡(jiǎn)系統(tǒng)內(nèi)核,優(yōu)化關(guān)鍵算法,降低功耗和軟硬件成本。提供更加友好的多媒體人機(jī)交互界面。</p><p> 21世紀(jì)無(wú)疑將足一個(gè)網(wǎng)絡(luò)的時(shí)代,將嵌入式系統(tǒng)應(yīng)用到各種網(wǎng)絡(luò)環(huán)境中去的呼聲自然也越來(lái)越高。目前
26、大多數(shù)嵌入式系統(tǒng)還孤立于Internet之外,隨著Internet的進(jìn)一步發(fā)展,以及Internet技術(shù)與信息家電、工業(yè)控制技術(shù)等的結(jié)合日益緊密,嵌入式設(shè)備與Internet的結(jié)合才是嵌入式技術(shù)的真正未來(lái)。信息時(shí)代和數(shù)字時(shí)代的到來(lái),為嵌入式系統(tǒng)的發(fā)展帶來(lái)了巨大的機(jī)遇,同時(shí)也對(duì)嵌入式系統(tǒng)廠商提出,新的挑戰(zhàn)。目前,嵌入式技術(shù)與Internet技術(shù)的結(jié)合正在推動(dòng)著嵌入式技術(shù)的飛速發(fā)展,嵌入式系統(tǒng)的研究和應(yīng)用產(chǎn)生了如下新的顯著變化;</p
27、><p> 隨著ARM及其合作伙伴在嵌入式領(lǐng)域不斷努力,芯片的成本不斷降低,多種智能設(shè)備將通過(guò)互聯(lián)網(wǎng)得以聯(lián)動(dòng),形成一個(gè)體系。在這個(gè)網(wǎng)絡(luò)中,所有的日常事物都將內(nèi)置芯片,從而具備處理信息并與網(wǎng)絡(luò)交流的能力,這就是所謂的物聯(lián)網(wǎng)。與應(yīng)用處理器(AP)相比,微控制器(MCU)應(yīng)用和嵌入式系統(tǒng)開(kāi)發(fā)領(lǐng)域無(wú)疑具有相當(dāng)?shù)亩鄻有院蛷?fù)雜性。</p><p> 2012年23日,中國(guó)農(nóng)歷年的除夕這一天, LSI公
28、司今天宣布擴(kuò)大與ARM的長(zhǎng)期的戰(zhàn)略合作伙伴關(guān)系。新聞明確的提出,LSI將借此合作進(jìn)軍網(wǎng)絡(luò)應(yīng)用。根據(jù)新授權(quán)許可, LSI不但可以訪問(wèn)包括包括了支持虛擬化的ARM Cortex-A15處理器的一系列ARM處理器,而且可以訪問(wèn)對(duì)于多核應(yīng)用至關(guān)重要的ARM芯片的互連技術(shù)。</p><p> 回顧2013,10月份,AppliedMicro 的獲得v8架構(gòu)授權(quán),8月份,海思半導(dǎo)體獲ARM技術(shù)授權(quán),用于新一代的3G/4G基
29、站網(wǎng)絡(luò)基礎(chǔ)架構(gòu)。2月份, Broadcom和ARM擴(kuò)展了戰(zhàn)略合作伙伴,1月份,Cavium的進(jìn)行一代SoC的新聞,再算上一直有ARM架構(gòu)Marvell,ARM越來(lái)越多的和網(wǎng)絡(luò)聯(lián)系在一起。</p><p> 在國(guó)內(nèi),越來(lái)越多的開(kāi)源軟件,讓一直倍受封閉系統(tǒng)折磨的電信OEM,開(kāi)始從ARM強(qiáng)大的生態(tài)系統(tǒng)的受益。 當(dāng)然,最重要的是,ARM的處理器不僅僅是在低功耗表現(xiàn)出色,它們?cè)谛阅芊矫娴膬?yōu)勢(shì)逐步顯現(xiàn)。因?yàn)榫W(wǎng)絡(luò)應(yīng)用永遠(yuǎn)都是
30、性能饑渴的。</p><p> 將嵌入式系統(tǒng)技術(shù)與以太網(wǎng)技術(shù)集成在一起很早之前就產(chǎn)生了,但是有很多的客觀因素制約了它的發(fā)展。早期的嵌入式系統(tǒng)中的處理器大部分是以8位、16位MCU微控制器為主,無(wú)論是運(yùn)算速度還是存儲(chǔ)容量都比較低。而且早期的以太網(wǎng)技術(shù)還不成熟,所以TCP/IP協(xié)議棧未能在嵌入式系統(tǒng)中得到廣泛的運(yùn)用。但是隨著半導(dǎo)體微電子技術(shù)和以太網(wǎng)技術(shù)的高速發(fā)展,以上的問(wèn)題正在逐步得到解決,32位MCU微處理器也逐
31、步得到廣泛的應(yīng)用。</p><p> 本文以ARM處理結(jié)構(gòu)的嵌入式硬件系統(tǒng)為基礎(chǔ),實(shí)現(xiàn)了具有網(wǎng)絡(luò)通信的實(shí)時(shí)操作系統(tǒng),該應(yīng)用可以廣泛的在工業(yè)控制,通訊設(shè)備,家用電器等領(lǐng)域推廣,使得更多的設(shè)備能夠被遠(yuǎn)程控制和管理,改變傳統(tǒng)的模式,進(jìn)入互聯(lián)網(wǎng)通信的世界。除此之外,本文是采用MB9F618這開(kāi)發(fā)板,TR-Thread的操作系統(tǒng),以及嵌入式的LwIP協(xié)議,最終來(lái)實(shí)現(xiàn)本系統(tǒng)的測(cè)試。</p><p>
32、 第一章 相關(guān)技術(shù)背景介紹</p><p> 1. 嵌入式系統(tǒng)的定義</p><p> 嵌入式系統(tǒng)(Embedded System)是一種包括硬和軟件的完整的計(jì)算機(jī)系統(tǒng),它的定義是:“嵌入式系統(tǒng)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),并且軟硬件可剪裁,適用于應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積和功耗有嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)?!鼻度胧较到y(tǒng)所用的計(jì)算機(jī)是嵌入到被控對(duì)象的專用微處理器,但是功能
33、比通用計(jì)算機(jī)專門(mén)化,具有通用計(jì)算機(jī)所不能具備的針對(duì)某個(gè)方面特別設(shè)計(jì)的、合適的運(yùn)算速度、高可靠性和較低比較成本的專用計(jì)算機(jī)系統(tǒng)。</p><p> 嵌入式系統(tǒng)一般指非PC系統(tǒng),它包括硬件和軟件兩部分。硬件包括處理器微處理器、存儲(chǔ)器及外設(shè)器件和I/O端口、圖形控制器等。軟件部分包括操作系統(tǒng)軟件(OS)(要求實(shí)時(shí)和多任務(wù)操作)和應(yīng)用程序編程。有時(shí)設(shè)計(jì)人員把這兩種軟件組合在一起。應(yīng)用程序控制著系統(tǒng)的運(yùn)作和行為;而操作系
34、統(tǒng)控制著應(yīng)用程序編程與硬件的交互作用。</p><p> 嵌入式系統(tǒng)的核心是嵌入式微處理器。嵌入式微處理器一般就具備以下4個(gè)特點(diǎn):</p><p> (1)對(duì)實(shí)時(shí)多任務(wù)有很強(qiáng)的支持能力,能完成多任務(wù)并且有較短的中斷響應(yīng)時(shí)間,從而使內(nèi)部的代碼和實(shí)時(shí)內(nèi)核心的執(zhí)行時(shí)間減少到最低限度。</p><p> (2)具有功能很強(qiáng)的存儲(chǔ)區(qū)保護(hù)功能。這是由于嵌入式系統(tǒng)的軟件結(jié)構(gòu)
35、已模塊化,而為了避免在軟件模塊之間出現(xiàn)錯(cuò)誤的交叉作用,需要設(shè)計(jì)強(qiáng)大的存儲(chǔ)區(qū)保護(hù)功能,同時(shí)也有利于軟件診斷。</p><p> (3)可擴(kuò)展的處理器結(jié)構(gòu),以能最迅速地開(kāi)展出滿足應(yīng)用的最高性能的嵌入式微處理器。</p><p> (4)嵌入式微處理器必須功耗很低,尤其是用于便攜。</p><p> 下面對(duì)嵌入式計(jì)算機(jī)系統(tǒng)的組成進(jìn)行介紹。</p>&l
36、t;p><b> (1)硬件層</b></p><p> 硬件層中包含嵌入式微處理器、存儲(chǔ)器(SDRAM、ROM、Flash等)、通用設(shè)備接口和I/O接口(A/D、D/A、I/O等)。在一嵌入式處理器基礎(chǔ)上添加電源電路、時(shí)鐘電路和存儲(chǔ)器電路,就構(gòu)成了一個(gè)嵌入式核心控制模塊。其中操作系統(tǒng)和應(yīng)用程序都可以固化在ROM中。</p><p><b> (
37、2)中間層</b></p><p> 硬件層與軟件層之間為中間層,也稱為硬件抽象層(Hardware Abstract Layer,HAL)</p><p> 或者版級(jí)支持包(Board Support Package,BSP),它半系統(tǒng)上層軟件與底層硬件分離開(kāi)來(lái),使系統(tǒng)的底層驅(qū)動(dòng)程序與硬件無(wú)關(guān),上層軟件開(kāi)發(fā)人員無(wú)需關(guān)心底層硬件的具體情況,根據(jù)BSP層提供的接口即可進(jìn)行開(kāi)發(fā)
38、。該層一般包含相關(guān)底層硬件的初始化、數(shù)據(jù)的輸入/輸出操作和硬件設(shè)備的配置功能。</p><p> 實(shí)際上,BSP是一個(gè)介于操作系統(tǒng)和底層硬件之間的軟件層次,包括了系統(tǒng)中大部分與硬件聯(lián)系緊密的軟件模塊。設(shè)計(jì)一個(gè)完整的BSP需要完成兩部分工作:嵌入工系統(tǒng)的硬件初始化的BSP功能,設(shè)計(jì)硬件相關(guān)的設(shè)備驅(qū)動(dòng)。</p><p><b> (3)系統(tǒng)軟件層</b></p&
39、gt;<p> 系統(tǒng)軟件層由實(shí)時(shí)多任務(wù)操作系(Real-time Operation System,RTOS)、文件系統(tǒng)、圖形用戶接口(Graphic User Interface,GUI)、網(wǎng)絡(luò)系統(tǒng)及通用組件模塊組成。RTOS是嵌入式應(yīng)用軟件的基礎(chǔ)和開(kāi)發(fā)平臺(tái)。</p><p> 2. 嵌入式處理器分類與現(xiàn)狀</p><p> 圖1-1 嵌入式處理器分類</p&
40、gt;<p> 嵌入式微處理器(MPU):微機(jī)中的中央處理器(CPU)稱為微處理器(MPU),是構(gòu)成微機(jī)的核心部件,也可以說(shuō)是微機(jī)的心臟。它起到控制整個(gè)微型計(jì)算機(jī)工作的作用,產(chǎn)生控制信號(hào)對(duì)相應(yīng)的部件進(jìn)行控制,并執(zhí)行相應(yīng)的操作。在微機(jī)中,CPU被集成在一片超大規(guī)模集成電路芯片上,稱為微處理器(MPU),微處理器插在主板的cpu插槽中。通常所說(shuō)的16位機(jī)、32位機(jī)是指該計(jì)算機(jī)中微處理器內(nèi)部數(shù)據(jù)總線的寬度,也就是CPU可同時(shí)操
41、作的</p><p> 二進(jìn)制數(shù)的位數(shù)。目前常用的CPU都是64位的,即一次可傳送64位二進(jìn)制數(shù)。</p><p> 嵌入式微控制器(MCU):(嵌入式微控制器(Embedded Microcontroller Unit,EMCU)嵌入式微控制器的典型代表是單片機(jī),單片機(jī)從誕生之日起,就稱為嵌入式微控制器。它體積小,結(jié)構(gòu)緊湊,作為一個(gè)部件埋藏于所控制的裝置中,主要完成信號(hào)控制的功能。就
42、是將整個(gè)計(jì)算機(jī)系統(tǒng)集成到一塊芯片中。但這種8位的電子器件目前在嵌入式設(shè)備中仍然有著極其廣泛的應(yīng)用。單片機(jī)芯片內(nèi)部集成ROM/EPROM、RAM、總線、總線邏輯、定時(shí)/計(jì)數(shù)器、看門(mén)狗、I/O、串行口、脈寬調(diào)制輸出、A/D、D/A、Flash RAM、EEPROM等各種必要功能和外設(shè)。和嵌入式微處理器相比,微控制器的最大特點(diǎn)是單片化,體積大大減小,從而使功耗和成本下降、可靠性提高。微控制器是目前嵌入式系統(tǒng)工業(yè)的主流。由于微控制器的片上外設(shè)資
43、源一般比較豐富,適合于控制,因此稱微控制器。為了適應(yīng)不同的應(yīng)用需求,一般一個(gè)系列的單片機(jī)具有多種衍生產(chǎn)品,每種衍生產(chǎn)品的處理器內(nèi)核都是一樣的名不同的是存儲(chǔ)器和外設(shè)的配置極封裝。這樣可以最大限度地與應(yīng)用需求相匹配,從而減小功耗和成本。由于MCU低廉的價(jià)格,優(yōu)良的功能,所以擁有的品種和數(shù)量最多</p><p> 嵌入式DSP處理器(DSP):DSP是一門(mén)涉及許多學(xué)科而又廣泛應(yīng)用于許多領(lǐng)域的新興學(xué)科。20世紀(jì)60年代
44、以來(lái),隨著計(jì)算機(jī)和信息技術(shù)的飛速發(fā)展,數(shù)字信號(hào)處理技術(shù)應(yīng)運(yùn)而生并得到迅速的發(fā)展。數(shù)字信號(hào)處理是一種通過(guò)使用數(shù)學(xué)技巧執(zhí)行轉(zhuǎn)換或提取信息,來(lái)處理現(xiàn)實(shí)信號(hào)的方法,這些信號(hào)由數(shù)字序列表示。在過(guò)去的二十多年時(shí)間里,數(shù)字信號(hào)處理已經(jīng)在通信、消費(fèi)電子等領(lǐng)域得到廣泛的應(yīng)用。DSP處理器經(jīng)過(guò)單片化、EMC改造、增加片上外設(shè),或在通用單片機(jī)或SOC中增加DSP協(xié)處理器,從而發(fā)展成為嵌入式DSP處理器(Embedded Digital Signal Proc
45、essor, EDSP),推動(dòng)嵌入式DSP處理器發(fā)展的因素主要是嵌入式系統(tǒng)的智能化。目前TI、ADI、Freescale、CEVA等半導(dǎo)體廠商在這一領(lǐng)域擁有很強(qiáng)的實(shí)力。</p><p> 嵌入式片上系統(tǒng)(system on chip):SoC定義的基本內(nèi)容主要表現(xiàn)在兩方面:其一是它的構(gòu)成,其二是它形成過(guò)程。系統(tǒng)級(jí)芯片的構(gòu)成可以是系統(tǒng)級(jí)芯片控制邏輯模塊、微處理器/微控制器CPU 內(nèi)核模塊、數(shù)字信號(hào)處理器DSP模塊
46、、嵌入的存儲(chǔ)器模塊、和外部進(jìn)行通訊的接口模塊、含有ADC/DAC的模擬前端模塊、電源提供和功耗管理模塊,對(duì)于一個(gè)無(wú)線SoC還有射頻前端模塊、用戶定義邏輯(它可以由FPGA 或ASIC實(shí)現(xiàn))以及微電子機(jī)械模塊,更重要的是一個(gè)SoC 芯片內(nèi)嵌有基本軟件(RDOS或COS以及其他應(yīng)用軟件)模塊或可載入的用戶軟件等。系統(tǒng)級(jí)芯片形成或產(chǎn)生過(guò)程包含以下三個(gè)方面:(1) 基于單片集成系統(tǒng)的軟硬件協(xié)同設(shè)計(jì)和驗(yàn)證;(2) 再利用邏輯面積技術(shù)使用和產(chǎn)能
47、占有比例有效提高即開(kāi)發(fā)和研究IP核生成及復(fù)用技術(shù),特別是大容量的存儲(chǔ)模塊嵌入的重復(fù)應(yīng)用等;(3) 超深亞微米(UDSM) 、納米集成電路的設(shè)計(jì)理論和技術(shù)。</p><p> 3. 嵌入式操作系統(tǒng)</p><p> 圖1-2 嵌入式設(shè)備網(wǎng)絡(luò)化</p><p><b> 地址資源</b></p><p> 物聯(lián)網(wǎng)
48、的實(shí)現(xiàn)需要給每個(gè)物體分配唯一的標(biāo)識(shí)或地址。最早的可尋址性想法是基于RFID標(biāo)簽和電子產(chǎn)品唯一編碼來(lái)實(shí)現(xiàn)的。另一個(gè)來(lái)自語(yǔ)義網(wǎng)的想法是,用現(xiàn)有的命名協(xié)議,如統(tǒng)一資源標(biāo)志符來(lái)訪問(wèn)所有物品(不僅限于電子產(chǎn)品,智能設(shè)備和帶有RFID標(biāo)簽的物品)。這些物品本身不能交談,但通過(guò)這種方式它們可以被其他節(jié)點(diǎn)訪問(wèn),例如一個(gè)強(qiáng)大的中央服務(wù)器。下一代互聯(lián)網(wǎng)將使用IPv6協(xié)議,它擁有極大數(shù)量的地址資源,使用IPv6的程序能夠和幾乎所有接入設(shè)備進(jìn)行通信。這個(gè)系統(tǒng)將
49、能夠識(shí)別任何一種物品GS1/EPCglobal Information Services (EPCIS) 是這些想法的一個(gè)綜合實(shí)踐。 這個(gè)系統(tǒng)被用來(lái)標(biāo)識(shí)從航天、交通到消費(fèi)電子領(lǐng)域的物品。</p><p><b> 人工智能</b></p><p> 環(huán)境智能和自主控制并不是物聯(lián)網(wǎng)最初概念的一部分。環(huán)境智能和自主控制也并不依賴于網(wǎng)絡(luò)架構(gòu)。但目前的研究趨勢(shì)是將自主控制
50、和物聯(lián)網(wǎng)結(jié)合在一起,在未來(lái)物聯(lián)網(wǎng)可能是一個(gè)非決定性的、開(kāi)放的網(wǎng)絡(luò),其中自組織的或智能的實(shí)體和虛擬物品能夠和環(huán)境交互并基于它們各自的目的自主運(yùn)行。</p><p><b> 4. 網(wǎng)絡(luò)協(xié)議棧</b></p><p> (1)嵌入式微處理器和嵌入式操作系統(tǒng)為特征的嵌入式計(jì)算平臺(tái)使計(jì)算進(jìn)入了后PC時(shí)代。嵌入式系統(tǒng)的小體積、高可靠能夠滿足實(shí)現(xiàn)野戰(zhàn)和惡劣環(huán)境下的便攜虛擬儀器
51、的需要。基于嵌入式計(jì)算平臺(tái),設(shè)計(jì)虛擬儀器系統(tǒng)成為構(gòu)建測(cè)試系統(tǒng)的新思路。</p><p> (2)與通用型計(jì)算機(jī)系統(tǒng)相比,嵌入式系統(tǒng)功耗低、可靠性高;功能強(qiáng)大、性能價(jià)格比高;實(shí)時(shí)性強(qiáng),支持多任務(wù);占用空間小,效率高;面向特定應(yīng)用,可根據(jù)需要靈活定制。</p><p> (3)操作方便、簡(jiǎn)單、提供友好的圖形GUI和圖形界面,追求易學(xué)易用。提供強(qiáng)大的網(wǎng)絡(luò)功能,支持TCP/IP協(xié)議及其他協(xié)議,
52、提供TCP/UDP/IP/PPP協(xié)議支持及統(tǒng)一的MAC訪問(wèn)層接口,為各種移動(dòng)計(jì)算設(shè)備預(yù)留接口。強(qiáng)穩(wěn)定性,弱交互性。嵌入式系統(tǒng)一旦開(kāi)始運(yùn)行就不需要用戶過(guò)多的干預(yù)、這就要負(fù)責(zé)系統(tǒng)管理的EOS具有較強(qiáng)的穩(wěn)定性。</p><p> (4)嵌入式操作系統(tǒng)的用戶接口一般不提供操作命令,它通過(guò)系統(tǒng)的調(diào)用命令向用戶程序提供服務(wù)。固化代碼。在嵌入式系統(tǒng)中,嵌入式操作系統(tǒng)和應(yīng)用軟件被固化在嵌入式系統(tǒng)計(jì)算機(jī)的ROM中。</p&
53、gt;<p> (5)更好的硬件適應(yīng)性,也就是良好的移植性。</p><p><b> 5. 本章小結(jié)</b></p><p> 從技術(shù)的角度定義:嵌入式系統(tǒng)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟件硬件可剪裁,適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。</p><p> 從系統(tǒng)的角度定義:嵌入式
54、系統(tǒng)是設(shè)計(jì)完成復(fù)雜功能的硬件和軟件,并使其緊密耦合在一起的計(jì)算機(jī)系統(tǒng)。</p><p> 第二章 系統(tǒng)硬件平臺(tái)</p><p> 1. ARM Cortex-M3處理器</p><p> 圖2-1 Cortex-M3的一個(gè)簡(jiǎn)化示意圖 </p><p> CM3擁有R0~R15的寄存器組,其中R13作為堆棧指針SP。SP有兩個(gè),但在同
55、一時(shí)刻只能看到一個(gè),這就是所謂的"banked"寄存器。1.R0~R12是32位通用寄存器,用于數(shù)據(jù)操作。絕大多數(shù)16位的thumb指令只能訪問(wèn)R0~R7,而32位的thumb指令可以訪問(wèn)全部寄存器。2.banked R13:兩個(gè)堆棧指針 主堆棧指針(MSP):復(fù)位后默認(rèn)使用進(jìn)程堆棧指針(PSP):由用戶的應(yīng)用程序代碼使用堆棧指針的最低兩位永遠(yuǎn)是0,這意味著堆棧總是4字節(jié)對(duì)齊的。實(shí)際上,R13的最低兩位被硬線連接到
56、0。</p><p> 圖2-2 Cortex-M3內(nèi)部寄存器示意圖</p><p><b> 2. 系統(tǒng)任務(wù)要求</b></p><p><b> 2.1 硬件方面</b></p><p> (1)實(shí)現(xiàn)1個(gè)串口,1個(gè)RS232或1個(gè)Rs232和1個(gè)Rs485,通過(guò)跳線選擇,串口波特率可選
57、,最大波特率為115200bps</p><p> (2)實(shí)現(xiàn)2個(gè)網(wǎng)口,網(wǎng)口A與網(wǎng)口B可以同時(shí)工作,通訊方式下實(shí)際速率至少100l(B/s)</p><p> (3)雙以太網(wǎng)口通信的實(shí)現(xiàn)</p><p><b> 2.2 軟件方面</b></p><p> 在運(yùn)行RT-Thread前,我們需要安裝RealView
58、 MDK(正式版或評(píng)估版) 3.5+,它不僅是軟件仿真工具,也是編譯器鏈接器。</p><p> 先從Keil官方網(wǎng)站下載RealView MDK評(píng)估版。會(huì)需要先填一些個(gè)人基本信息即可進(jìn)行下載。下載完畢后,在Windows環(huán)境下運(yùn)行它就行了。</p><p> 3. 開(kāi)發(fā)板MB9F618簡(jiǎn)介</p><p><b> 3.1 開(kāi)發(fā)板外觀</b&
59、gt;</p><p> 圖2-3 MB9F618外觀</p><p><b> 3.2 配置說(shuō)明</b></p><p><b> 處理器</b></p><p> Fujitsu MB9BF618S(ARM CortexM3 核心)主頻可達(dá)144M。128K內(nèi)部SRAM、1M內(nèi)部Fla
60、sh。多功能串口可按UART、SPI等多方式通信。雙USB控制器,雙以太網(wǎng)控制器。八通道DMA,兩種看門(mén)狗定時(shí)器,12位A/D轉(zhuǎn)換器等。</p><p><b> 外設(shè)資源</b></p><p> ? 1個(gè)DB9串口(UART0)</p><p> ? 1個(gè)SD卡插座</p><p> ? 1個(gè)Mini-
61、B USB Host接口</p><p> ? 1個(gè)B型USB Slave接口</p><p><b> 4個(gè)用戶LED</b></p><p> ? 1個(gè)SPI接口</p><p> ? 1個(gè)電源接口(5V )</p><p> ? 1個(gè)JTAG接口</p>&l
62、t;p><b> ? 1個(gè)復(fù)位按鍵</b></p><p> ? 1個(gè)4M系統(tǒng)時(shí)鐘晶振</p><p> ? 1個(gè)50M以太網(wǎng)控制器時(shí)鐘晶振</p><p> ? 1個(gè)32.767K用于低功耗晶振</p><p> ? 2個(gè)RJ45 + DP83848 PHY</p>&l
63、t;p><b> 4. 本章小結(jié)</b></p><p> ARM Cortex-M3處理器是行業(yè)領(lǐng)先的3位處理器,適用于具有較高確定性的實(shí)時(shí)應(yīng)用,它經(jīng)過(guò)專門(mén)開(kāi)發(fā),可使合作伙伴針對(duì)廣泛的設(shè)備(包括微控制器、汽車車身系統(tǒng)、工業(yè)控制系統(tǒng)以及無(wú)線網(wǎng)絡(luò)和傳感器)開(kāi)發(fā)高性能低成本平臺(tái)。此處理器具有出色的計(jì)算性能以及對(duì)事件的優(yōu)異系統(tǒng)響應(yīng)能力,同時(shí)可應(yīng)實(shí)際中對(duì)低動(dòng)態(tài)和靜態(tài)功率需求的挑戰(zhàn)。此處理器
64、配置十分靈活,從而支持廣泛的實(shí)現(xiàn)形式(從需要內(nèi)存保護(hù)和強(qiáng)大trace技術(shù)的實(shí)現(xiàn)形式,直至需要極小面積的成本敏感型設(shè)備)。</p><p><b> 第三章 軟件的設(shè)計(jì)</b></p><p> 1. 嵌入式操作系統(tǒng)的選擇</p><p> 1.1 RT-Thread操作系統(tǒng)的簡(jiǎn)介</p><p> RT-Thre
65、ad是一個(gè)開(kāi)放源代碼的實(shí)時(shí)操作系統(tǒng),并且商業(yè)許可證非常寬松的實(shí)時(shí)操作系統(tǒng)。RT-Thread的變革因?yàn)镃ortex-M3 而來(lái),因?yàn)镾T的STM32 使用的人太廣了,當(dāng)然還有非常重要的一點(diǎn)。RT-Thread已經(jīng)開(kāi)始支持Keil MDK,armcc編譯器了。GNU GCC確實(shí)好,并且也由衷的推崇它,使用它,只是調(diào)試確實(shí)麻煩,阻礙了更多人使用它(ARM平臺(tái)上)。當(dāng)RT-Thread + Cortex-M3 + Keil MDK碰撞在一起的
66、時(shí)候,火花因它而生,越來(lái)越多人使用RT-Thread了,當(dāng)然這和RT-Thread厚積薄發(fā)是離不開(kāi)的,因?yàn)檫@個(gè)時(shí)候,RT-Thread已經(jīng)有一個(gè)穩(wěn)定的內(nèi)核,shell方式的調(diào)試?yán)?nsh,DFS虛擬設(shè)備文件系統(tǒng),LwIP協(xié)議棧以及自己從頭開(kāi)發(fā)的圖形用戶界面GUI。RT-Thread/GUI成型于2008年底,但為了Cortex-M3分支,這個(gè)組件停下來(lái)很多,但這種停留是值得的。</p><p> 在Corte
67、x-M3這個(gè)平臺(tái)上(當(dāng)然也包括其他一些ARM平臺(tái)),已經(jīng)有多家企業(yè)開(kāi)始使用RT-Thread實(shí)時(shí)操作系統(tǒng)作為他們的軟件平臺(tái),其中也包括一家國(guó)內(nèi)A股上市企業(yè),他們把RT-Thread應(yīng)用于電力,監(jiān)控,RFID,數(shù)據(jù)采集等數(shù)個(gè)領(lǐng)域中,RT-Thread實(shí)時(shí)操作系統(tǒng)涵蓋了實(shí)時(shí)內(nèi)核,文件系統(tǒng),LwIP網(wǎng)絡(luò)協(xié)議棧,?nsh shell等組件。RT-Thread/GUI因?yàn)槌龅罆r(shí)間比較晚,還處于試用期。</p><p>
68、圖3-1 RT-Thread及外圍組件的基本框架圖</p><p> RT-Thread Kernel內(nèi)核部分包括了RT-Thread的核心代碼,包括對(duì)象管理器,線程管理及調(diào)度,線程間通信等的微小內(nèi)核實(shí)現(xiàn)(最小能夠到達(dá)4k ROM,1k RAM體積占用)。內(nèi)核庫(kù)是為了保證內(nèi)核能夠獨(dú)立運(yùn)作的一套小型類似C庫(kù)實(shí)現(xiàn)(這部分根據(jù)編譯器自帶C庫(kù)的情況會(huì)有些不同,使用GCC編譯器時(shí),攜帶更多的標(biāo)準(zhǔn)C庫(kù)實(shí)現(xiàn))。CPU及板級(jí)
69、支持包包含了RT-Thread支持的各個(gè)平臺(tái)移植代碼,通常會(huì)包含兩個(gè)匯編文件,一個(gè)是系統(tǒng)啟動(dòng)初始化文件,一個(gè)是線程進(jìn)行上下文切換的文件,其他的都是C源文件。</p><p> 1.2 虛擬文件系統(tǒng)</p><p> RT-Thread提供的文件系統(tǒng)稱為設(shè)備文件系統(tǒng),它主要包含了一個(gè)非常輕型的虛擬文件系統(tǒng)。虛擬文件系統(tǒng)的好處就是,不管下層采用了什么文件系統(tǒng),例如內(nèi)存虛擬文件系統(tǒng),F(xiàn)AT3
70、2文件系統(tǒng)還是YAFFS2閃存文件系統(tǒng),對(duì)上層應(yīng)用程序提供的接口都是統(tǒng)一的。</p><p> 1.3 shell系統(tǒng)</p><p> RT-Thread的shell系統(tǒng)——FinSH,提供了一套供用戶在命令行操作的接口,主要用于調(diào)試、查看系統(tǒng)信息。由于系統(tǒng)程序大多數(shù)采用C語(yǔ)言來(lái)編寫(xiě),F(xiàn)inSH命令行的設(shè)計(jì)被設(shè)計(jì)成類似C語(yǔ)言表達(dá)式的風(fēng)格:它能夠解析執(zhí)行大部分C語(yǔ)言的表達(dá)式,也能夠使用
71、類似于C語(yǔ)言的函數(shù)調(diào)用方式(或函數(shù)指針?lè)绞剑┰L問(wèn)系統(tǒng)中的函數(shù)及全局變量。</p><p> 1.4 圖形用戶界面</p><p> RT-Thread/GUI組件是一套完全針對(duì)嵌入式系統(tǒng)而進(jìn)行優(yōu)化的圖形用戶界面,它在保留通常意義的多窗口的前提下,提出了面板,工作臺(tái),視圖的概念,通過(guò)一個(gè)個(gè)視圖的渲染展現(xiàn)出圖形用戶界面絢麗的外觀。它同樣也包括了基本控件的支持、中文顯示的支持、多線程的支持;
72、針對(duì)嵌入式系統(tǒng)計(jì)算能力不足的特點(diǎn),它會(huì)自動(dòng)對(duì)界面區(qū)域進(jìn)行可視區(qū)域的剪切,該重繪顯示的地方進(jìn)行重繪,被覆蓋的地方則不進(jìn)行重復(fù)繪圖。</p><p><b> 1.5 支持的平臺(tái)</b></p><p> 圖3-2 RT-Therad支持的平臺(tái)</p><p> 1.6 RT-Thread的內(nèi)核對(duì)象模型</p><p&g
73、t; RT-Thread的內(nèi)核對(duì)象模型是一種非常有趣的面向?qū)ο髮?shí)現(xiàn)方式。由于C語(yǔ)言更為面向系統(tǒng)底層,操作系統(tǒng)核心通常都是采用C語(yǔ)言和匯編語(yǔ)言混合編寫(xiě)而成。C語(yǔ)言作為一門(mén)高級(jí)計(jì)算機(jī)編程語(yǔ)言,一般被認(rèn)為是一種面向過(guò)程的編程語(yǔ)言:程序員按照特定的方式把要處理事物的過(guò)程一級(jí)級(jí)分解成一個(gè)個(gè)子過(guò)程。 </p><p> 面向?qū)ο笤从谌祟悓?duì)世界的認(rèn)知多偏向于類別模式,根據(jù)世界中不同物品的特性分門(mén)別類的組織在一起抽象并歸納,
74、形成各個(gè)類別的自有屬性。在計(jì)算機(jī)領(lǐng)域一般采用一門(mén)新的,具備面向?qū)ο筇卣鞯木幊陶Z(yǔ)言實(shí)現(xiàn)面向?qū)ο蟮脑O(shè)計(jì),例如常見(jiàn)的編程語(yǔ)言C++,Java,Python等。那么RT- Thread既然有意引入對(duì)象系統(tǒng),為什么不直接采用C++來(lái)實(shí)現(xiàn)?這個(gè)需要從C++的實(shí)現(xiàn)說(shuō)起,用過(guò)C++的開(kāi)發(fā)人員都知道,C++的對(duì)象系統(tǒng)中會(huì)引入很多未知的東西,例如虛擬重載表,命名粉 碎,模板展開(kāi)等。</p><p> 面向?qū)ο笥兴浅?yōu)越的地方,取
75、其精華(即面向?qū)ο笏枷耄嫦驅(qū)ο笤O(shè)計(jì)),也就是RT-Thread內(nèi)核對(duì)象模型的來(lái)源。RT-Thread實(shí)時(shí)操作系統(tǒng)中包含一個(gè)小型的,非常緊湊的對(duì)象系統(tǒng),這個(gè)對(duì)象系統(tǒng)完全采用C語(yǔ)言實(shí)現(xiàn)。在了解RT-Thread內(nèi)部或采用RT-Thread編程時(shí)有必要先熟悉它,它是RT-Thread實(shí)現(xiàn)的基礎(chǔ)。</p><p> 1.7 內(nèi)核對(duì)象管理工作模式</p><p> 圖3-3 RT-Threa
76、d內(nèi)核對(duì)象管理工作模式</p><p> RT-Thread采用內(nèi)核對(duì)象管理系統(tǒng)來(lái)訪問(wèn)/管理所有內(nèi)核對(duì)象。內(nèi)核對(duì)象包含了內(nèi)核中絕大部分設(shè)施,而這些內(nèi)核對(duì)象可以是靜態(tài)分配的靜態(tài)對(duì)象,也可以是從系統(tǒng)內(nèi)存堆中分配的動(dòng)態(tài)對(duì)象。通過(guò)內(nèi)核對(duì)象系統(tǒng),RT-Thread做到了不依賴于具體的內(nèi)存分配方式,系統(tǒng)的靈活性得到極大的提高。</p><p> RT-Thread內(nèi)核對(duì)象包括:線程,信號(hào)量,互斥鎖
77、,事件,郵箱,消息隊(duì)列和定時(shí)器,內(nèi)存池,設(shè)備驅(qū)動(dòng)等。對(duì)象容器中包含了每類內(nèi)核對(duì)象的信息,包括對(duì)象類型,大小等。對(duì)象容器給每類內(nèi)核對(duì)象分配了一個(gè)鏈表,所有的內(nèi)核對(duì)象都被鏈接到該鏈表上。</p><p> 下圖顯示了RT-Thread中各類內(nèi)核對(duì)象的派生和繼承關(guān)系。對(duì)于每一種具體內(nèi)核對(duì)象和對(duì)象控制塊,除了基本結(jié)構(gòu)外,還有自己的擴(kuò)展屬性(私有屬性),例如,對(duì)于線程控制塊,在基類對(duì)象基礎(chǔ)上進(jìn)行擴(kuò)展,增加了線程狀態(tài)、優(yōu)先
78、級(jí)等屬性。這些屬性在基類對(duì)象的操作中不會(huì)用到,只有在與具體線程相關(guān)的操作中才會(huì)使用。因此從面向?qū)ο蟮挠^點(diǎn),可以認(rèn)為每一種具體對(duì)象是抽象對(duì)象的派生,繼承了基本對(duì)象的屬性并在此基礎(chǔ)上擴(kuò)展了與自己相關(guān)的屬性。</p><p> 圖3-4 RT-Thread中各類內(nèi)核對(duì)象的派生和繼承關(guān)系</p><p> 在對(duì)象管理模塊中,定義了通用的數(shù)據(jù)結(jié)構(gòu),用來(lái)保存各種對(duì)象的共同屬性,各種具體對(duì)象只需要
79、在此基礎(chǔ)上加上自己的某些特別的屬性,就可以清楚的表示自己的特征。這種設(shè)計(jì)方法的優(yōu)點(diǎn):</p><p> (1)提高了系統(tǒng)的可重用性和擴(kuò)展性,增加新的對(duì)象類別很容易,只需要繼承通用對(duì)象的屬性再加少量擴(kuò)展即可。</p><p> (2)提供統(tǒng)一的對(duì)象操作方式,簡(jiǎn)化了各種具體對(duì)象的操作,提高了系統(tǒng)的可靠性。</p><p><b> 1.8 線程狀態(tài)<
80、;/b></p><p> 線程運(yùn)行的過(guò)程中,在一個(gè)時(shí)間內(nèi)只允許一個(gè)線程在處理器中運(yùn)行,即線程會(huì)有多種不同的線程狀態(tài),如運(yùn)行態(tài),非運(yùn)行態(tài)等。在RT-Thread實(shí)時(shí)操作系統(tǒng)中,線程包含四種狀態(tài),操作系統(tǒng)會(huì)自動(dòng)根據(jù)它運(yùn)行的情況而動(dòng)態(tài)調(diào)整它的狀態(tài)。</p><p> RT-Thread中的四種線程狀態(tài):</p><p> (1) RT THREAD INIT
81、/CLOSE</p><p> 線程初始狀態(tài)。當(dāng)線程剛開(kāi)始創(chuàng)建還沒(méi)開(kāi)始運(yùn)行時(shí)就處于這個(gè)狀態(tài);當(dāng)線程運(yùn)行結(jié)束時(shí)也處于這個(gè)狀態(tài)。在這個(gè)狀態(tài)下,線程不參與調(diào)度。</p><p> (2)RT THREAD SUSPEND</p><p> 掛起態(tài)。線程此時(shí)被掛起:它可能因?yàn)橘Y源不可用而等待掛起;或主動(dòng)延時(shí)一段時(shí)間而被掛起。在這個(gè)狀態(tài)下,線程不參與調(diào)度。</p&
82、gt;<p> (3)RT THREAD READY</p><p> 就緒態(tài)。線程正在運(yùn)行;或當(dāng)前線程運(yùn)行完讓出處理機(jī)后,操作系統(tǒng)尋找最高優(yōu)先級(jí)的就緒態(tài)線程運(yùn)行。</p><p> (4) RT THREAD RUNNING</p><p> 運(yùn)行態(tài)。線程當(dāng)前正在運(yùn)行,在單核系統(tǒng)中,只有rt thread self()函數(shù)返回的線程處于這個(gè)狀
83、態(tài);在多核系統(tǒng)中則不受這個(gè)限制。</p><p> RT-Thread實(shí)時(shí)操作系統(tǒng)提供一系列的操作系統(tǒng)調(diào)用接口,使得線程的狀態(tài)在這四個(gè)狀態(tài)之間來(lái)回的變換。例如一個(gè)就緒態(tài)的線程由于申請(qǐng)一個(gè)資源(例如使用rt sem take),而有可能進(jìn)入阻塞態(tài)。又如,一個(gè)外部中斷發(fā)生,轉(zhuǎn)入中斷處理函數(shù),中斷處理函數(shù)釋放了某個(gè)資源,導(dǎo)致了當(dāng)前運(yùn)行任務(wù)的切換,喚醒了另一阻塞態(tài)的任務(wù),改變其狀態(tài)為就緒態(tài)等等。</p>
84、<p> 線程通過(guò)調(diào)用函數(shù)rt thread create/init調(diào)用進(jìn)入到初始狀態(tài)(RT THREAD INIT/RT THREAD CLOSE),通過(guò)函數(shù)rt thread startup調(diào)用后進(jìn)入到就緒狀態(tài)(RT THREAD READY)。當(dāng)這個(gè)線程調(diào)用rt thread delay,rt sem take,rt mb recv等函數(shù)時(shí),將主動(dòng)掛起或由于獲取不到資源進(jìn)入到掛起狀態(tài)。在掛起狀態(tài)的線程,如果它等待超時(shí)依
85、然未獲得資源或由于其他線程釋放了資源,它將返回到就緒狀態(tài)。</p><p><b> LwIP協(xié)議棧</b></p><p> 2.1 LwIP協(xié)議棧簡(jiǎn)介</p><p> LwIP是Light Weight (輕型)IP協(xié)議,有無(wú)操作系統(tǒng)的支持都可以運(yùn)行。LwIP實(shí)現(xiàn)的重點(diǎn)是在保持TCP協(xié)議主要功能的基礎(chǔ)上減少對(duì)RAM 的占用,它只需十
86、幾KB的RAM和40K左右的ROM就可以運(yùn)行,這使LwIP協(xié)議棧適合在低端的嵌入式系統(tǒng)中使用。</p><p> lwIP協(xié)議棧主要關(guān)注的是怎么樣減少內(nèi)存的使用和代碼的大小,這樣就可以讓lwIP適用于資源有限的小型平臺(tái)例如嵌入式系統(tǒng)。為了簡(jiǎn)化處理過(guò)程和內(nèi)存要求,lwIP對(duì)API進(jìn)行了裁減,可以不需要復(fù)制一些數(shù)據(jù)。</p><p> lwip提供三種API:</p><
87、;p><b> RAW API</b></p><p><b> lwip API</b></p><p><b> BSD API</b></p><p> RAW API把協(xié)議棧和應(yīng)用程序放到一個(gè)進(jìn)程里邊,該接口基于函數(shù)回調(diào)技術(shù),使用該接口的應(yīng)用程序可以不用進(jìn)行連續(xù)操作。不過(guò),這會(huì)使
88、應(yīng)用程序編寫(xiě)難度加大且代碼不易被理解。為了接收數(shù)據(jù),應(yīng)用程序會(huì)向協(xié)議棧注冊(cè)一個(gè)回調(diào)函數(shù)。該回調(diào)函數(shù)與特定的連接相關(guān)聯(lián),當(dāng)該關(guān)聯(lián)的連接到達(dá)一個(gè)信息包,該回調(diào)函數(shù)就會(huì)被協(xié)議棧調(diào)用。這既有優(yōu)點(diǎn)也有缺點(diǎn)。優(yōu)點(diǎn)是既然應(yīng)用程序和TCP/IP協(xié)議棧駐留在同一個(gè)進(jìn)程中,那么發(fā)送和接收數(shù)據(jù)就不再產(chǎn)生進(jìn)程切換。主要缺點(diǎn)是應(yīng)用程序不 能使自己陷入長(zhǎng)期的連續(xù)運(yùn)算中,這樣會(huì)導(dǎo)致通訊性能下降,原因是TCP/IP處理與連續(xù)運(yùn)算是不能并行發(fā)生的。這個(gè)缺點(diǎn)可以通過(guò)把應(yīng)用
89、程序分為兩部分來(lái)克 服,一部分處理通訊,一部分處理運(yùn)算。</p><p> lwip API把接收與處理放在一個(gè)線程里面。這樣只要處理流程稍微被延遲,接收就會(huì)被阻塞,直接造成頻繁丟包、響應(yīng)不及時(shí)等嚴(yán)重問(wèn)題。因此,接收與協(xié)議處理必須分開(kāi)。LwIP顯然已經(jīng)考慮到了這一點(diǎn),他為我們提供了tcpip_input()函數(shù)來(lái)處理這個(gè)問(wèn)題,雖然他并沒(méi)有在rawapi一文中說(shuō)明。我們都應(yīng)該知道tcpip_input()函數(shù),它
90、們來(lái)自于由底層網(wǎng)絡(luò)驅(qū)動(dòng)組成的接收線程。我們?cè)诰帉?xiě)網(wǎng)絡(luò)驅(qū)動(dòng)時(shí),其接收部分以任務(wù)的形式創(chuàng)建。數(shù)據(jù)包到達(dá)后,去掉以太網(wǎng)包頭得到IP包,然后直接調(diào)用tcpip_input()函數(shù)將其投遞到mbox郵箱。投遞結(jié)束,接收任務(wù)繼續(xù)下一個(gè)數(shù)據(jù)包的接收,而被投遞得IP包將由TCPIP線程繼續(xù)處理。這樣,即使某個(gè)IP包的處理時(shí)間過(guò)長(zhǎng)也不會(huì)造成頻繁丟包現(xiàn)象的發(fā)生。這就是lwip API。</p><p> BSD API提供了基于o
91、pen-read-write-close模型的UNIX標(biāo)準(zhǔn)API,它的最大特點(diǎn)是使應(yīng)用程序移植到其它系統(tǒng)時(shí)比較容易,但用在嵌入式系統(tǒng)中效率比較低,占用資源多。這對(duì)于我們的嵌入式應(yīng)用有時(shí)是不能容忍的。</p><p> 圖3-5 LwIP示意圖</p><p> 2.2 LwIP的以太網(wǎng)數(shù)據(jù)接收</p><p> 圖3-6 LwIP數(shù)據(jù)的接收示意圖</
92、p><p> LWIP使用了一個(gè)eth_hdr的數(shù)據(jù)結(jié)構(gòu)來(lái)描述以太網(wǎng)數(shù)據(jù)包包頭的14個(gè)字節(jié)。如下,</p><p> PACK_STRUCT_BEGIN </p><p> struct eth_hdr { </p><p> PACK_STRUCT_FIELD(struct eth_addr dest); //目標(biāo) MAC 地址&
93、lt;/p><p> PACK_STRUCT_FIELD(struct eth_addr src); //源 MAC 地址</p><p> PACK_STRUCT_FIELD(u16_t type); //類型</p><p> } PACK_STRUCT_STRUCT; </p><p> PACK_ST
94、RUCT_END </p><p> 其中PACK_STRUCT_xxx 都是與編譯器字對(duì)齊相關(guān)的宏定義,</p><p> 上面的dest、src和type三個(gè)字段分別和上圖中的目的MAC地址、源MAC地址和類型域</p><p> 數(shù)據(jù)包接收進(jìn)程,源代碼如下:</p><p> void ethernetif_input(vo
95、id *arg) //創(chuàng)建該進(jìn)程</p><p><b> {</b></p><p> struct eth_hdr *ethhdr;</p><p> struct pbuf *p;</p><p> struct netif *netif = (struct netif *)arg;</p>
96、;<p><b> while (1)</b></p><p><b> {</b></p><p> p = low_level_input (netif);</p><p> if (p == NULL)</p><p><b> continue;</b
97、></p><p> ethhdr = p->payload; //取得數(shù)據(jù)包內(nèi)數(shù)據(jù)</p><p> switch (htons(ethhdr->type)) //判斷數(shù)據(jù)包類型</p><p> { //只對(duì)IP數(shù)據(jù)包和ARP數(shù)據(jù)包進(jìn)行處理</p><p>
98、case ETHTYPE_IP: //IP數(shù)據(jù)包</p><p> case ETHTYPE_ARP: //ARP數(shù)據(jù)包</p><p> if (netif->input(p, netif)!=ERR_OK) //將數(shù)據(jù)包發(fā)送到上層應(yīng)用函數(shù)</p><p><b> {</b></p>&
99、lt;p> pbuf_free(p);</p><p><b> p = NULL;</b></p><p><b> }</b></p><p><b> break;</b></p><p><b> default:</b></
100、p><p> pbuf_free(p);</p><p><b> p = NULL;</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b><
101、/p><p><b> }</b></p><p> 在數(shù)據(jù)包接收進(jìn)程中,有三個(gè)需要注意的地方。一是數(shù)據(jù)包接收的方法是查詢方式,即處理器不斷向網(wǎng)卡芯片中讀取數(shù)據(jù),如果讀不到數(shù)據(jù),則控制器會(huì)重新啟動(dòng)一個(gè)讀取時(shí)序;如果能夠成功讀取到數(shù)據(jù),則將數(shù)據(jù)通過(guò)網(wǎng)卡注冊(cè)的input函數(shù)交往上層進(jìn)行處理。使用查詢方式實(shí)現(xiàn)的數(shù)據(jù)包接收進(jìn)程其優(yōu)先級(jí)必須低于系統(tǒng)中其他進(jìn)程的優(yōu)先級(jí),否則它會(huì)阻
102、塞比它優(yōu)先級(jí)低的進(jìn)程的運(yùn)行。上面的程序有個(gè)可以改進(jìn)的地方,即在讀取到的數(shù)據(jù)包為空時(shí),接收進(jìn)程調(diào)用系統(tǒng)函數(shù)將自己延時(shí)一段時(shí)間再啟動(dòng)下一個(gè)讀取過(guò)程,這樣可以使其不能阻止優(yōu)先級(jí)更低的進(jìn)程的運(yùn)行,缺點(diǎn)是數(shù)據(jù)包的接收得不到及時(shí)的響應(yīng)。其實(shí)數(shù)據(jù)包的接收可以采用中斷的方式來(lái)實(shí)現(xiàn),這種方式是一種比較好的方式。一般的網(wǎng)卡芯片都有中斷功能,即當(dāng)網(wǎng)卡接收到一個(gè)數(shù)據(jù)包后,它可以產(chǎn)生中斷信號(hào)告訴控制器自己接收到一個(gè)數(shù)據(jù)包。控制器此時(shí)啟動(dòng)一個(gè)讀取數(shù)據(jù)包時(shí)序,就能有
103、效的讀取到非空數(shù)據(jù)包。所以可以這樣來(lái)實(shí)現(xiàn)一個(gè)接收數(shù)據(jù)包進(jìn)程:在無(wú)數(shù)據(jù)包收到時(shí),數(shù)據(jù)包接收進(jìn)程阻塞在一個(gè)信號(hào)量下,當(dāng)有數(shù)據(jù)包到來(lái)時(shí),網(wǎng)卡芯片產(chǎn)生一個(gè)中斷信號(hào),處理器進(jìn)入中斷處理,并釋放一個(gè)信號(hào)量。中斷退出后,數(shù)據(jù)包接收進(jìn)程得到信號(hào)量,并從網(wǎng)卡芯片</p><p> 第二個(gè)需要注意的地方是htons(ethhdr->type)函數(shù)的使用,htons函數(shù)的功能是將一個(gè)半字長(zhǎng)的數(shù)據(jù)從網(wǎng)絡(luò)字節(jié)順序轉(zhuǎn)換到我們的處理器
104、支持的字節(jié)順序。解釋一下,在計(jì)算機(jī)體系結(jié)構(gòu)和計(jì)算機(jī)通信領(lǐng)域中,對(duì)于半字、字等的存儲(chǔ)機(jī)制有可能不同。目前通常采用的存儲(chǔ)機(jī)制主要有兩種:big-endian和little-endian,即大端和小端。對(duì)于大端模式,某個(gè)半字或字?jǐn)?shù)據(jù)的高位字節(jié)被在內(nèi)存的低地址端,低位字節(jié)排放在內(nèi)存的高地址端。對(duì)于小端模式,則恰好相反。由于我們使用的ARM處理器使用的是小端模式,而接收到的網(wǎng)絡(luò)字節(jié)數(shù)據(jù)用的是大端模式,所以這里調(diào)用函數(shù)htons實(shí)現(xiàn)大端與小端的轉(zhuǎn)換
105、,實(shí)際就是將兩個(gè)字節(jié)交換順序即可。在調(diào)用htons(ethhdr->type)后,ethhdr->type的值就為0x0800或0x0806等。最后需要注意的地方,netif->input在結(jié)構(gòu)enc28j60初始化時(shí)已經(jīng)被設(shè)置為指向tcpip_input函數(shù),所以實(shí)際上上面是調(diào)用tcpip_input函數(shù)往上層遞交數(shù)據(jù)包。tcpip_input屬于IP層函數(shù),從這里我們可以看出LWIP的一個(gè)很大的特點(diǎn),即各層之<
106、;/p><p> 3. LwIP協(xié)議棧的初始化</p><p> 在在使用LwIP 協(xié)議棧之前,需要初始化協(xié)議棧。協(xié)議棧本身會(huì)啟動(dòng)一個(gè)TCP的線程,和協(xié)議相關(guān)的處理都會(huì)放在這個(gè)線程中完成。</p><p> #include rtthread.h</p><p> #ifdef RT USING LWIP</p><
107、;p> #include lwip/sys.h</p><p> #include netif/ethernetif.h</p><p><b> #endif</b></p><p> void rt init thread entry(void *parameter)</p><p><b&
108、gt; {</b></p><p> #ifdef RT USING LWIP</p><p> { extern void lwip sys init(void); /*初始化以太網(wǎng)線程*/</p><p> eth system device init(); /*注冊(cè)以太網(wǎng)接口驅(qū)動(dòng)*/</p><p&g
109、t; rt hw stm32 eth init(); /*初始化注冊(cè)的設(shè)備驅(qū)動(dòng)*/</p><p> rt device init all(); /*初始化LwIP系統(tǒng)*/</p><p> lwip sys init();</p><p> rt kprintf("TCP/IP initialized!\n");&l
110、t;/p><p><b> }</b></p><p><b> #endif</b></p><p><b> }</b></p><p> int rt application init()</p><p><b> {</b
111、></p><p> rt thread t init thread;</p><p> init thread = rt thread create("init", rt init thread entry, RT NULL,2048, 10, 5);</p><p> if (init thread != RT N
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于Cortex-M3的以太網(wǎng)串口服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于ARM Cortex-M3的遠(yuǎn)程水聲通信海測(cè)平臺(tái).pdf
- 基于ARM Cortex的嵌入式以太網(wǎng)通信的實(shí)現(xiàn).pdf
- 基于ARM Cortex-M3的迷宮電腦鼠設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于ARM Cortex-M3的語(yǔ)音合成軟件系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于ARM Cortex-M3的嵌入式系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于ARM Cortex-M3的通用數(shù)據(jù)終端的設(shè)計(jì).pdf
- 基于ARM Cortex-M3的嵌入式開(kāi)發(fā)環(huán)境構(gòu)建與實(shí)現(xiàn).pdf
- 基于ARM Cortex-M3的智能監(jiān)控器的設(shè)計(jì).pdf
- 對(duì)基于ARM Cortex-M3嵌入式系統(tǒng)的仿真.pdf
- 基于ARM Cortex-M3內(nèi)核斷路器監(jiān)測(cè)組件的研究與實(shí)現(xiàn).pdf
- 基于ARM Cortex-M3織帶機(jī)控制系統(tǒng)的研究.pdf
- 基于ARM Cortex-M3的車輛行駛記錄儀研究設(shè)計(jì).pdf
- 基于ARM Cortex-M3數(shù)字音頻網(wǎng)絡(luò)廣播終端的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于Cortex-M3 ARM的自由擺平衡控制系統(tǒng)的研究.pdf
- 基于Cortex-M3的USB轉(zhuǎn)CAN研究與實(shí)現(xiàn).pdf
- 基于Cortex-M3的動(dòng)態(tài)稱重系統(tǒng).pdf
- 基于ARM Cortex-M3嵌入式視頻監(jiān)控系統(tǒng)設(shè)計(jì).pdf
- 基于Cortex-M3的WSN網(wǎng)關(guān)的設(shè)計(jì).pdf
- 基于STELLARIS CORTEX-M3的高速球的設(shè)計(jì)與實(shí)現(xiàn).pdf
評(píng)論
0/150
提交評(píng)論