版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 畢業(yè)論文(設(shè)計(jì))</b></p><p> 中文題目 嵌入式計(jì)算機(jī)系統(tǒng)的設(shè)計(jì) </p><p> 學(xué)生姓名 專(zhuān)業(yè) </p><p> 層次年級(jí) 學(xué)號(hào) </p>
2、<p> 指導(dǎo)教師 職稱(chēng) </p><p> 學(xué)習(xí)中心 成績(jī) </p><p><b> 年 月 日</b></p><p><b> 摘 要</b></p><p> 嵌
3、入式系統(tǒng)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟、硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng),對(duì)功能、可靠性、成本、體積、功耗等有嚴(yán)格要求的專(zhuān)用計(jì)算機(jī)系統(tǒng)。它具有以下特點(diǎn):</p><p> 與應(yīng)用密切相關(guān) 嵌入式系統(tǒng)作為機(jī)器或設(shè)備的組成部分,與具體的應(yīng)用密切相關(guān)。</p><p> 實(shí)時(shí)性 嵌入式系統(tǒng)必須在實(shí)時(shí)方式下工作,若在規(guī)定的時(shí)間內(nèi)某一請(qǐng)求得不到處理或者處理沒(méi)有結(jié)束,可能會(huì)帶來(lái)嚴(yán)重的后果。<
4、/p><p> 復(fù)雜的算法 對(duì)不同的應(yīng)用,嵌入式系統(tǒng)有不同的算法。</p><p> 制造成本 在某些情況下,制造成本決定了含有嵌入式系統(tǒng)的設(shè)備或產(chǎn)品能否在市場(chǎng)上被成功地銷(xiāo)售。</p><p> 功耗 許多嵌入式系統(tǒng)采用電池供電,因此對(duì)功耗有嚴(yán)格的要求。</p><p> 開(kāi)發(fā)和調(diào)試 必須有相應(yīng)的開(kāi)發(fā)環(huán)境、開(kāi)發(fā)工具和調(diào)試工具,才能進(jìn)行開(kāi)發(fā)
5、和調(diào)試。</p><p> 可靠性 嵌入式系統(tǒng)應(yīng)該能夠可靠地運(yùn)行,比如能在規(guī)定的溫度、濕度環(huán)境下連續(xù)運(yùn)行、有一定的抗干擾能力。</p><p> 體積 嵌入式系統(tǒng)一般都要求體積盡可能地小。</p><p> 隨著計(jì)算機(jī)技術(shù)、信息技術(shù)和數(shù)據(jù)技術(shù)的發(fā)展,嵌入式系統(tǒng)的將向著更加小、更快速、功耗更低以及互聯(lián)網(wǎng)的方向發(fā)展。</p><p> 關(guān)
6、鍵詞:可靠性 實(shí)時(shí)性 抗干擾</p><p><b> 第一章 緒論</b></p><p><b> 1.1 嵌入式系統(tǒng)</b></p><p> 1.1.1 嵌入式系統(tǒng)簡(jiǎn)介</p><p> 隨著計(jì)算機(jī)技術(shù)和微電子技術(shù)的迅速發(fā)展,嵌入式系統(tǒng)應(yīng)用領(lǐng)域越來(lái)越廣泛。當(dāng)今,嵌入式系統(tǒng)已成為一個(gè)
7、時(shí)髦的名詞,就像當(dāng)初的計(jì)算機(jī)熱潮,似乎比當(dāng)初的計(jì)算機(jī)熱潮涉及的領(lǐng)域更廣泛,應(yīng)用技術(shù)人員更多,相關(guān)國(guó)民經(jīng)濟(jì)產(chǎn)值也更龐大。報(bào)紙、雜志、網(wǎng)絡(luò)都把嵌入式系統(tǒng)當(dāng)作討論的熱門(mén)話(huà)題。</p><p> 1.1.2 實(shí)時(shí)多任務(wù)操作系統(tǒng)</p><p> RTOS(Real Time multi-tasking Operation System),即實(shí)時(shí)多任務(wù)操作系統(tǒng)是嵌入式應(yīng)用軟件的基礎(chǔ)和開(kāi)發(fā)平臺(tái)。
8、目前在中國(guó)大多數(shù)嵌入式軟件開(kāi)發(fā)還是基于處理器直接編寫(xiě),沒(méi)有采用商品化的RTOS,不能將系統(tǒng)軟件和應(yīng)用軟件分開(kāi)處理。RTOS是一段嵌入在目標(biāo)代碼中的軟件,用戶(hù)的其它應(yīng)用程序都建立在RTOS之上。不但如此,RTOS還是一個(gè)可靠性和可信性很高的實(shí)時(shí)內(nèi)核,將CPU時(shí)間、中斷、I/O、定時(shí)器等資源都包裝起來(lái),留給用戶(hù)一個(gè)標(biāo)準(zhǔn)的API,并根據(jù)各個(gè)任務(wù)的優(yōu)先級(jí),合理地在不同任務(wù)之間分配CPU時(shí)間。 </p><p> TOS
9、是針對(duì)不同處理器優(yōu)化設(shè)計(jì)的高效率實(shí)時(shí)多任務(wù)內(nèi)核,優(yōu)秀商品化的RTOS可以面對(duì)幾十個(gè)系列的嵌入式處理器MPU、MCU、DSP、SOC等提供類(lèi)同的API接口,這是RTOS基于設(shè)</p><p> 1.1.3 嵌入式操作系統(tǒng)的發(fā)展?fàn)顩r</p><p> 國(guó)外嵌入式操作系統(tǒng)已經(jīng)從簡(jiǎn)單走向成熟,主要有VMware、QNX、Palmas、Windows CE、嵌入式Linux等。國(guó)內(nèi)的嵌入式操作系
10、統(tǒng)研究開(kāi)發(fā)有2種類(lèi)型,一類(lèi)是基于國(guó)外操作系統(tǒng)2次開(kāi)發(fā)完成的,如海信的基于Windows CE的機(jī)頂盒系統(tǒng);另一類(lèi)是中國(guó)自主開(kāi)發(fā)的嵌入式操作系統(tǒng),如凱思集團(tuán)公司自主研制開(kāi)發(fā)的嵌入式操作系統(tǒng)Hope OS(“女?huà)z計(jì)劃”)等。 </p><p> 1.1.4 嵌入式系統(tǒng)軟件的特點(diǎn)</p><p> 嵌入式處理器的應(yīng)用軟件是實(shí)現(xiàn)嵌入式系統(tǒng)功能的關(guān)鍵,對(duì)嵌入式處理器系統(tǒng)軟件和應(yīng)用軟件的要求也和通
11、用計(jì)算機(jī)有所不同。 </p><p> 1.軟件要求固態(tài)化存儲(chǔ)?!榱颂岣邎?zhí)行速度和系統(tǒng)可靠性,嵌入式系統(tǒng)中的軟件一般都固化在存儲(chǔ)器芯片或單片機(jī)本身中,而不是存貯于磁盤(pán)等載體中。 </p><p> 2.軟件代碼高質(zhì)量、高可靠性?!”M管半導(dǎo)體技術(shù)的發(fā)展使處理器速度不斷提高、片上存儲(chǔ)器容量不斷增加,但在大多數(shù)應(yīng)用中,存儲(chǔ)空間仍然是寶貴的,還存在實(shí)時(shí)性的要求。為此要求程序編寫(xiě)和編譯工具的質(zhì)
12、量要高,以減少程序二進(jìn)制代碼長(zhǎng)度、提高執(zhí)行速度。 </p><p> 3.系統(tǒng)軟件(OS)的高實(shí)時(shí)性是基本要求。 在多任務(wù)嵌入式系統(tǒng)中,對(duì)重要性各不相同的任務(wù)進(jìn)行統(tǒng)籌兼顧的合理調(diào)度是保證每個(gè)任務(wù)及時(shí)執(zhí)行的關(guān)鍵,單純通過(guò)提高處理器速度是無(wú)法完成和沒(méi)有效率的,這種任務(wù)調(diào)度只能由優(yōu)化編寫(xiě)的系統(tǒng)軟件來(lái)完成,因此系統(tǒng)軟件的高實(shí)時(shí)性是基本要求。 </p><p> 4.多任務(wù)操作系統(tǒng)是知識(shí)集成的平
13、臺(tái)和走向工業(yè)標(biāo)準(zhǔn)化道路的基礎(chǔ)。</p><p> 1.2 嵌入式開(kāi)發(fā)概述</p><p> 1.2.1 嵌入式系統(tǒng)開(kāi)發(fā)需要開(kāi)發(fā)工具和環(huán)境 </p><p> 通用計(jì)算機(jī)具有完善的人機(jī)接口界面,在上面增加一些開(kāi)發(fā)應(yīng)用程序和環(huán)境即可進(jìn)行對(duì)自身的開(kāi)發(fā)。而嵌入式系統(tǒng)本身不具備自舉開(kāi)發(fā)能力,即使設(shè)計(jì)完成以后用戶(hù)通常也是不能對(duì)其中的程序功能進(jìn)行修改的,必須有一套開(kāi)發(fā)工具和
14、環(huán)境才能進(jìn)行開(kāi)發(fā),這些工具和環(huán)境一般是基于通用計(jì)算機(jī)上的軟硬件設(shè)備以及各種邏輯分析儀、混合信號(hào)示波器等。 </p><p> 1.2.2 嵌入式系統(tǒng)軟件需要RTOS開(kāi)發(fā)平臺(tái) </p><p> 通用計(jì)算機(jī)具有完善的操作系統(tǒng)和應(yīng)用程序接口(API),是計(jì)算機(jī)基本組成不可分離的一部分,應(yīng)用程序的開(kāi)發(fā)以及完成后的軟件都在OS平臺(tái)上面運(yùn)行,但一般不是實(shí)時(shí)的。嵌入式系統(tǒng)則不同,應(yīng)用程序可以沒(méi)有操
15、作系統(tǒng)直接在芯片上運(yùn)行;但是為了合理地調(diào)度多任務(wù)、利用系統(tǒng)資源、系統(tǒng)函數(shù)以及和專(zhuān)家?guī)旌瘮?shù)接口,用戶(hù)必須自行選配RTOS開(kāi)發(fā)平臺(tái),這樣才能保證程序執(zhí)行的實(shí)時(shí)性、可靠性,并減少開(kāi)發(fā)時(shí)間,保障軟件質(zhì)量。 </p><p> 1.2.3 嵌入式系統(tǒng)開(kāi)發(fā)人員以應(yīng)用專(zhuān)家為主 </p><p> 通用計(jì)算機(jī)的開(kāi)發(fā)人員一般是計(jì)算機(jī)科學(xué)或計(jì)算機(jī)工程方面的專(zhuān)業(yè)人士,而嵌入式系統(tǒng)則是要和各個(gè)不同行業(yè)的應(yīng)用相
16、結(jié)合的,要求更多的計(jì)算機(jī)以外的專(zhuān)業(yè)知識(shí),其開(kāi)發(fā)人員往往是各個(gè)應(yīng)用領(lǐng)域的專(zhuān)家。因此開(kāi)發(fā)工具的易學(xué)、易用、可靠、高效是基本要求。</p><p> 1.2.4 嵌入式系統(tǒng)高級(jí)編程語(yǔ)言</p><p> Ada語(yǔ)言是20世紀(jì)70年代美國(guó)國(guó)防部開(kāi)發(fā)并投入使用的功能強(qiáng)大的通用系統(tǒng)開(kāi)發(fā)語(yǔ)言,最初為Ada83。它支持模塊化、獨(dú)立編譯、協(xié)處理等功能。其可靠性、可維護(hù)性、可讀性都是相當(dāng)好的。后來(lái),為了更
17、好地支持OOP(Object-Oriented Programming),對(duì)其進(jìn)行了改進(jìn),形成了目前廣泛使用的Ada95。使用Ada語(yǔ)言可以大大改善系統(tǒng)的清晰性、可靠性、可維護(hù)性等性能指標(biāo)[2,3]。它是美國(guó)國(guó)防部指定的唯一一種可用于軍用系統(tǒng)開(kāi)發(fā)的語(yǔ)言。</p><p> 第二章 ARM處理器結(jié)構(gòu)和ARM指令集 </p><p> 2.1 ARM處理器結(jié)構(gòu)</p>
18、<p> ARM(Advanced RISC Machines)是微處理器行業(yè)的一家知名企業(yè),該企業(yè)設(shè)計(jì)了大量高性能、廉價(jià)、耗能低的RISC處理器、相關(guān)技術(shù)及軟件。技術(shù)具有性能高、成本低和能耗省,適用于多種領(lǐng)域,比如嵌入控制、消費(fèi)/教育類(lèi)多媒體、DSP和移動(dòng)式應(yīng)用等。</p><p> ARM處理器的框架如圖2-1所示</p><p> 圖2-1 ARM處理器架構(gòu)<
19、/p><p> 2.1.1 寄存器和處理器模式</p><p> 1.ARM 有7個(gè)基本工作模式:</p><p> User:非特權(quán)模式,大部分任務(wù)執(zhí)行在這種模式。限制你的內(nèi)存訪(fǎng)問(wèn)并且你不能直接讀取硬件設(shè)備</p><p><b> 正常程序執(zhí)行的模式</b></p><p> FIQ:當(dāng)
20、一個(gè)高優(yōu)先級(jí)(fast)中斷產(chǎn)生時(shí)將會(huì)進(jìn)入這種模式</p><p> 高速數(shù)據(jù)傳輸和通道處理</p><p> IRQ:當(dāng)一個(gè)低優(yōu)先級(jí)(normal)中斷產(chǎn)生時(shí)將會(huì)進(jìn)入這種模式</p><p><b> 通常的中斷處理</b></p><p> Supervisor:當(dāng)復(fù)位或軟中斷指令執(zhí)行時(shí)將會(huì)進(jìn)入這種模式<
21、;/p><p> 供操作系統(tǒng)使用的一種保護(hù)模式</p><p> 程序計(jì)數(shù)器構(gòu)造如下圖2-2: </p><p> 圖2-2 程序計(jì)數(shù)器構(gòu)造</p><p><b> 條件位:</b></p><p> N = 1-結(jié)果為負(fù),0-結(jié)果為正或0</p><p> Z
22、 = 1-結(jié)果為0,0-結(jié)果不為0</p><p> C =1-進(jìn)位,0-借位</p><p> V =1-結(jié)果溢出,0結(jié)果沒(méi)溢出</p><p><b> Q 位:</b></p><p> 僅ARM 5TE/J架構(gòu)支持</p><p> 指示增強(qiáng)型DSP指令是否溢出</p>
23、;<p><b> J 位</b></p><p> 僅ARM 5TE/J架構(gòu)支持</p><p> J = 1: 處理器處于Jazelle狀態(tài)</p><p><b> 中斷禁止位:</b></p><p> I = 1: 禁止 IRQ.</p><
24、;p> F = 1: 禁止 FIQ.</p><p><b> T Bit</b></p><p> 僅ARM xT架構(gòu)支持</p><p> T = 0: 處理器處于 ARM 狀態(tài)</p><p> T = 1: 處理器處于 Thumb 狀態(tài)</p><p> Mode位(
25、處理器模式位):</p><p> 0b10000User</p><p> 0b10001FIQ</p><p> 0b10010IRQ</p><p> 0b10011Supervisor</p><p> 0b10111Abort</p><p> 0b11011U
26、ndefined</p><p> 0b11111System</p><p> 當(dāng)處理器執(zhí)行在ARM狀態(tài):</p><p> 所有指令 32 bits 寬</p><p> 所有指令必須 word 對(duì)齊</p><p> 所以 pc值由bits [31:2]決定, bits [1:0] 未定義 (所以指令
27、不能halfword / byte對(duì)齊).</p><p> 當(dāng)處理器執(zhí)行在Thumb狀態(tài):</p><p> 所有指令 16 bits 寬</p><p> 所有指令必須 halfword 對(duì)齊</p><p> 所以 pc值由bits [31:1]決定, bits [0] 未定義 (所以指令不能 byte對(duì)齊).</p>
28、;<p> 當(dāng)處理器執(zhí)行在Jazelle狀態(tài):</p><p> 所有指令 8 bits 寬</p><p> 處理器執(zhí)行 word 存取一次取4條指令</p><p> 2.2 ARM指令集</p><p> 2.2.1 ARM存貯訪(fǎng)問(wèn)指令</p><p> ARM存貯訪(fǎng)問(wèn)指令如下表2-1:
29、</p><p> 表2-1 ARM存貯訪(fǎng)問(wèn)指令</p><p> 2.2.2 數(shù)據(jù)處理指令</p><p> 數(shù)據(jù)處理指令如下表2-2</p><p> 表2-2 數(shù)據(jù)處理指令</p><p> 2.2.3 乘法指令</p><p> 乘法指令如下表2-3:</p>
30、<p><b> 表2-3 乘法指令</b></p><p> 2.2.4 跳轉(zhuǎn)指令</p><p> 跳轉(zhuǎn)指令如下表2-4:</p><p> 表2-4 跳轉(zhuǎn)指令</p><p> 2.2.5 雜項(xiàng)指令</p><p> 雜項(xiàng)指令如下表2-5:</p>
31、<p> 表2-5 雜項(xiàng)指令</p><p> 2.2.6 Thumb指令集</p><p> Thumb指令可以作是ARM指令壓縮形式的子集,是針對(duì)代碼密度的問(wèn)題而提出的,它具有16位的代碼密度。Thumb不是一個(gè)完整的體系結(jié)構(gòu),不能指望處理只執(zhí)行Thumb指令而不支持ARM指令集。Thumb指令集沒(méi)有協(xié)處理器指令。ARM和Thumb之間切換使用BX 指令。</p
32、><p> Thumb指令與ARM指令在實(shí)現(xiàn)上差別不大,在此就不再對(duì)Thumb指令集進(jìn)行詳細(xì)的介紹了。</p><p> 第三章 µC/OS-Ⅱ的移植</p><p> 3.1 移植的要求和準(zhǔn)備</p><p> 這一章介紹如何將µC/OS-Ⅱ移植到不同的處理器上。所謂移植,就是使一個(gè)實(shí)時(shí)內(nèi)核能在某個(gè)微處理器或微控制器
33、上運(yùn)行。為了方便移植,大部分的µC/OS-Ⅱ代碼是用C語(yǔ)言寫(xiě)的;但仍需要用C和匯編語(yǔ)言寫(xiě)一些與處理器相關(guān)的代碼,這是因?yàn)?#181;C/OS-Ⅱ在讀寫(xiě)處理器寄存器時(shí)只能通過(guò)匯編語(yǔ)言來(lái)實(shí)現(xiàn)。由于µC/OS-Ⅱ在設(shè)計(jì)時(shí)就已經(jīng)充分考慮了可移植性,所以µC/OS-Ⅱ的移植相對(duì)來(lái)說(shuō)是比較容易的。</p><p> 要使µC/OS-Ⅱ正常運(yùn)行,處理器必須滿(mǎn)足以下要求:</p&g
34、t;<p> 3.2 移植具體過(guò)程</p><p> 3.2.1 µC/OS-Ⅱ的軟硬件結(jié)構(gòu)體系</p><p> Samsung S3C44B0X微處理器是三星公司專(zhuān)為手持設(shè)備和其它嵌入式應(yīng)用提供的高性?xún)r(jià)比的微控制器解決方案。它使用ARM公司的16位/32位RISC結(jié)構(gòu),內(nèi)核是ARM7TDMI,工作在66MHz,片上集成了以下部件:8K Cache、外部存
35、儲(chǔ)器控制器、LCD控制器、4個(gè)DMA通道、2個(gè)UART、1個(gè)多主I2C總線(xiàn)控制器、1個(gè)I2C總線(xiàn)控制器,以及5通道PWM定時(shí)器和1個(gè)內(nèi)部定時(shí)器、8通道12位ADC等,能夠與常用的外圍設(shè)備實(shí)現(xiàn)無(wú)縫連接,功能強(qiáng)大。目前,國(guó)內(nèi)應(yīng)用較為廣泛。</p><p> 圖3-1 µC/OS-Ⅱ軟硬件體系結(jié)構(gòu)</p><p> 圖3.1說(shuō)明了μC/OS-II的軟硬件體系結(jié)構(gòu)。應(yīng)
36、用程序處于整個(gè)系統(tǒng)的頂層,每個(gè)任務(wù)都可以認(rèn)為自已獨(dú)占了CPU,因而可以設(shè)計(jì)成為一個(gè)無(wú)限循環(huán)。μC/OS-II處理器無(wú)關(guān)的代碼提供了μC/OS-II的系統(tǒng)服務(wù),應(yīng)用程序可以使用這些API函數(shù)進(jìn)行內(nèi)存管理、任務(wù)間通信及創(chuàng)建、刪除任務(wù)等。</p><p> 大部分的μC/OS-II代碼是使用ANSI C語(yǔ)言書(shū)寫(xiě)的,因此μC/OS-II的可移植性好,然而仍需要使用C和匯編語(yǔ)言寫(xiě)一些處理器相關(guān)代碼。μC/OS-II的移植
37、需要滿(mǎn)足以下要求:</p><p> 1.處理器的C編譯器可以產(chǎn)生可重入代碼;</p><p> 2.可以使用C調(diào)用進(jìn)入和退出臨界區(qū)代碼;</p><p> 3.處理器必須支持硬件中斷,并且需要一個(gè)定時(shí)中斷源;</p><p> 4.處理器需要能夠容納一定數(shù)據(jù)的硬件堆棧;</p><p> 5.處理器需要有能
38、夠在CPU寄存器與內(nèi)核和堆棧交換數(shù)據(jù)的指令。</p><p> S3C44B0X處理器完全滿(mǎn)足上述要求。</p><p> 3.2.2 實(shí)時(shí)內(nèi)核μC/OS-II在S3C44B0X上的移植</p><p> 我們使用ARM SDT編譯器,移植μC/OS-II主要包括以下幾個(gè)步驟。</p><p> 1.設(shè)置OS_CPU.H中與處理器和編
39、譯器相關(guān)的代碼</p><p> *************************************************</p><p> 與編譯器相關(guān)的數(shù)據(jù)類(lèi)型</p><p> *************************************************</p><p> typedef unsi
40、gned char BOOLEAN;</p><p> typedef unsigned char INT8U; //8位無(wú)符號(hào)整數(shù)</p><p> typedef signed char INT8S; //8位有符號(hào)整數(shù)</p><p> typedef unsigned short INT16U; //16位有符號(hào)整數(shù)<
41、;/p><p> typedef signed short INT16S; //16位無(wú)符號(hào)整數(shù)</p><p> typedef unsigned long INT32U; //32位無(wú)符號(hào)整數(shù)</p><p> typedef signed long INT32S; //32位有符號(hào)整數(shù)</p><p>
42、 typedef float FP32; //單精度浮點(diǎn)數(shù)</p><p> typedef double FP64; //雙精度浮點(diǎn)數(shù)</p><p> typedef unsigned int OS_STK; /*堆棧入口寬度為16位與ARM處理器相關(guān)的代碼:*/</p><p> #define OS_ENT
43、ER_CRITICAL () ARMEnableInt() //開(kāi)啟中斷</p><p> #define OS_STK_GROWTH 1 //堆棧由高地址向低地址增長(zhǎng)</p><p> 2.用C語(yǔ)言編寫(xiě)6個(gè)操作系統(tǒng)相關(guān)的函數(shù)(OS_CPU_C.C)</p><p> void OSTaskStkInit(void(task)(void *pd
44、),void *pdata,void *ptos,INT16U opt)</p><p> { unsigned int *stk;</p><p> *--stk=0; /*r9*/</p><p> LDMFD sp!,{r4}</p><p> MSR SPSR_cxsf,r4</p><p> LDM
45、FD sp!,{r0-r12,lr pc}</p><p> 完成上述工作后,μC/OS-II就可以運(yùn)行在ARM處理器上了。</p><p> 3.2.3 使用μC/OS-II系統(tǒng)應(yīng)注意的問(wèn)題</p><p> 1.μC/OS-II和Linux等分時(shí)操作系統(tǒng)不同,不支持時(shí)間片輪轉(zhuǎn)法。它是一個(gè)基于優(yōu)先級(jí)的實(shí)時(shí)操作系統(tǒng)。每一個(gè)任務(wù)的優(yōu)先級(jí)必須不同(分析它的源碼會(huì)發(fā)
46、現(xiàn),μC/OS-II把任務(wù)的優(yōu)先級(jí)當(dāng)作任務(wù)在標(biāo)識(shí)來(lái)使用,如果優(yōu)先級(jí)相同,任務(wù)將無(wú)法區(qū)分)。進(jìn)入就緒態(tài)的優(yōu)先級(jí)最高的任務(wù)首先得到CPU的使用權(quán),只有等它交出CPU的使用權(quán)后,其它任務(wù)才可以被執(zhí)行。所以,它只能就是多任務(wù),不能就是多進(jìn)程,至少不是我們所熟悉的那種多進(jìn)程。</p><p> 2.μC/OS-II對(duì)共享資源提供了保護(hù)的機(jī)制。μC/OS-II是一個(gè)支持多任務(wù)的操作系統(tǒng)。我們可以把一個(gè)完整的程序劃分成幾個(gè)任
47、務(wù),不同的任務(wù)執(zhí)行不同的功能。對(duì)于共享資源(比如串口),μC/OS-II也提供了很好的解決辦法,一般情況下使用的是信號(hào)量方法。我們創(chuàng)也</p><p> 第四章 網(wǎng)絡(luò)轉(zhuǎn)串口驅(qū)動(dòng)的開(kāi)發(fā)</p><p> 4.1 Lwip在µC/OS-Ⅱ上的移植</p><p> 4.1.1 開(kāi)源TCP/IP協(xié)議棧LwIP簡(jiǎn)介</p><p>
48、 隨著嵌入式系統(tǒng)與網(wǎng)絡(luò)的日益結(jié)合,在嵌入式實(shí)時(shí)操作系統(tǒng)中引入TCP/IP協(xié)議棧,以支持嵌入式設(shè)備接入網(wǎng)絡(luò),成為嵌入式領(lǐng)域重要的研究方向。uC/0S II是近年來(lái)發(fā)展迅速的一TCP/IP實(shí)現(xiàn)的重點(diǎn)是在保持TCP協(xié)議主要功能的基礎(chǔ)上減少對(duì)RAM的占用,一般它只需要幾十K的RAM和40K左右的ROM就可以運(yùn)行,這使LwIP協(xié)議棧適合在低端嵌入式系統(tǒng)中使用。</p><p> 4.1.2 基于uC/0S II的網(wǎng)絡(luò)
49、平臺(tái)概述 </p><p> 嵌入式操作系統(tǒng)uC/0S II是一個(gè)公開(kāi)源代碼的占先式多任務(wù)的微內(nèi)核RTOS,其性能和安全性可以與商業(yè)產(chǎn)品競(jìng)爭(zhēng)。uC/0S II的特點(diǎn)可以概括為以下幾個(gè)方面:公開(kāi)源代碼,代碼化的,用戶(hù)需要付費(fèi)才能獲得,很少給出源代碼,這影響了uC/0S II的研究和推廣。通過(guò)把開(kāi)放源代碼的TCP/IP協(xié)議棧LwIP移植到uC/0S II上來(lái),就獲得了一套可免費(fèi)研究、學(xué)習(xí)的嵌入式網(wǎng)絡(luò)軟件平臺(tái)。系統(tǒng)示
50、意圖如下圖4-1:</p><p> 圖4-1 uC/0S II+LwIP系統(tǒng)示意圖</p><p> 4.1.3 LwIP在uC/0S II下的實(shí)現(xiàn) </p><p> LwIP協(xié)議棧在設(shè)計(jì)時(shí)就考慮到了將來(lái)的移植問(wèn)題,因此把所有與硬件、OS、編譯器相關(guān)的部份獨(dú)立出來(lái),放在/src/arch目錄下。因此LwIP在uC/0S II上的實(shí)現(xiàn)就是修改這個(gè)目錄下的文
51、件,其它的文件一般不應(yīng)該修改。下面分幾部份分別說(shuō)明相應(yīng)文件的實(shí)現(xiàn)原理和過(guò)程。</p><p> 現(xiàn)在網(wǎng)上最新的版本是V0.6.4 1.lwip的進(jìn)程模型(process model) tcp/ip協(xié)議棧的process model一般有幾種方式. ?。?)tcp/ip協(xié)議的每一層是一個(gè)單獨(dú)進(jìn)程.鏈路層是一個(gè)進(jìn)程,ip層是一個(gè)進(jìn)程,tcp
52、層是一個(gè)進(jìn)程?!∵@樣的好處是網(wǎng)絡(luò)協(xié) 議的每一層都非常清晰,代碼的調(diào)試和理解都非常容易.但是最大的壞處數(shù)據(jù)跨層傳遞時(shí)會(huì)引起上下文切換(context switch). 對(duì)于接收一個(gè)TCP segment要引起3次context switch(從網(wǎng)卡驅(qū)動(dòng)程序到鏈路層進(jìn)程,從鏈路層進(jìn)程到ip層進(jìn)程,從ip層進(jìn)程到TCP進(jìn)程).通常對(duì)于操作
53、系統(tǒng)來(lái)說(shuō),任務(wù)切換是要浪費(fèi)時(shí)間的.過(guò)頻的context swich是不可取的. (2)另外一種方式是TCP/IP協(xié)議棧在操作系統(tǒng)內(nèi)核當(dāng)中.應(yīng)用程序通過(guò)操作系統(tǒng)的系統(tǒng)調(diào)用(system call)和協(xié)議棧來(lái)進(jìn)行通訊?!∵@樣TCP/IP的協(xié)議棧就限定于特定的操作系統(tǒng)內(nèi)核了.如windows就是這種方式.。</p><p> 2.P
54、ort Lwip to uCos</p><p> (其實(shí)在ucos的實(shí)現(xiàn)中我們使用的是Message Queue來(lái)實(shí)現(xiàn)lwip中的”mbox”,下面大家可以看到這一點(diǎn)) Operating system emulation layer的原代碼在…/lwip/src/core/sys.c中.而和具體的操作系統(tǒng)相關(guān)的代碼在../lwip/src/arch/sys_arch.c中.操作系統(tǒng)封裝層的主要函數(shù)如下:
55、void sys_init(void) //系統(tǒng)初始化sys_thread_t sys_thread_new(void (* function)(void *arg), void *arg,int prio)//創(chuàng)建一個(gè)新進(jìn)程 sys_mbox_t sys_mbox_new(void) //創(chuàng)建一個(gè)郵箱r
56、ch.txt.文件. (2) Lwip在ucos上的移植.?、?系統(tǒng)初始化sys_int必須在tcpip協(xié)議棧任務(wù)tcpip_thread創(chuàng)建前被調(diào)用.#define MAX_QUEUES 20</p><p> ?、邸wip中的定時(shí)事件?!≡趖cp/ip協(xié)議中很多時(shí)候都要用到定時(shí),定時(shí)的實(shí)現(xiàn)也是tcp/ip
57、協(xié)議棧中一個(gè)重要的部分.lwip中定時(shí)事件的數(shù)據(jù)結(jié)構(gòu)如下. struct sys_timeout { struct sys_timeout *next; //指向下一個(gè)定時(shí)結(jié)構(gòu) u32_t time;//定時(shí)時(shí)間 sys_timeout_handler h; //定時(shí)時(shí)間到后執(zhí)行的函數(shù) void *a
58、rg; //定時(shí)時(shí)間到后執(zhí)行函數(shù)的參數(shù).};struct sys_timeouts { struct sys_timeout *next;};struct sys_timeouts lwip_timeouts[LWIP_TASK_MAX];Lwip中的定時(shí)事件表的結(jié)構(gòu)如下圖,每個(gè)和tcp/ip相關(guān)的任務(wù)的一系列定時(shí)事件組成一個(gè)單向鏈表.每個(gè)鏈表的起始指針存在
59、lwip_timeouts的對(duì)應(yīng)表項(xiàng)中,如下圖4-2 </p><p> 圖4-2 Lwip中的定時(shí)事件表的結(jié)構(gòu)</p><p> 函數(shù)sys_arch_timeouts返回對(duì)應(yīng)于當(dāng)前任務(wù)的指向定時(shí)事件鏈表的起始指針.該指針存在lwip_timeouts[MAX_LWIP_TASKS]中.struct sys_timeouts null_
60、timeouts;struct sys_timeouts * sys_arch_timeouts(void){ u8_t curr_prio; s16_t err,offset;OS_TCB curr_task_pcb; null_timeouts.next = NULL; //獲取當(dāng)前任務(wù)的優(yōu)先級(jí) err =
61、OSTaskQuery(OS_PRIO_SELF,&curr_task_pcb); curr_prio = curr_task_pcb.OSTCBPrio; offset = curr_prio - LWIP_START_PRIO; //判斷當(dāng)前任務(wù)優(yōu)先級(jí)是不是tcp/ip相關(guān)任務(wù),優(yōu)先級(jí)5-9 if(offs
62、et < 0 || offset >= LWIP_TASK_MAX) { return &null_tim</p><p> ping 192.168.1.95 –l 2000 –t,不間斷用長(zhǎng)度為2000的數(shù)據(jù)報(bào)進(jìn)行ping測(cè)試,同時(shí)使用tftp客戶(hù)端軟件給192.168.1.95下載一個(gè)十幾兆程序,同時(shí)再使用teln
63、et連接192.168.1.95端口7(echo端口),往該端口寫(xiě)數(shù)測(cè)試echo功能.</p><p> 在運(yùn)行一段時(shí)間以后,開(kāi)發(fā)板進(jìn)入不再響應(yīng).我當(dāng)時(shí)也是經(jīng)過(guò)長(zhǎng)時(shí)間的分析才發(fā)現(xiàn)是因?yàn)樵诘蛢?yōu)先級(jí)任務(wù)運(yùn)行ys_arch_timeouts()時(shí)被高優(yōu)先級(jí)任務(wù)打斷改寫(xiě)了curr_task_tcb的值,從而使sys_arch_timeouts返回的指針錯(cuò)誤,進(jìn)而導(dǎo)致系統(tǒng)死鎖.函數(shù)sys_timeout給當(dāng)前任務(wù)增加一個(gè)
64、定時(shí)事件:void sys_timeout(u32_t msecs, sys_timeout_handler h, void *arg){ struct sys_timeouts *timeouts; struct sys_timeout *timeout, *t; timeout = memp_malloc(MEMP_SYS_TIMEOUT); //為定時(shí)事
65、件分配內(nèi)存 if (timeout == NULL) { return; } timeout->next = NULL; timeout->h = h; timeout->arg = arg; timeout->time =
66、 msecs; timeouts = sys_arc</p><p> 4.2 MAC和IP地址設(shè)置</p><p> 4.2.1 嵌入式網(wǎng)絡(luò)設(shè)備中MAC及IP地址的特點(diǎn)</p><p> MAC地址在這里特指以太網(wǎng)定義的一個(gè)48位(6字節(jié))地址。每臺(tái)連到以太網(wǎng)網(wǎng)絡(luò)的計(jì)算機(jī)分配一個(gè)唯一的48位(6字節(jié))數(shù)字,即它的以太網(wǎng)地址。為分配地址
67、,以太網(wǎng)硬件制造商購(gòu)買(mǎi)以太網(wǎng)地址塊,在生產(chǎn)以太網(wǎng)接口硬件時(shí)順序給它們分配。MAC地址屬于物理層的地址,對(duì)于不同類(lèi)型的網(wǎng)絡(luò),其物理址分配方式不同,但本論文中介紹的設(shè)置方法都適用。</p><p> IP地址(IP address)也叫互連網(wǎng)地址(Internet address)。它是TCP/IP的設(shè)計(jì)人員選擇的一個(gè)類(lèi)似于物理網(wǎng)絡(luò)的編址地址?;ミB網(wǎng)上的每個(gè)主機(jī)都分配了一個(gè)唯一的32位(4字節(jié))整數(shù)地址。IP地址屬
68、于軟件協(xié)議層的地址。只要主機(jī)上運(yùn)行TCP/IP協(xié)議,其IP地址的編址方式就符合這個(gè)統(tǒng)一標(biāo)準(zhǔn)。</p><p> 在嵌入式系統(tǒng)中,操作系統(tǒng)和所有的應(yīng)用軟件都被固化到Flash等存儲(chǔ)設(shè)備中。在嵌入式系統(tǒng)中很少使用外存。嵌入式系統(tǒng)的啟動(dòng)往往也是“自動(dòng)”的,即從上電到處于工作狀態(tài),不用人的介入。這是嵌入式設(shè)備應(yīng)用的要求和特點(diǎn)</p><p> 嵌入式網(wǎng)絡(luò)設(shè)備中的MAC及IP地址的設(shè)置有它的特點(diǎn)
69、:</p><p> 1.關(guān)心和接觸嵌入式網(wǎng)絡(luò)設(shè)備MAC地址的人比關(guān)心和接觸通用計(jì)算機(jī)MAC地址的人多得多。 件。</p><p> 4.2.2 MAC及IP地址的設(shè)置</p><p> 本嵌入式網(wǎng)絡(luò)設(shè)備系統(tǒng)的MAC及IP地址設(shè)置的基本思想是:把MAC及IP地址存放在Flash的未用扇區(qū)(一般在高扇區(qū)),嵌入式操作系統(tǒng)啟動(dòng)后,自動(dòng)運(yùn)行一個(gè)程序去讀取MAC及I
70、P地址并設(shè)置它。</p><p> 用戶(hù)如何把MAC及IP地址放到Flash中?通過(guò)計(jì)算機(jī)串口與網(wǎng)絡(luò)設(shè)備的RS232接口(即串口)相連,使用超級(jí)終端的方式,運(yùn)行網(wǎng)絡(luò)設(shè)備中的程序把數(shù)據(jù)寫(xiě)入Flash中。</p><p> 先運(yùn)行提供的TFTPD32文件出現(xiàn)界面如下圖4-3所示:</p><p> 下圖4-4是下載并運(yùn)行 test.bin 的一個(gè)例子(提供源碼)&
71、lt;/p><p> 圖4-3 TFTPD32文件出現(xiàn)界面</p><p> 圖4-4 利用tftp下載并運(yùn)行 test.bin 的一個(gè)例子</p><p> 3:參數(shù)設(shè)置和程序自動(dòng)裝載運(yùn)行:</p><p> 到了這兒就不得不提參數(shù)的設(shè)置了:</p><p> 輸入 printenv 命令,如下圖4-5:&
72、lt;/p><p> 有幾條是常用的設(shè)置,說(shuō)一下:</p><p> 設(shè)置PC 機(jī) 的IP地址:</p><p> setenv severip 192.168.0.10</p><p> 存儲(chǔ)一下: saveenv </p><p><b> 如下圖4-6:</b></p>
73、<p> 圖4-5 輸入 printenv 命令的結(jié)果界面</p><p><b> 設(shè)置波特率:</b></p><p> setenv baudrate 115200</p><p> saveenv(不存入FLASH 下次啟動(dòng)無(wú)效)</p><p><b> 設(shè)置下載文件名:</
74、b></p><p> setenv bootfile “44btest.bin”(加上引號(hào))</p><p><b> saveenv</b></p><p> 設(shè)置啟動(dòng)時(shí)倒記時(shí)(單位秒)</p><p> setenv bootdelay 9</p><p><b>
75、 saveenv</b></p><p> 也可以一次設(shè)置多個(gè)參數(shù)最后再 saveenv</p><p> 其中 bootcmd 參數(shù)是設(shè)置啟動(dòng)后倒記時(shí)到后的自動(dòng)執(zhí)行命令的,非常有用, 可以用批處理的方法來(lái)執(zhí)行,象 DOS 的AUTOEXEC.BAT</p><p> 例如:設(shè)置啟動(dòng)后顯示幫助文件,并且自動(dòng)從網(wǎng)口下載 BOOTFILE設(shè)置的文件并運(yùn)
76、行:</p><p> setenv bootcmd ?\ ; tftp\ ; go 0x0c008000</p><p><b> saveenv</b></p><p> 其中“\ ; ”表示一個(gè)命令的延續(xù) “\ ”是轉(zhuǎn)義符?!?;”表示多命令隔開(kāi)</p><p> 這樣也可以實(shí)現(xiàn)依次執(zhí)行多命令 如: ?;go
77、 0x0c008000 表示顯示幫助,再轉(zhuǎn)到0x0c008000執(zhí)行</p><p> 圖4-6 輸入 saveenv 命令的結(jié)果界面</p><p> 4.3 串口驅(qū)動(dòng)的實(shí)現(xiàn)</p><p> 4.3.1 串口原理簡(jiǎn)介</p><p> 1. 異步串行I/O</p><p> 異步串行方式是將數(shù)據(jù)的每一個(gè)
78、字符一位接一位(例如先低位、后高位)地傳送。數(shù)據(jù)的各不同位可以分時(shí)使用同一傳輸通道,因此串行I/O可以減少信號(hào)連線(xiàn),最少用一對(duì)線(xiàn)即可進(jìn)行。接收放對(duì)于同一根線(xiàn)上一連串的數(shù)字信號(hào),首先要分割成位,再按位組成字符。為了恢復(fù)發(fā)送的信息,雙方必須協(xié)調(diào)工作。在微型計(jì)算機(jī)中大量使用異步串行I/O方式,雙方使用各自的時(shí)鐘信號(hào),而且允許時(shí)鐘頻率有一定誤差,因此實(shí)現(xiàn)較容易。但是由于每個(gè)字符都要獨(dú)立確定起始和結(jié)束(即每個(gè)字符都要重新同步),字符和字符間還可能
79、有長(zhǎng)度不定的空閑時(shí)間,因此效率較低。</p><p> 圖4-7 異步串行通信中一個(gè)字符的傳送格式</p><p> 圖4-7給出異步串行通信中一個(gè)字符的傳送格式。開(kāi)始前,線(xiàn)路處于空閑狀態(tài),送出連續(xù)“1”。傳送開(kāi)始時(shí)首先發(fā)一個(gè)“0”作為起始位,然后出現(xiàn)在通信線(xiàn)上的是字符的二進(jìn)制編碼數(shù)據(jù)。每個(gè)字符的數(shù)據(jù)位長(zhǎng)可以約定為5位、6位、7位或8位,一般采用ASC編碼。后面是奇偶校驗(yàn)位,根據(jù)約定,
80、用奇偶校驗(yàn)位將所傳字符中為“1”的位數(shù)湊成奇數(shù)個(gè)或偶數(shù)個(gè)。也可以約定不要奇偶校驗(yàn),這樣就取消奇偶校驗(yàn)位。最后是表示停止位的“1”信號(hào),這個(gè)停止位可以約定持續(xù)1位、1.5位或2位的時(shí)間寬度。至此一個(gè)字符傳送完畢,線(xiàn)路有進(jìn)入空閑,持續(xù)為“1”。經(jīng)過(guò)一段隨機(jī)的時(shí)間后,下一個(gè)字符開(kāi)始傳送又發(fā)出起始位。</p><p> 每一個(gè)數(shù)據(jù)位的寬度等于傳送波特率的倒數(shù)。微機(jī)異步串行通信中,常用的波特率為50,95,110,150
81、,300,600,1200,2400,4800,9600等。</p><p> 接收芳按約定的格式接收數(shù)據(jù),并進(jìn)行檢查,可以查出以下三種錯(cuò)誤:</p><p> 奇偶錯(cuò) 在約定奇偶檢查的情況下,接收到的字符奇偶狀態(tài)和約定不符。</p><p> 貞格式錯(cuò) 一個(gè)字符從起始位到停止位的總數(shù)不對(duì)。</p><p> 溢出錯(cuò) 若先接收的
82、字符尚未被微機(jī)讀取,后面的字符又傳送過(guò)來(lái),則產(chǎn)生溢出錯(cuò),每一種錯(cuò)誤都會(huì)給出相應(yīng)的出錯(cuò)信息,提示用戶(hù)處理。</p><p> 串口寄存器如下表4-1和4-2所示:</p><p> 表4-1 串口寄存器</p><p> 表4-2 串口寄存器</p><p> 由上表可以看出,該串口寄存器的第六位決定是否使用紅外模式,為5-3決定校驗(yàn)方
83、式,位2決定停止位長(zhǎng)度,位1,0決定每幀的數(shù)據(jù)位數(shù)。</p><p> UART控制寄存器UCONn,該寄存器決定UART的各種模式。UART FIFO控制寄存器UFCONn,UFCONn的第0位決定是否啟用FIFO,UMCONn的第0位是請(qǐng)求發(fā)送位。</p><p> 最重要的兩個(gè)寄存器是發(fā)送寄存器UTXH 和接收寄存器URXH,我們最終實(shí)現(xiàn)串口通信就要用到這兩個(gè)寄存器的相關(guān)函數(shù)。&
84、lt;/p><p> 4.3.2 在µC/OS-Ⅱ操作系統(tǒng)上實(shí)現(xiàn)ARM串口功能</p><p> ?。?)在main函數(shù)中添加串行口的寄存器初始化代碼,并添加串行口掃描任務(wù)。</p><p><b> 串口掃描任務(wù)如下:</b></p><p> void Uart_Scan_Task1(void *Id)&
85、lt;/p><p><b> {</b></p><p><b> char c1;</b></p><p> POSMSG pmsg1;</p><p><b> for (;;){</b></p><p> if(Uart_Getch(&
86、;c1,0,1))</p><p><b> {</b></p><p> pmsg1=OSCreateMessage(NULL,OSM_SERIAL,0,c1);</p><p><b> if(pmsg1)</b></p><p> SendMessage(pmsg1);</p&g
87、t;<p><b> }</b></p><p><b> }</b></p><p> ?。?)當(dāng)系統(tǒng)收到串口信息時(shí),將會(huì)自動(dòng)向主任務(wù)發(fā)送一個(gè)串口消息。主任務(wù)接收到該消息,將會(huì)調(diào)用響應(yīng)函數(shù)。</p><p><b> 響應(yīng)函數(shù)如下:</b></p><p>
88、; void onSerial(int portn, char c)</p><p><b> {</b></p><p> LCD_ChangeMode(DspTxtMode);</p><p> LCD_printf("%c\n",c);</p><p> Uart_SendByte(0
89、,c);</p><p><b> }</b></p><p><b> (3)添加主任務(wù)</b></p><p> void Main_Task(void *Id) //Main_Test_Task</p><p><b> {</b><
90、/p><p> POSMSG pMsg=0;</p><p> ClearScreen();</p><p><b> //消息循環(huán)</b></p><p><b> for(;;){</b></p><p> pMsg=WaitMessage(0); /
91、/等待消息</p><p> switch(pMsg->Message){</p><p> case OSM_KEY:</p><p> onKey(pMsg->WParam,pMsg->LParam);</p><p><b> break;</b></p><p>
92、 case OSM_SERIAL:</p><p> onSerial(pMsg->WParam,pMsg->LParam);</p><p><b> break;</b></p><p><b> }</b></p><p> 4.3.3 整個(gè)網(wǎng)絡(luò)轉(zhuǎn)串口驅(qū)動(dòng)的實(shí)現(xiàn)</
93、p><p> 我們開(kāi)發(fā)的這個(gè)驅(qū)動(dòng)的任務(wù)是要實(shí)現(xiàn)是使開(kāi)發(fā)板能從網(wǎng)口下載文件,然后從串口輸出到液晶屏。要實(shí)現(xiàn)文件能從開(kāi)發(fā)板的網(wǎng)口下載,則需要移植一個(gè)在µC/OS-Ⅱ下的一個(gè)TCP/IP協(xié)議棧:Lwip。然后設(shè)置開(kāi)發(fā)板的MAC地址和IP地址。如果應(yīng)用層程序駐留tcp/ip進(jìn)程中,那應(yīng)用層程序就利用內(nèi)部回調(diào)函數(shù)口(Raw API)和tcp/ip協(xié)議棧通訊.對(duì)于µC/OS來(lái)說(shuō)進(jìn)程就是一個(gè)系統(tǒng)任務(wù)。然后通過(guò)
94、tftp軟件從網(wǎng)口下載文件到開(kāi)發(fā)板中存貯器中的指定地址。在應(yīng)用層則調(diào)用µC/OS-Ⅱ的幾個(gè)ARI函數(shù)來(lái)完成對(duì)文件的操作,最后用LCD_printf函數(shù)來(lái)完成字符在點(diǎn)陣液晶上的顯示。串口驅(qū)動(dòng)也是通過(guò)調(diào)用API函數(shù),然后在main函數(shù)中建立一個(gè)串口主任務(wù)來(lái)完成串口的對(duì)數(shù)據(jù)的接收和發(fā)送。</p><p> 整個(gè)驅(qū)動(dòng)的原理框圖如下圖4-8所示:</p><p> 圖4-8 整個(gè)驅(qū)動(dòng)
95、的原理框圖</p><p> 整個(gè)網(wǎng)絡(luò)轉(zhuǎn)串口驅(qū)動(dòng)的代碼如下:</p><p> #include"..\ucos-ii\includes.h" // uC/OSII interface</p><p> #include "..\ucos-ii\add\osaddition.h"</
96、p><p> #include "..\inc\drv.h"</p><p> #include <string.h></p><p> #include "..\inc\OSFile.h" //文件類(lèi)函數(shù)頭文件</p><p> /*******
97、***********任務(wù)定義***************/</p><p> OS_STK Main_Stack[STACKSIZE*8]={0, }; //Main_Test_Task堆棧</p><p> void Main_Task(void *Id); //Main_Test_Task</p><
98、;p> #define Main_Task_Prio 12</p><p><b> 結(jié) 論</b></p><p> 嵌入式系統(tǒng)是一個(gè)很有發(fā)展空間的領(lǐng)域,以嵌入式系統(tǒng)為標(biāo)志的后PC時(shí)代已經(jīng)到來(lái)。但嵌入式系統(tǒng)是一個(gè)軟硬件結(jié)合很緊密的課題,特別是涉及到bios開(kāi)發(fā)、bootloader開(kāi)發(fā)方面,則要求你對(duì)硬件要有一個(gè)較深的了解。所以學(xué)習(xí)嵌入式需要掌握
99、了解很多知識(shí),所以學(xué)習(xí)順序一定不能亂,在了解嵌入式系統(tǒng)開(kāi)發(fā)的體系結(jié)構(gòu)后,一步一步的下手。搭建開(kāi)發(fā)環(huán)境需要:硬件平臺(tái), 編譯器, 調(diào)試器, RTOS, C/C++庫(kù), 協(xié)議棧等。建議有志于想把嵌入式學(xué)好者最好先分析一種RTOS的源代碼--UCOS最容易;再分析一種通訊協(xié)議棧的實(shí)現(xiàn)方式--TCP/IP最實(shí)用 ;精通一種單片機(jī)的開(kāi)發(fā)集成環(huán)境--keil C最經(jīng)典;精通一種MCU的開(kāi)發(fā)集成環(huán)境--ADS 1.2最流行。</p>&
100、lt;p> 通過(guò)這次畢業(yè)設(shè)計(jì),我對(duì)計(jì)算機(jī)硬件方面,和對(duì)計(jì)算機(jī)的整個(gè)體系結(jié)構(gòu)從底層驅(qū)動(dòng)到最高應(yīng)用層以及中間那些協(xié)議都有了比較有了一些較具體深入的認(rèn)識(shí)。對(duì)日益滲入到人們生活的各個(gè)領(lǐng)域嵌入式系統(tǒng)的設(shè)計(jì)、開(kāi)發(fā)過(guò)程也有了一個(gè)詳細(xì)的了解。對(duì)我認(rèn)識(shí)問(wèn)題分析問(wèn)題解決問(wèn)題的能力是一個(gè)極好的煅煉,對(duì)我的計(jì)算機(jī)水平也是一個(gè)極大的提高。</p><p> 總之,這次畢業(yè)設(shè)計(jì),我受益匪淺。</p><p>
101、;<b> 致 謝</b></p><p> 首先,感謝我的指導(dǎo)老師xx老師,在畢業(yè)設(shè)計(jì)期間,xx老師耐心教導(dǎo),從很多方面都給予了我悉心的指導(dǎo)。xx老師以其謙和的風(fēng)范、和嚴(yán)謹(jǐn)治學(xué)的態(tài)度以及理論聯(lián)系實(shí)踐的實(shí)干精神都深深地感染了我。我在畢業(yè)設(shè)計(jì)期間,學(xué)會(huì)了在研究中認(rèn)識(shí)問(wèn)題、分析問(wèn)題、解決問(wèn)題的思維和方法。這一切,令我受用終生。</p><p> 其次,感謝同在xx老
102、師指導(dǎo)下做設(shè)計(jì)的同學(xué),在畢業(yè)設(shè)計(jì)期間,大家相互學(xué)習(xí)、相互計(jì)論、相互研究,提出了有創(chuàng)意的見(jiàn)解,提供了大量有用的資料,豐富了我的論文內(nèi)容。</p><p> 最后,感謝所有關(guān)心和幫助過(guò)我們的人們。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 耿德根 等編著.《AVR高速嵌入式單片機(jī)原理與應(yīng)用》. 修訂版.北京航空航天
103、大學(xué)出版社,2002年 [2] 牛德芳 主編.《半導(dǎo)體傳感器原理及其應(yīng)用》.大連理工大學(xué)出版社,1993年 [3] 李朝青 編著.《單片微機(jī)原理及其應(yīng)用技術(shù)》.南開(kāi)大學(xué)出版社,1999年 [4] 李道華 等編著.《傳感器電路分析與設(shè)計(jì)》.武漢大學(xué)出版社,2000年
104、[5] 譚浩強(qiáng) 著.《C程序設(shè)計(jì)》. 第二版.清華大學(xué)出版社,2002年 </p><p> [7]劉崢嶸 張智超 許振山 等編著.郝文化 審.《嵌入式Linux應(yīng)用開(kāi)發(fā)詳解》.</p><p> 機(jī)械工業(yè)出版社,2004.6 </p><p> [8]馬忠梅 李善平 康慨 葉楠 編著.《ARM & Linux嵌入式系統(tǒng)教程》.</
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 嵌入式計(jì)算機(jī)系統(tǒng)功耗散熱分析及優(yōu)化設(shè)計(jì).pdf
- 嵌入式計(jì)算機(jī)系統(tǒng)熱分析及熱優(yōu)化研究.pdf
- 嵌入式計(jì)算機(jī)系統(tǒng)的外部通信硬件模塊的研制.pdf
- 基于Linux和MiniGUI的嵌入式計(jì)算機(jī)系統(tǒng)的研發(fā).pdf
- 基于嵌入式計(jì)算機(jī)系統(tǒng)的數(shù)字化醫(yī)療儀器研究.pdf
- 星載嵌入式計(jì)算機(jī)系統(tǒng)智能容錯(cuò)技術(shù)研究.pdf
- 嵌入式計(jì)算機(jī)可測(cè)試性設(shè)計(jì).pdf
- 嵌入式計(jì)算機(jī)系統(tǒng)在道路考試設(shè)備中的應(yīng)用.pdf
- 基于嵌入式計(jì)算機(jī)的波控系統(tǒng)設(shè)計(jì).pdf
- 基于嵌入式計(jì)算機(jī)系統(tǒng)的飛機(jī)發(fā)動(dòng)機(jī)溫度測(cè)試系統(tǒng).pdf
- 用于水質(zhì)監(jiān)測(cè)的嵌入式計(jì)算機(jī)系統(tǒng)開(kāi)發(fā)與實(shí)驗(yàn)研究.pdf
- 高可信嵌入式計(jì)算機(jī)系統(tǒng)的安全性與易用性設(shè)計(jì).pdf
- 嵌入式計(jì)算機(jī)實(shí)時(shí)操作系統(tǒng)的研究.pdf
- 高性能VXI嵌入式計(jì)算機(jī)研制.pdf
- 嵌入式計(jì)算機(jī)多路高精度測(cè)力系統(tǒng)研制
- 嵌入式可信安全計(jì)算機(jī)系統(tǒng)的研究.pdf
- 嵌入式可信計(jì)算機(jī)系統(tǒng)容錯(cuò)機(jī)制的設(shè)計(jì).pdf
- 基于嵌入式計(jì)算機(jī)的雷達(dá)顯控終端設(shè)計(jì).pdf
- 基于Samsung2410處理器的嵌入式計(jì)算機(jī)系統(tǒng)的研發(fā).pdf
- 嵌入式計(jì)算機(jī)控制系統(tǒng)容錯(cuò)策略研究.pdf
評(píng)論
0/150
提交評(píng)論