基于嵌入式實時操作系統(tǒng)的程序設(shè)計.ppt_第1頁
基于嵌入式實時操作系統(tǒng)的程序設(shè)計.ppt_第2頁
基于嵌入式實時操作系統(tǒng)的程序設(shè)計.ppt_第3頁
基于嵌入式實時操作系統(tǒng)的程序設(shè)計.ppt_第4頁
基于嵌入式實時操作系統(tǒng)的程序設(shè)計.ppt_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第2章 開發(fā)環(huán)境,在基于實時操作統(tǒng)的程序設(shè)計中,開發(fā)環(huán)境主要包括操作系統(tǒng)和微處理器兩部分內(nèi)容。 這兩部分都是使用者根據(jù)實際設(shè)計的需要來選擇的,在本書中,為了方便說明,實時操作系統(tǒng)選用C/OS - ,微處理器選擇ARM7。,2.1 嵌入式實時操作系統(tǒng)的選擇,在嵌入式系統(tǒng)領(lǐng)域,有很多實時操作系統(tǒng)可以選擇,如嵌入式Linux、Windows CE和VxWorks等大批優(yōu)秀的實時操作系統(tǒng)。它們當(dāng)中有些是商業(yè)性的,代碼不公開,有些代碼比較長,不利于學(xué)習(xí)掌握。在眾多的實時操作系統(tǒng)中,我們選擇C/OS -作為例子。,C/OS -是Jean J.Labrosse設(shè)計的完整、可移植、可固化、可剪裁的占先式實時多

2、任務(wù)內(nèi)核,代碼絕大部分是用標(biāo)準(zhǔn)C語言編寫的。到現(xiàn)在為止, C/OS -已經(jīng)被移植到了40多種徽處理器上,這些微處理器從8位到64位都有在各個領(lǐng)域中已經(jīng)有數(shù)千個應(yīng)用使用該內(nèi)核。它有很好的穩(wěn)定性和可靠性。 2000年7月, C/OS -在一個航空項目中取得了美國聯(lián)邦航空管理局用于商用飛機(jī)、符合RTCA DO - 178B標(biāo)準(zhǔn)的認(rèn)證。,C/OS -是一個公開源代碼的操作系統(tǒng),代碼很短(約5 500行),與一些商用的公開源代碼的實時內(nèi)核相比,它的源代碼清晰易讀,結(jié)構(gòu)協(xié)調(diào),注釋詳盡?,F(xiàn)在很多高等學(xué)校將C/OS -應(yīng)用于實時操作系統(tǒng)數(shù)學(xué)。,C/OS -具有可移植性,絕大部分源代碼是用C語言編寫的;而與處處

3、理器密切相關(guān)的部分用匯編語言縮寫。但這一部分內(nèi)容很少,方便使用者將內(nèi)核移植到自己的微處理器上。 實踐證明, C/OS -可以在很大一部分微處理器上運(yùn)行。用戶一旦移植了C/OS -到自已的微處理器,就可以在此基礎(chǔ)上編寫應(yīng)用程序、并把C/OS -作為自己產(chǎn)品的一部分固化在里面。,C/OS -是可剪裁的,用戶可以跟據(jù)自己的需要決定使用內(nèi)核中的多少成分。剪裁可以通過定義宏來實現(xiàn),簡單易行??蓜儕Z性和多任務(wù)也是C/OS -的重要特性,他總是運(yùn)行處于就緒態(tài)的優(yōu)先級最高的任務(wù)。C/OS -可以管理64個任務(wù),用戶可以使用其中的56個。,絕大多數(shù)C/OS -的函數(shù)調(diào)用和服務(wù)的執(zhí)行時間具有可確定性。 C/OS

4、-提供了很多系統(tǒng)服務(wù),例如信號量、互斥型信號量、事件標(biāo)志、消息郵箱、消息隊列、信號量、塊大小固定的內(nèi)存申請與釋放及時間管理函數(shù)等。中斷可以掛起C/OS -正在執(zhí)行的任務(wù),中斷退出后執(zhí)行的任務(wù)是當(dāng)前就緒任務(wù)中優(yōu)先級最高的任務(wù),而不一定是被中斷的任務(wù)。這就要求每個任務(wù)有自己的堆棧,保存任務(wù)切換和被中斷時環(huán)境的上下文變量。,基于C/OS -具有以上優(yōu)點(diǎn),我們以它為例來介紹基于實時操作系統(tǒng)的編程方法,就更容易理解和接受。,8位的51單片機(jī)發(fā)展的技術(shù)比較成熟,簡單易學(xué),所以通常用作應(yīng)用電子專業(yè)的重要課程來學(xué)。但是,該單片機(jī)的資源相對缺乏,如果在上面應(yīng)用操作系統(tǒng),就顯得資源比較緊張。這就需要高超的技巧和經(jīng)

