版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、畢業(yè)論文(設計)中文題目 嵌入式計算機系統(tǒng)的設計 學生姓名 專業(yè) 層次年級 學號 指導教師 職稱 學習中心 成績 年 月 日摘 要 嵌入式系統(tǒng)是以應用為中心,以計算機技術為基礎,軟、硬件可裁剪,適應應用系統(tǒng),對功能、可靠性、成本、體積、功耗等有嚴格要求的專用計算機系統(tǒng)。它具有以下特點:1、 與應用密切相關 嵌入式系統(tǒng)作為機器或設備的組成部分,與具體的應用密切相關。2、 實時性 嵌入式系統(tǒng)必須在實時方式下工作,若在規(guī)定的時間內某一請求得不到處理或者處理沒有結束,可能會帶來嚴重的后果。3、 復雜的算法 對不同的應用,嵌入式系統(tǒng)有不同的算法。4、 制造成本 在某些情況下,制造成本決定了含有嵌入式系統(tǒng)
2、的設備或產品能否在市場上被成功地銷售。5、 功耗 許多嵌入式系統(tǒng)采用電池供電,因此對功耗有嚴格的要求。6、 開發(fā)和調試 必須有相應的開發(fā)環(huán)境、開發(fā)工具和調試工具,才能進行開發(fā)和調試。7、 可靠性 嵌入式系統(tǒng)應該能夠可靠地運行,比如能在規(guī)定的溫度、濕度環(huán)境下連續(xù)運行、有一定的抗干擾能力。8、 體積 嵌入式系統(tǒng)一般都要求體積盡可能地小。 隨著計算機技術、信息技術和數(shù)據(jù)技術的發(fā)展,嵌入式系統(tǒng)的將向著更加小、更快速、功耗更低以及互聯(lián)網的方向發(fā)展。關鍵詞:可靠性 實時性 抗干擾第一章緒論1.1嵌入式系統(tǒng)1.1.1嵌入式系統(tǒng)簡介隨著計算機技術和微電子技術的迅速發(fā)展,嵌入式系統(tǒng)應用領域越來越廣泛。當今,嵌入
3、式系統(tǒng)已成為一個時髦的名詞,就像當初的計算機熱潮,似乎比當初的計算機熱潮涉及的領域更廣泛,應用技術人員更多,相關國民經濟產值也更龐大。報紙、雜志、網絡都把嵌入式系統(tǒng)當作討論的熱門話題。1.1.2 實時多任務操作系統(tǒng)rtos(real time multi-tasking operation system),即實時多任務操作系統(tǒng)是嵌入式應用軟件的基礎和開發(fā)平臺。目前在中國大多數(shù)嵌入式軟件開發(fā)還是基于處理器直接編寫,沒有采用商品化的rtos,不能將系統(tǒng)軟件和應用軟件分開處理。rtos是一段嵌入在目標代碼中的軟件,用戶的其它應用程序都建立在rtos之上。不但如此,rtos還是一個可靠性和可信性很高的
4、實時內核,將cpu時間、中斷、i/o、定時器等資源都包裝起來,留給用戶一個標準的api,并根據(jù)各個任務的優(yōu)先級,合理地在不同任務之間分配cpu時間。 tos是針對不同處理器優(yōu)化設計的高效率實時多任務內核,優(yōu)秀商品化的rtos可以面對幾十個系列的嵌入式處理器mpu、mcu、dsp、soc等提供類同的api接口,這是rtos基于設1.1.3嵌入式操作系統(tǒng)的發(fā)展狀況國外嵌入式操作系統(tǒng)已經從簡單走向成熟,主要有vmware、qnx、palmas、windows ce、嵌入式linux等。國內的嵌入式操作系統(tǒng)研究開發(fā)有2種類型,一類是基于國外操作系統(tǒng)2次開發(fā)完成的,如海信的基于windows ce的機頂
5、盒系統(tǒng);另一類是中國自主開發(fā)的嵌入式操作系統(tǒng),如凱思集團公司自主研制開發(fā)的嵌入式操作系統(tǒng)hope os(“女媧計劃”)等。 1.1.4嵌入式系統(tǒng)軟件的特點嵌入式處理器的應用軟件是實現(xiàn)嵌入式系統(tǒng)功能的關鍵,對嵌入式處理器系統(tǒng)軟件和應用軟件的要求也和通用計算機有所不同。 1.軟件要求固態(tài)化存儲。為了提高執(zhí)行速度和系統(tǒng)可靠性,嵌入式系統(tǒng)中的軟件一般都固化在存儲器芯片或單片機本身中,而不是存貯于磁盤等載體中。 2.軟件代碼高質量、高可靠性。盡管半導體技術的發(fā)展使處理器速度不斷提高、片上存儲器容量不斷增加,但在大多數(shù)應用中,存儲空間仍然是寶貴的,還存在實時性的要求。為此要求程序編寫和編譯工具的質量要高,
6、以減少程序二進制代碼長度、提高執(zhí)行速度。 3.系統(tǒng)軟件(os)的高實時性是基本要求。在多任務嵌入式系統(tǒng)中,對重要性各不相同的任務進行統(tǒng)籌兼顧的合理調度是保證每個任務及時執(zhí)行的關鍵,單純通過提高處理器速度是無法完成和沒有效率的,這種任務調度只能由優(yōu)化編寫的系統(tǒng)軟件來完成,因此系統(tǒng)軟件的高實時性是基本要求。 4.多任務操作系統(tǒng)是知識集成的平臺和走向工業(yè)標準化道路的基礎。1.2嵌入式開發(fā)概述1.2.1 嵌入式系統(tǒng)開發(fā)需要開發(fā)工具和環(huán)境 通用計算機具有完善的人機接口界面,在上面增加一些開發(fā)應用程序和環(huán)境即可進行對自身的開發(fā)。而嵌入式系統(tǒng)本身不具備自舉開發(fā)能力,即使設計完成以后用戶通常也是不能對其中的程
7、序功能進行修改的,必須有一套開發(fā)工具和環(huán)境才能進行開發(fā),這些工具和環(huán)境一般是基于通用計算機上的軟硬件設備以及各種邏輯分析儀、混合信號示波器等。 1.2.2 嵌入式系統(tǒng)軟件需要rtos開發(fā)平臺 通用計算機具有完善的操作系統(tǒng)和應用程序接口(api),是計算機基本組成不可分離的一部分,應用程序的開發(fā)以及完成后的軟件都在os平臺上面運行,但一般不是實時的。嵌入式系統(tǒng)則不同,應用程序可以沒有操作系統(tǒng)直接在芯片上運行;但是為了合理地調度多任務、利用系統(tǒng)資源、系統(tǒng)函數(shù)以及和專家?guī)旌瘮?shù)接口,用戶必須自行選配rtos開發(fā)平臺,這樣才能保證程序執(zhí)行的實時性、可靠性,并減少開發(fā)時間,保障軟件質量。 1.2.3 嵌入
8、式系統(tǒng)開發(fā)人員以應用專家為主 通用計算機的開發(fā)人員一般是計算機科學或計算機工程方面的專業(yè)人士,而嵌入式系統(tǒng)則是要和各個不同行業(yè)的應用相結合的,要求更多的計算機以外的專業(yè)知識,其開發(fā)人員往往是各個應用領域的專家。因此開發(fā)工具的易學、易用、可靠、高效是基本要求。1.2.4嵌入式系統(tǒng)高級編程語言ada語言是20世紀70年代美國國防部開發(fā)并投入使用的功能強大的通用系統(tǒng)開發(fā)語言,最初為ada83。它支持模塊化、獨立編譯、協(xié)處理等功能。其可靠性、可維護性、可讀性都是相當好的。后來,為了更好地支持oop(object-oriented programming),對其進行了改進,形成了目前廣泛使用的ada95
9、。使用ada語言可以大大改善系統(tǒng)的清晰性、可靠性、可維護性等性能指標2,3。它是美國國防部指定的唯一一種可用于軍用系統(tǒng)開發(fā)的語言。第二章arm處理器結構和arm指令集 2.1arm處理器結構arm(advanced risc machines)是微處理器行業(yè)的一家知名企業(yè),該企業(yè)設計了大量高性能、廉價、耗能低的risc處理器、相關技術及軟件。技術具有性能高、成本低和能耗省,適用于多種領域,比如嵌入控制、消費/教育類多媒體、dsp和移動式應用等。arm處理器的框架如圖2-1所示指令解碼地址自增器nresetnmreqseqabortnirqnfiqnrwmas1:0lockncpicpacpbn
10、waitmclknopcbigendisyncntransnm4:0桶形移位器32 位 alu寫數(shù)據(jù) 寄存器讀數(shù)據(jù) 寄存器地址寄存器寄存器a31:0abe及控制 邏輯pc update解碼站指令 解碼incrementerpcabusbbus 圖2-1arm處理器架構2.1.1寄存器和處理器模式1.arm 有7個基本工作模式:user:非特權模式,大部分任務執(zhí)行在這種模式。限制你的內存訪問并且你不能直接讀取硬件設備正常程序執(zhí)行的模式fiq:當一個高優(yōu)先級(fast)中斷產生時將會進入這種模式高速數(shù)據(jù)傳輸和通道處理irq:當一個低優(yōu)先級(normal)中斷產生時將會進入這種模式通常的中斷處理su
11、pervisor:當復位或軟中斷指令執(zhí)行時將會進入這種模式供操作系統(tǒng)使用的一種保護模式程序計數(shù)器構造如下圖2-2: 2731n z c v q2867i f t mode1623 815 54024fsxc u n d e f i n e dj圖2-2 程序計數(shù)器構造n 條件位:n n = 1-結果為負,0-結果為正或0n z = 1-結果為0,0-結果不為0n c =1-進位,0-借位n v =1-結果溢出,0結果沒溢出n q 位:n 僅arm 5te/j架構支持n 指示增強型dsp指令是否溢出n j 位n 僅arm 5te/j架構支持n j = 1: 處理器處于jazelle狀態(tài)n 中斷禁
12、止位:n i = 1: 禁止 irq.n f = 1: 禁止 fiq.n t bitn 僅arm xt架構支持n t = 0: 處理器處于 arm 狀態(tài)n t = 1: 處理器處于 thumb 狀態(tài)n mode位(處理器模式位):n 0b10000usern 0b10001fiqn 0b10010irqn 0b10011supervisorn 0b10111abortn 0b11011undefinedn 0b11111systemn 當處理器執(zhí)行在arm狀態(tài):n 所有指令 32 bits 寬n 所有指令必須 word 對齊n 所以 pc值由bits 31:2決定, bits 1:0 未定義
13、(所以指令不能halfword / byte對齊).n 當處理器執(zhí)行在thumb狀態(tài):n 所有指令 16 bits 寬n 所有指令必須 halfword 對齊n 所以 pc值由bits 31:1決定, bits 0 未定義 (所以指令不能 byte對齊).n 當處理器執(zhí)行在jazelle狀態(tài):n 所有指令 8 bits 寬n 處理器執(zhí)行 word 存取一次取4條指令2.2arm指令集2.2.1arm存貯訪問指令arm存貯訪問指令如下表2-1: 表2-1 arm存貯訪問指令助記符說明操作條件碼位置mul rd,rm,rs32位乘法指令rdrm*rs (rdrm)mulcondsmla rd,rm
14、,rs,rn32位乘法指令rdrm*rs+rn (rdrm)mlacondsumull rdlo,rdhi,rm,rs64位無符號乘法指令(rdlo,rdhi)rm*rsumullcondsumlal rdlo,rdhi,rm,rs64位無符號乘法指令(rdlo,rdhi)rm*rs+(rdlo,rdhi)umlalcondssmull rdlo,rdhi,rm,rs64位無符號乘法指令(rdlo,rdhi)rm*rssmullcondssmlal rdlo,rdhi,rm,rs64位無符號乘法指令(rdlo,rdhi)rm*rs+(rdlo,rdhi)smlalconds2.2.2數(shù)據(jù)處理指
15、令數(shù)據(jù)處理指令如下表2-2 表2-2 數(shù)據(jù)處理指令助記符號說明操作條件碼位置mov rd,operand2數(shù)據(jù)轉送rd-operand2mov condsmvn rd,operand2數(shù)據(jù)非轉送rd-(not)operand2mvn condsadd rd,rn,operand2加法運算指令rd-rn+operand2add condssub rd,rn,operand2減法運算指令rd-rn-operand2sub condsrsb rd,rn,operand2逆向減法指令rd-operand2-rnrsb condsadc rd,rn,operand2帶進位加法rd-rn+operand2
16、+carryadc condsrsc rd,rn,operand2帶進位減法rd-rn-perand2-(not)carryrsc condsand rd,rn,operand2帶進位逆向減法rd-rn&operand2and condsorr rd,rn,operand2邏輯或操作指令rd-rn|operand2orr condseor rd,rn,operand2邏輯異或操作指令rd-rnoperand2eor condsbic rd,rn,operand2位清除指令rd-rn(operand2)bic condcmp rd,rn,operand2比較指令標志n、z、c、v-rn-oper
17、and2cmp condcmn rd,rn,operand2負數(shù)比較指令標志n、z、c、v-rn+operand2cmn condtst rd,rn,operand2位測試指令標志n、z、c、v-rn&operand2tst condteq rd,rn,operand2相等測試指令標志n、z、c、v-rnoperand2teq cond2.2.3乘法指令乘法指令如下表2-3:表2-3 乘法指令助記符說明操作條件碼位置mul rd,rm,rs32位乘法指令rdrm*rs (rdrm)mulcondsmla rd,rm,rs,rn32位乘法指令rdrm*rs+rn (rdrm)mlacondsum
18、ull rdlo,rdhi,rm,rs64位無符號乘法指令(rdlo,rdhi)rm*rsumullcondsumlal rdlo,rdhi,rm,rs64位無符號乘法指令(rdlo,rdhi)rm*rs+(rdlo,rdhi)umlalcondssmull rdlo,rdhi,rm,rs64位無符號乘法指令(rdlo,rdhi)rm*rssmullcondssmlalcondssmlalcondssmlalcondssmlalconds2.2.4 跳轉指令跳轉指令如下表2-4: 表2-4 跳轉指令助記符說明操作條件碼位置b label跳轉指令pclabelbcondbl label帶鏈接的跳
19、轉指令lrpc-4,pclabelblcondrx rm帶狀態(tài)切換的跳轉指令pclable,切換處理狀態(tài)bxcond2.2.5雜項指令雜項指令如下表2-5: 表2-5 雜項指令助記符說明操作條件碼位置swi immed_24軟中斷指令產生軟中斷,處理器進入管理模式swicondmrs rd,psr讀狀態(tài)寄存器指令rdpsr,psr為cpsr或spsrmrscondmrs psr_fields,rd/#immed_8r寫狀態(tài)寄存器指令psr_fieldsrd/#immed_8r,psr為cpsr或spsrmsrcond2.2.6thumb指令集thumb指令可以作是arm指令壓縮形式的子集,是針
20、對代碼密度的問題而提出的,它具有16位的代碼密度。thumb不是一個完整的體系結構,不能指望處理只執(zhí)行thumb指令而不支持arm指令集。thumb指令集沒有協(xié)處理器指令。arm和thumb之間切換使用bx 指令。 thumb指令與arm指令在實現(xiàn)上差別不大,在此就不再對thumb指令集進行詳細的介紹了。第三章c/os-的移植3.1移植的要求和準備這一章介紹如何將c/os-移植到不同的處理器上。所謂移植,就是使一個實時內核能在某個微處理器或微控制器上運行。為了方便移植,大部分的c/os-代碼是用c語言寫的;但仍需要用c和匯編語言寫一些與處理器相關的代碼,這是因為c/os-在讀寫處理器寄存器時只
21、能通過匯編語言來實現(xiàn)。由于c/os-在設計時就已經充分考慮了可移植性,所以c/os-的移植相對來說是比較容易的。要使c/os-正常運行,處理器必須滿足以下要求:3.2移植具體過程3.2.1 c/os-的軟硬件結構體系samsung s3c44b0x微處理器是三星公司專為手持設備和其它嵌入式應用提供的高性價比的微控制器解決方案。它使用arm公司的16位/32位risc結構,內核是arm7tdmi,工作在66mhz,片上集成了以下部件:8k cache、外部存儲器控制器、lcd控制器、4個dma通道、2個uart、1個多主i2c總線控制器、1個i2c總線控制器,以及5通道pwm定時器和1個內部定時
22、器、8通道12位adc等,能夠與常用的外圍設備實現(xiàn)無縫連接,功能強大。目前,國內應用較為廣泛。c/os-應用程序c/os-處理器無關代碼os-core.c os-q.cos-mbox.c os-men.cos-task.c c/os-.cos-time.c c/os-.hos-sem.cc/os-設置(應用相關)os-cfg.hincludes.hc/os-處理器相關代碼os_cpu.h os_cpu_a.asmos_cpu_c.cc/os-編譯器相關定義存儲器系統(tǒng)時鐘外圍設備處 理 器圖3-1 c/os-軟硬件體系結構 圖3.1說明了c/os-ii的軟硬件體系結構。應用程序處于整個系統(tǒng)的頂層
23、,每個任務都可以認為自已獨占了cpu,因而可以設計成為一個無限循環(huán)。c/os-ii處理器無關的代碼提供了c/os-ii的系統(tǒng)服務,應用程序可以使用這些api函數(shù)進行內存管理、任務間通信及創(chuàng)建、刪除任務等。大部分的c/os-ii代碼是使用ansi c語言書寫的,因此c/os-ii的可移植性好,然而仍需要使用c和匯編語言寫一些處理器相關代碼。c/os-ii的移植需要滿足以下要求:1.處理器的c編譯器可以產生可重入代碼;2.可以使用c調用進入和退出臨界區(qū)代碼;3.處理器必須支持硬件中斷,并且需要一個定時中斷源;4.處理器需要能夠容納一定數(shù)據(jù)的硬件堆棧;5.處理器需要有能夠在cpu寄存器與內核和堆棧交
24、換數(shù)據(jù)的指令。s3c44b0x處理器完全滿足上述要求。3.2.2 實時內核c/os-ii在s3c44b0x上的移植我們使用arm sdt編譯器,移植c/os-ii主要包括以下幾個步驟。1.設置os_cpu.h中與處理器和編譯器相關的代碼*與編譯器相關的數(shù)據(jù)類型*typedef unsigned char boolean;typedef unsigned char int8u; /8位無符號整數(shù)typedef signed char int8s; /8位有符號整數(shù)typedef unsigned short int16u; /16位有符號整數(shù)typedef signed short int16s
25、; /16位無符號整數(shù)typedef unsigned long int32u; /32位無符號整數(shù)typedef signed long int32s; /32位有符號整數(shù)typedef float fp32; /單精度浮點數(shù)typedef double fp64; /雙精度浮點數(shù)typedef unsigned int os_stk; /*堆棧入口寬度為16位與arm處理器相關的代碼:*/#define os_enter_critical () armenableint() /開啟中斷#define os_stk_growth 1 /堆棧由高地址向低地址增長2.用c語言編寫6個操作系統(tǒng)相關
26、的函數(shù)(os_cpu_c.c)void ostaskstkinit(void(task)(void *pd),void *pdata,void *ptos,int16u opt) unsigned int *stk;*-stk=0; /*r9*/ldmfd sp!,r4msr spsr_cxsf,r4ldmfd sp!,r0-r12,lr pc完成上述工作后,c/os-ii就可以運行在arm處理器上了。3.2.3 使用c/os-ii系統(tǒng)應注意的問題1.c/os-ii和linux等分時操作系統(tǒng)不同,不支持時間片輪轉法。它是一個基于優(yōu)先級的實時操作系統(tǒng)。每一個任務的優(yōu)先級必須不同(分析它的源碼會發(fā)
27、現(xiàn),c/os-ii把任務的優(yōu)先級當作任務在標識來使用,如果優(yōu)先級相同,任務將無法區(qū)分)。進入就緒態(tài)的優(yōu)先級最高的任務首先得到cpu的使用權,只有等它交出cpu的使用權后,其它任務才可以被執(zhí)行。所以,它只能就是多任務,不能就是多進程,至少不是我們所熟悉的那種多進程。2.c/os-ii對共享資源提供了保護的機制。c/os-ii是一個支持多任務的操作系統(tǒng)。我們可以把一個完整的程序劃分成幾個任務,不同的任務執(zhí)行不同的功能。對于共享資源(比如串口),c/os-ii也提供了很好的解決辦法,一般情況下使用的是信號量方法。我們創(chuàng)也第四章網絡轉串口驅動的開發(fā)4.1lwip在c/os-上的移植4.1.1開源tcp
28、/ip協(xié)議棧lwip簡介隨著嵌入式系統(tǒng)與網絡的日益結合,在嵌入式實時操作系統(tǒng)中引入tcp/ip協(xié)議棧,以支持嵌入式設備接入網絡,成為嵌入式領域重要的研究方向。uc/0s ii是近年來發(fā)展迅速的一tcp/ip實現(xiàn)的重點是在保持tcp協(xié)議主要功能的基礎上減少對ram的占用,一般它只需要幾十k的ram和40k左右的rom就可以運行,這使lwip協(xié)議棧適合在低端嵌入式系統(tǒng)中使用。4.1.2基于uc/0s ii的網絡平臺概述 嵌入式操作系統(tǒng)uc/0s ii是一個公開源代碼的占先式多任務的微內核rtos,其性能和安全性可以與商業(yè)產品競爭。uc/0s ii的特點可以概括為以下幾個方面:公開源代碼,代碼化的,
29、用戶需要付費才能獲得,很少給出源代碼,這影響了uc/0s ii的研究和推廣。通過把開放源代碼的tcp/ip協(xié)議棧lwip移植到uc/0s ii上來,就獲得了一套可免費研究、學習的嵌入式網絡軟件平臺。系統(tǒng)示意圖如下圖4-1: 圖4-1 uc/0s iilwip系統(tǒng)示意圖4.1.3 lwip在uc/0s ii下的實現(xiàn) lwip協(xié)議棧在設計時就考慮到了將來的移植問題,因此把所有與硬件、os、編譯器相關的部份獨立出來,放在/src/arch目錄下。因此lwip在uc/0s ii上的實現(xiàn)就是修改這個目錄下的文件,其它的文件一般不應該修改。下面分幾部份分別說明相應文件的實現(xiàn)原理和過程?,F(xiàn)在網上最新的版本是
30、v0.6.41.lwip的進程模型(process model)tcp/ip協(xié)議棧的process model一般有幾種方式.(1)tcp/ip協(xié)議的每一層是一個單獨進程.鏈路層是一個進程,ip層是一個進程,tcp層是一個進程。這樣的好處是網絡協(xié)議的每一層都非常清晰,代碼的調試和理解都非常容易.但是最大的壞處數(shù)據(jù)跨層傳遞時會引起上下文切換(context switch).對于接收一個tcp segment要引起3次context switch(從網卡驅動程序到鏈路層進程,從鏈路層進程到ip層進程,從ip層進程到tcp進程).通常對于操作系統(tǒng)來說,任務切換是要浪費時間的.過頻的context s
31、wich是不可取的.(2)另外一種方式是tcp/ip協(xié)議棧在操作系統(tǒng)內核當中.應用程序通過操作系統(tǒng)的系統(tǒng)調用(system call)和協(xié)議棧來進行通訊。這樣tcp/ip的協(xié)議棧就限定于特定的操作系統(tǒng)內核了.如windows就是這種方式.。2.port lwip to ucos (其實在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
32、中.操作系統(tǒng)封裝層的主要函數(shù)如下: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)建一個郵箱rch.txt.文件. (2) lwip在ucos上的移植. 系統(tǒng)初始化sys_int必須在tcpip協(xié)議棧任務tcpip_thread創(chuàng)建前被調用.#define max_queues20#define max_queue_entries20 &lwip_task_s
33、tkcurr_prio_offsetlwip_stk_size-1,lwip_start_prio+curr_prio_offset );curr_prio_offset+; return 1; else / print( lwip task prio out of range ! error! );從代碼中可以看出tcpip_thread應該是最先創(chuàng)建的.lwip中的定時事件。在tcp/ip協(xié)議中很多時候都要用到定時,定時的實現(xiàn)也是tcp/ip協(xié)議棧中一個重要的部分.lwip中定時事件的數(shù)據(jù)結構如下. struct sys_timeout struct sys_timeout *next;
34、/指向下一個定時結構u32_t time;/定時時間sys_timeout_handler h; /定時時間到后執(zhí)行的函數(shù)void *arg; /定時時間到后執(zhí)行函數(shù)的參數(shù).;struct sys_timeouts struct sys_timeout *next;struct sys_timeouts lwip_timeoutslwip_task_max;lwip中的定時事件表的結構如下圖,每個和tcp/ip相關的任務的一系列定時事件組成一個單向鏈表.每個鏈表的起始指針存在lwip_timeouts的對應表項中,如下圖4-2 圖4-2lwip中的定時事件表的結構函數(shù)sys_arch_time
35、outs返回對應于當前任務的指向定時事件鏈表的起始指針.該指針存在lwip_timeoutsmax_lwip_tasks中.struct sys_timeouts null_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 = ostaskquery(os_prio_self,&curr_task_pcb);curr_prio = curr_task_
36、pcb.ostcbprio;offset = curr_prio - lwip_start_prio;/判斷當前任務優(yōu)先級是不是tcp/ip相關任務,優(yōu)先級5-9if(offset = lwip_task_max)return &null_timeouts;return &lwip_timeoutsoffset;ping 5 l 2000 t,不間斷用長度為2000的數(shù)據(jù)報進行ping測試,同時使用tftp客戶端軟件給5下載一個十幾兆程序,同時再使用telnet連接5端口7(echo端口),往該端口寫數(shù)測試echo功能.在運行一
37、段時間以后,開發(fā)板進入不再響應.我當時也是經過長時間的分析才發(fā)現(xiàn)是因為在低優(yōu)先級任務運行ys_arch_timeouts()時被高優(yōu)先級任務打斷改寫了curr_task_tcb的值,從而使sys_arch_timeouts返回的指針錯誤,進而導致系統(tǒng)死鎖.函數(shù)sys_timeout給當前任務增加一個定時事件:void sys_timeout(u32_t msecs, sys_timeout_handler h, void *arg)struct sys_timeouts *timeouts;struct sys_timeout *timeout, *t;timeout = memp_mallo
38、c(memp_sys_timeout); /為定時事件分配內存if (timeout = null) return;timeout-next = null;timeout-h = h;timeout-arg = arg;timeout-time = msecs;timeouts = sys_arch_timeouts(); /返回當前任務定時事件鏈表起始指針if (timeouts-next = null) /如果鏈表為空直接增加該定時事件timeouts-next = timeout;return;/如果鏈表不為空,對定時事件進行排序.注意定時事件中的time存儲的是本事件/時間相對于前一事
39、件的時間的差值if (timeouts-next-time msecs) *data = null;/單位轉換,從ucos tick-mstimeout = (ucos_timeout -ucerr)*(1000/ os_ticks_per_sec);return timeout;semaphone的實現(xiàn)和mbox類似,這里就不再重復了.4.2mac和ip地址設置4.2.1嵌入式網絡設備中mac及ip地址的特點 mac地址在這里特指以太網定義的一個48位(6字節(jié))地址。每臺連到以太網網絡的計算機分配一個唯一的48位(6字節(jié))數(shù)字,即它的以太網地址。為分配地址,以太網硬件制造商購買以太網地址塊,
40、在生產以太網接口硬件時順序給它們分配。mac地址屬于物理層的地址,對于不同類型的網絡,其物理址分配方式不同,但本論文中介紹的設置方法都適用。ip地址(ip address)也叫互連網地址(internet address)。它是tcp/ip的設計人員選擇的一個類似于物理網絡的編址地址。互連網上的每個主機都分配了一個唯一的32位(4字節(jié))整數(shù)地址。ip地址屬于軟件協(xié)議層的地址。只要主機上運行tcp/ip協(xié)議,其ip地址的編址方式就符合這個統(tǒng)一標準。在嵌入式系統(tǒng)中,操作系統(tǒng)和所有的應用軟件都被固化到flash等存儲設備中。在嵌入式系統(tǒng)中很少使用外存。嵌入式系統(tǒng)的啟動往往也是“自動”的,即從上電到處
41、于工作狀態(tài),不用人的介入。這是嵌入式設備應用的要求和特點嵌入式網絡設備中的mac及ip地址的設置有它的特點:1.關心和接觸嵌入式網絡設備mac地址的人比關心和接觸通用計算機mac地址的人多得多。 件。4.2.2mac及ip地址的設置 本嵌入式網絡設備系統(tǒng)的mac及ip地址設置的基本思想是:把mac及ip地址存放在flash的未用扇區(qū)(一般在高扇區(qū)),嵌入式操作系統(tǒng)啟動后,自動運行一個程序去讀取mac及ip地址并設置它。用戶如何把mac及ip地址放到flash中?通過計算機串口與網絡設備的rs232接口(即串口)相連,使用超級終端的方式,運行網絡設備中的程序把數(shù)據(jù)寫入flash中。先運行提供的t
42、ftpd32文件出現(xiàn)界面如下圖4-3所示: 下圖4-4是下載并運行 test.bin 的一個例子(提供源碼) 圖4-3 tftpd32文件出現(xiàn)界面 圖4-4 利用tftp下載并運行 test.bin 的一個例子3:參數(shù)設置和程序自動裝載運行:到了這兒就不得不提參數(shù)的設置了:輸入 printenv 命令,如下圖4-5:有幾條是常用的設置,說一下:設置pc 機 的ip地址:setenv severip 0存儲一下: saveenv 如下圖4-6: 圖4-5輸入 printenv 命令的結果界面設置波特率:setenv baudrate 115200saveenv(不存入fla
43、sh 下次啟動無效)設置下載文件名:setenv bootfile “44btest.bin”(加上引號)saveenv設置啟動時倒記時(單位秒)setenv bootdelay 9saveenv也可以一次設置多個參數(shù)最后再 saveenv其中 bootcmd 參數(shù)是設置啟動后倒記時到后的自動執(zhí)行命令的,非常有用, 可以用批處理的方法來執(zhí)行,象 dos 的autoexec.bat例如:設置啟動后顯示幫助文件,并且自動從網口下載 bootfile設置的文件并運行:setenv bootcmd ? ; tftp ; go 0x0c008000saveenv其中“ ; ”表示一個命令的延續(xù) “ ”是
44、轉義符?!?;”表示多命令隔開這樣也可以實現(xiàn)依次執(zhí)行多命令 如: ?;go 0x0c008000 表示顯示幫助,再轉到0x0c008000執(zhí)行 圖4-6輸入 saveenv 命令的結果界面4.3串口驅動的實現(xiàn)4.3.1串口原理簡介 1. 異步串行i/o 異步串行方式是將數(shù)據(jù)的每一個字符一位接一位(例如先低位、后高位)地傳送。數(shù)據(jù)的各不同位可以分時使用同一傳輸通道,因此串行i/o可以減少信號連線,最少用一對線即可進行。接收放對于同一根線上一連串的數(shù)字信號,首先要分割成位,再按位組成字符。為了恢復發(fā)送的信息,雙方必須協(xié)調工作。在微型計算機中大量使用異步串行i/o方式,雙方使用各自的時鐘信號,而且允許
45、時鐘頻率有一定誤差,因此實現(xiàn)較容易。但是由于每個字符都要獨立確定起始和結束(即每個字符都要重新同步),字符和字符間還可能有長度不定的空閑時間,因此效率較低。 圖4-7異步串行通信中一個字符的傳送格式圖4-7給出異步串行通信中一個字符的傳送格式。開始前,線路處于空閑狀態(tài),送出連續(xù)“1”。傳送開始時首先發(fā)一個“0”作為起始位,然后出現(xiàn)在通信線上的是字符的二進制編碼數(shù)據(jù)。每個字符的數(shù)據(jù)位長可以約定為5位、6位、7位或8位,一般采用asc編碼。后面是奇偶校驗位,根據(jù)約定,用奇偶校驗位將所傳字符中為“1”的位數(shù)湊成奇數(shù)個或偶數(shù)個。也可以約定不要奇偶校驗,這樣就取消奇偶校驗位。最后是表示停止位的“1”信號
46、,這個停止位可以約定持續(xù)1位、1.5位或2位的時間寬度。至此一個字符傳送完畢,線路有進入空閑,持續(xù)為“1”。經過一段隨機的時間后,下一個字符開始傳送又發(fā)出起始位。每一個數(shù)據(jù)位的寬度等于傳送波特率的倒數(shù)。微機異步串行通信中,常用的波特率為50,95,110,150,300,600,1200,2400,4800,9600等。接收芳按約定的格式接收數(shù)據(jù),并進行檢查,可以查出以下三種錯誤:奇偶錯 在約定奇偶檢查的情況下,接收到的字符奇偶狀態(tài)和約定不符。貞格式錯 一個字符從起始位到停止位的總數(shù)不對。溢出錯 若先接收的字符尚未被微機讀取,后面的字符又傳送過來,則產生溢出錯,每一種錯誤都會給出相應的出錯信息
47、,提示用戶處理。串口寄存器如下表4-1和4-2所示: 表4-1串口寄存器registoraddressr/wdescriptionulcon00x01d0000r/wuart channel 0 line control registorulcon10x01d4000r/wuart channel 1 line control registor 表4-2串口寄存器ulcon nbitreserved 7 infra-red mode 6 partity mode 5:3 number of stop bit 2 word length 1:0 由上表可以看出,該串口寄存器的第六位決定是否使用紅
48、外模式,為53決定校驗方式,位2決定停止位長度,位1,0決定每幀的數(shù)據(jù)位數(shù)。uart控制寄存器uconn,該寄存器決定uart的各種模式。uart fifo控制寄存器ufconn,ufconn的第0位決定是否啟用fifo,umconn的第0位是請求發(fā)送位。最重要的兩個寄存器是發(fā)送寄存器utxh 和接收寄存器urxh,我們最終實現(xiàn)串口通信就要用到這兩個寄存器的相關函數(shù)。4.3.2在c/os-操作系統(tǒng)上實現(xiàn)arm串口功能 (1)在main函數(shù)中添加串行口的寄存器初始化代碼,并添加串行口掃描任務。串口掃描任務如下:void uart_scan_task1(void *id)char c1;posms
49、g pmsg1;for (;)if(uart_getch(&c1,0,1)pmsg1=oscreatemessage(null,osm_serial,0,c1);if(pmsg1)sendmessage(pmsg1);(2)當系統(tǒng)收到串口信息時,將會自動向主任務發(fā)送一個串口消息。主任務接收到該消息,將會調用響應函數(shù)。響應函數(shù)如下:void onserial(int portn, char c)lcd_changemode(dsptxtmode);lcd_printf(%cn,c);uart_sendbyte(0,c);(3)添加主任務void main_task(void *id) /main_test_taskposmsg pmsg=0;clearscreen();/消息循環(huán)for(;)pmsg=waitmessage(0); /等待消息switch(pmsg-message)case osm_key:onkey(pmsg-wparam,pmsg-lparam);break;case osm_serial:onserial(pmsg-wparam,pmsg-lparam);break;4.3.3整個網絡轉串口驅動的實現(xiàn) 我們開發(fā)的這個驅動的任務是要實現(xiàn)是使開發(fā)板能從網口
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 20870.4-2024半導體器件第16-4部分:微波集成電路開關
- 發(fā)展規(guī)劃部總經理崗位職責說明
- 高中地理 第三章 自然資源的利用與保護 3.2 非可再生資源合理開發(fā)利用對策教案 新人教版選修6
- 八年級歷史下冊 第五單元 第15課《獨立自主的和平外交》教學設計含教后反思 新人教版
- 河北省淶水波峰中學七年級地理上冊 3.4 世界的氣候說課稿 新人教版
- 2023四年級數(shù)學上冊 七 三位數(shù)除以兩位數(shù)的除法說課稿 西師大版
- 2024-2025學年高二地理第3周教學設計
- 租奶牛合同(2篇)
- 綜合班組合同(2篇)
- 房屋租賃合同(2篇)
- 全套企業(yè)管理流程(文字版)
- 檢驗科規(guī)章制度
- ICC國際商會NCNDA和IMFPA中英文對照可編輯
- 關于房屋建筑和市政工程界定文件
- 各種表面活性劑耐堿性一覽表
- 我最喜歡的運動英語作文(精選3篇)
- 北師大版小學四年級數(shù)學上冊全冊說課稿
- 農村初中留守學生心理健康問題調查問卷(可編輯).doc
- 【中考英語】中考看圖寫話質量分析
- 關于生態(tài)美育的思考-生態(tài)美育3篇
- 畢節(jié)衛(wèi)生學校護理專業(yè)人才培養(yǎng)目標評估報告
評論
0/150
提交評論