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