5、驗;否則很容易出錯。 與51單片機(jī)比較,32位的ARM系列微處理器就顯得功能非常強(qiáng)大處理速度也快,內(nèi)存資源相當(dāng)豐富,具有使用實時操作系統(tǒng)的有利條件。,ARM公司是微處理器行業(yè)的一家知名企業(yè)。該企業(yè)設(shè)計了大量的高性價比的、低功耗的精簡指令集微處理器。在設(shè)計上,ARM微處理器具有外形小,性能高,成本低和功耗低的特點(diǎn)。ARM微處理器適用于很多領(lǐng)域,比如嵌入式控制、消費(fèi)教育類多媒體DSP和移動式應(yīng)用等。,此外,ARM將其技術(shù)授權(quán)給世界上許多著名的半導(dǎo)體、軟件和OEM廠商,每個廠商得到的都是一套獨(dú)一無二的ARM相關(guān)技術(shù)及服務(wù)。利用這種合伙關(guān)系,ARM很快成為許多全球性RISC標(biāo)準(zhǔn)的締造者。目前,總共有3

6、0家半導(dǎo)體公司與ARM簽訂了硬件技術(shù)使用許可協(xié)議,其中包括Intel、IBM、 LG半導(dǎo)體、NEC、SONY、菲利浦和美國國家半導(dǎo)體這樣的大公司。至于軟件系統(tǒng)的合伙人,則包括微軟、升陽和MRI等一系列知名公司。,ARM微處理器目前有6個產(chǎn)品系列:ARM7、ARM9、ARM9E、ARMlOE、SecurCore和ARM11。這里選擇ARM7系列的LPC2214。在ARM系列微控制器上有足夠的系統(tǒng)資源運(yùn)行C/OS - II,且在國內(nèi)比較普及。,2.3 嵌入式實時操作系統(tǒng)的移植,實時操作系統(tǒng)和CPU選定以后,接下來的工作便是把系統(tǒng)移植到我們選擇的ARM微處理器上。這類的代碼在網(wǎng)上很多,移植的方法也大

7、同小異。我們使用周立功公司提供的移植模板進(jìn)行實例設(shè)計。,2.4 開發(fā)調(diào)試環(huán)境的建立,本節(jié)中,我們以ARM7TDMI微處理器為例說明典型的調(diào)試環(huán)境結(jié)構(gòu)。在調(diào)試環(huán)境中,微處理器是作為執(zhí)行高級調(diào)試與它支持的低級調(diào)試之間的接口存在的。一個調(diào)試系統(tǒng)通常分為3部分:一是通用計算機(jī)(用來運(yùn)行調(diào)試軟件,稱之為調(diào)試主機(jī));二是協(xié)議轉(zhuǎn)換器(連接調(diào)試主機(jī)發(fā)出的高級命令與微處理器JTAG接口的低級命令之間的接口);三是調(diào)試目標(biāo)。,EasyJTAG仿真器是周立功公司開發(fā)的LPC2000系列ARM7微控制器的JTAG仿真器,支持ADS1.2集成開發(fā)環(huán)境,支持單步、 全速及斷點(diǎn)等調(diào)試功能,支持下載程序到片內(nèi)FLASH和特定

8、型號的片外FLASH,采用ARM公司提出的標(biāo)準(zhǔn)20腳JTAG仿真調(diào)試接口。,2.5 工程模板的使用,廣州周立功單片機(jī)發(fā)展有限公司提供了LPC2200專用工程模板本書中使用的模板為ARM Executable Image forc/os - II(MaigcARM2200)。該模板包括以下幾個文件組。下面結(jié)合實例說明模板中這些文件組如何定制。,2.5.1 scf文件組,scf為分散加載描述文件組,包含mem_a.scf、mem_b.scf和mem_c.scf。工程模板使用了ADS的分散加載機(jī)制。只要編輯相應(yīng)的分散加載描述文件,即可將代碼段和數(shù)據(jù)段分別定位到指定的地址上。一般用戶可以使用默認(rèn)設(shè)置。

9、,2. 5.2 *h文件組,該組指的是頭文件組,包含: OS_CFGH 操作系統(tǒng)配置文件,定制操作系統(tǒng); INCLUDESH 總頭文件C/OS -要求; LPC2294.H 定義微處理器的相關(guān)寄存器; config.H 總頭文件,模板要求; targetH 目標(biāo)頭文件聲明; os_cpuH 操作系統(tǒng)移植頭文件; uCOS_IIH 操作系統(tǒng)自帶頭文件。 以上文件中的OS_CFGH、configh和os_cpuH與用戶的應(yīng)用密切相關(guān),其他幾個文件一般用戶可以設(shè)置為默認(rèn)。下面說明這幾個文件的設(shè)置方法。,OS- CFGH,為操作系統(tǒng)配置文件,用戶進(jìn)行操作系統(tǒng)的剪裁定制就是靠更改這個文件實現(xiàn)的,例如:

10、OS_MAX_EVENTS:在應(yīng)用中最大事件控制塊的個數(shù),包括信號量、郵箱和消息隊列的總和。因為每個信號量、郵箱和消息隊列都占用1個事件控制塊,例如在實例程序中,用了1個郵箱、1個消息隊列和1個互斥信號量,所以該項參數(shù)的最小值應(yīng)為3。但是在實際應(yīng)用時,應(yīng)設(shè)置得大一些,以備擴(kuò)展事件用;在實例中設(shè)置為8。,OS_MAX_MEM_PART:定義系統(tǒng)中內(nèi)存塊的最大數(shù)目。如果不用內(nèi)存控制,則設(shè)置為默認(rèn)值即可。在實例中設(shè)置為模板默認(rèn)值5。 OS_MAX_QS:定義系統(tǒng)中可以定義的消息隊列的最大隊列塊的數(shù)目。在實例中用了1個消息隊列,所以該值最小設(shè)定為1。為了擴(kuò)展兼容,在實例中設(shè)置為4。,OS_MAX_TA

11、SKS;定義用戶程序中可以使用的最多任務(wù)數(shù)。該值不能大于62。該項值的設(shè)定應(yīng)該比實際應(yīng)用的任務(wù)數(shù)大一些,這樣在增加新的任務(wù)時就不需要修改這一項的值。但是不能比實際任務(wù)數(shù)大太多,這樣會浪費(fèi)寶貴的內(nèi)存空間。在實例中用了7個任務(wù),該項定義為10。,OS_LOWEST_PRIO:設(shè)定系統(tǒng)中要使用的最低任務(wù)的優(yōu)先級。設(shè)定該值可以節(jié)省操作系統(tǒng)使用RAM的空間,任務(wù)的最低優(yōu)先級和最大任務(wù)數(shù)沒有直接關(guān)系。操作系統(tǒng)留了兩個任務(wù)優(yōu)先OS_LOWEST_PRIO和OS_LOWEST_PRIO -1給空閑任務(wù)和統(tǒng)計任務(wù),所以用戶可以用的實際任務(wù)優(yōu)先級的值是在0 OS_LOWEST_PRIO -2之間的數(shù)。,在實例中該

12、值設(shè)定為20,實際可用的優(yōu)先級為0-18,其中優(yōu)先級0-3為操作系統(tǒng)作者建議保留的級別,以備升級之用。如果為了產(chǎn)品與新版本的操作系統(tǒng)兼容,則可以利用的優(yōu)先級為4-18,實際應(yīng)用中有7個任務(wù)。這樣設(shè)置的目的是,在各個任務(wù)優(yōu)先級之間彼此可以間隔,在插入新任務(wù)或者使用互斥信號量時就不用調(diào)整其他任務(wù)的優(yōu)先級了。,OS_TICKS_PER_SEC:設(shè)定調(diào)用OSTimeTick()函數(shù)的頻率,也就是系統(tǒng)時鐘最小單位的設(shè)定。如果這個值設(shè)定得太大,則系統(tǒng)的實時性會受到影響;如果設(shè)置得太小,則CPU會忙于時鐘處理而增大開銷。根據(jù)微處理器的不同,該值設(shè)置為10-100 ms的周期為宜,對應(yīng)頻率為10-100 Hz

13、。在實例中設(shè)置20 ms的周期,即將該值設(shè)置為50。,其他的一些項目,例如事件標(biāo)志、消息郵箱、內(nèi)存管理等的使能標(biāo)志定義,在做實驗時建議直接使用模板的默認(rèn)值(全部使能),但在實際應(yīng)用中應(yīng)該進(jìn)行剪裁。,2config.h,config.h文件中主要包括一些宏定義和文件包含操作。對于宏定義,使用者可以根據(jù)自己的喜好將一些數(shù)據(jù)類型定義為自己習(xí)慣的標(biāo)識符。在實際應(yīng)用中,這一部分內(nèi)容可以不動。如果不喜歡用模板定義的名稱,則可以用標(biāo)準(zhǔn)的定義變量方法,例如在應(yīng)用中可以直接用unsigned char定義無符號字符型變量,而不用uint8或INT8U。 configh文件的另一部分內(nèi)容是定義文件包含。用戶根據(jù)需

14、要包含自己定義的頭文件。,# include “I2C. h . # include ZLG7290. h # define ZLG-7290ADDR 0 x70 # include lcddriver. h # include “GUI_BASIC. H .,3. os_cpu.h,os_cpu.h文件中主要定義與編譯器無關(guān)的數(shù)據(jù)類型,這主要是為了系統(tǒng)移植用。因為操作系統(tǒng)為了增加可移植性,用了一些“不合法的數(shù)據(jù)類型”,例如INT8U。這在任何編譯器下都是錯誤的。操作系統(tǒng)移植就是要將這個INT8U進(jìn)行宏定義,定義為用戶所用編譯器所理解的類型。這部分操作在系統(tǒng)移植階段已經(jīng)做好了,用戶可以不更改。

15、還有一部分是與ARM7相關(guān)的類型,主要是一些軟件中斷的定義,用來處理函數(shù)的底層接口。這是移植操作時完成的任務(wù),用戶可以不需要修改。,2.5.3 arm文件組,這一部分內(nèi)容主要是與操作系統(tǒng)的移植有關(guān),包括os_cpu_as和os_cpu_cc文件。 os_cpu_as文件的主要內(nèi)容是C/OS -在LPC2l0 x上的移植代碼匯編語言部分。 os_cpu_cc文件的主要內(nèi)容是C/OS -在lPC210 x上的移植代碼C語言部分,包括任務(wù)堆棧初始化代碼、鉤子函數(shù)和軟中斷服務(wù)函數(shù)。,2.5.4 target文件組,target文件組包括targetc、IRQs和Startups文件。 targetc文

16、件為LPC2200目標(biāo)板的特殊代碼的頭文件。每個用戶工程都必須包含targetc文件,而且用戶可以根據(jù)需要修改它的內(nèi)容。 IRQs文件為用于添加IRQ中斷句柄的文件,允許中斷嵌套。 Startups文件為LPC2200的啟動代碼,包括入口的初始化代碼,每個用戶工程應(yīng)該根據(jù)自己的實際需要有一個自己專用的Startups文件。,1 target.C,targetc文件中包含關(guān)于系統(tǒng)時鐘中斷定義的函數(shù)Timer0Init() 。在程序清單中沒有對PR進(jìn)行設(shè)置,實際上選擇了默認(rèn)值0(不分頻)。當(dāng)T0MR0=(Fpclk/50)時,中斷時間間隔就是20 ms。 void Timer0Init(void)

17、 T0IR=0Xffffffff; T0TC=0; T0TCR=0X01; T0MCR=0X03; T0MR0=(Fpclk/50); 其他內(nèi)容略,2.IRQ.s,IRQs文件中包含中斷句柄的定義,只要按照要求添加即可。,3. Startup. S,Startups文件是關(guān)于LPC2290的啟動代碼,用戶應(yīng)該根據(jù)自己工程的需要更改其中的內(nèi)容,例如在用戶程序中,需要用FIQ中斷,就應(yīng)該定義FIQ中斷堆棧的大小。,2.5.5 C/OS -文件組,包括C/OS -實時操作系統(tǒng)的全部文件。默認(rèn)情況下可以包含全部的文件,用戶不用進(jìn)行任何修改。但也可以根據(jù)實際情況進(jìn)行剪裁,例如在應(yīng)用時不用信號量管理函數(shù)就可以將OS_SEM.C文件從工程中移除,且對工程編譯產(chǎn)生的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論