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

下載本文檔

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

文檔簡介

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

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

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

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

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

6、家半導(dǎo)體公司與arm簽訂了硬件技術(shù)使用許可協(xié)議,其中包括intel、ibm、 lg半導(dǎo)體、nec、sony、菲利浦和美國國家半導(dǎo)體這樣的大公司。至于軟件系統(tǒng)的合伙人,則包括微軟、升陽和mri等一系列知名公司。 arm微處理器目前有6個(gè)產(chǎn)品系列:arm7、arm9、arm9e、armloe、securcore和arm11。這里選擇arm7系列的lpc2214。在arm系列微控制器上有足夠的系統(tǒng)資源運(yùn)行c/os - ii,且在國內(nèi)比較普及。2.3 嵌入式實(shí)時(shí)操作系統(tǒng)的移植 實(shí)時(shí)操作系統(tǒng)和cpu選定以后,接下來的工作便是把系統(tǒng)移植到我們選擇的arm微處理器上。這類的代碼在網(wǎng)上很多,移植的方法也大同小

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

8、片外flash,采用arm公司提出的標(biāo)準(zhǔn)20腳jtag仿真調(diào)試接口。 2.5 工程模板的使用 廣州周立功單片機(jī)發(fā)展有限公司提供了lpc2200專用工程模板本書中使用的模板為arm executable image forc/os - ii(maigcarm2200)。該模板包括以下幾個(gè)文件組。下面結(jié)合實(shí)例說明模板中這些文件組如何定制。 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),其他幾個(gè)文件一般用戶可以設(shè)置為默認(rèn)。下面說明這幾個(gè)文件的設(shè)置方法。os- cfgh 為操作系統(tǒng)配置文件,用戶進(jìn)行操作系統(tǒng)的剪裁定制就是靠更改這個(gè)文件實(shí)現(xiàn)的,例如:

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

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

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

13、。在實(shí)例中設(shè)置20 ms的周期,即將該值設(shè)置為50。 其他的一些項(xiàng)目,例如事件標(biāo)志、消息郵箱、內(nèi)存管理等的使能標(biāo)志定義,在做實(shí)驗(yàn)時(shí)建議直接使用模板的默認(rèn)值(全部使能),但在實(shí)際應(yīng)用中應(yīng)該進(jìn)行剪裁。2config.h config.h文件中主要包括一些宏定義和文件包含操作。對(duì)于宏定義,使用者可以根據(jù)自己的喜好將一些數(shù)據(jù)類型定義為自己習(xí)慣的標(biāo)識(shí)符。在實(shí)際應(yīng)用中,這一部分內(nèi)容可以不動(dòng)。如果不喜歡用模板定義的名稱,則可以用標(biāo)準(zhǔn)的定義變量方法,例如在應(yīng)用中可以直接用unsigned char定義無符號(hào)字符型變量,而不用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)移植用。因?yàn)椴僮飨到y(tǒng)為了增加可移植性,用了一些“不合法的數(shù)據(jù)類型”,例如int8u。這在任何編譯器下都是錯(cuò)誤的。操作系統(tǒng)移植就是要將這個(gè)int8u進(jìn)行宏定義,定義為用戶所用編譯器所理解的類型。這部分操作在系統(tǒng)移植階段已經(jīng)做好了,用戶可以不更改。還有

15、一部分是與arm7相關(guān)的類型,主要是一些軟件中斷的定義,用來處理函數(shù)的底層接口。這是移植操作時(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文件。 targe

16、tc文件為lpc2200目標(biāo)板的特殊代碼的頭文件。每個(gè)用戶工程都必須包含targetc文件,而且用戶可以根據(jù)需要修改它的內(nèi)容。 irqs文件為用于添加irq中斷句柄的文件,允許中斷嵌套。 startups文件為lpc2200的啟動(dòng)代碼,包括入口的初始化代碼,每個(gè)用戶工程應(yīng)該根據(jù)自己的實(shí)際需要有一個(gè)自己專用的startups文件。1 target.ctargetc文件中包含關(guān)于系統(tǒng)時(shí)鐘中斷定義的函數(shù)timer0init() 。在程序清單中沒有對(duì)pr進(jìn)行設(shè)置,實(shí)際上選擇了默認(rèn)值0(不分頻)。當(dāng)t0mr0=(fpclk/50)時(shí),中斷時(shí)間間隔就是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的啟動(dòng)代碼,用戶應(yīng)該根據(jù)自己工程的需要更改其中的內(nèi)容,例如在用戶程序中,需要用fiq中斷,就應(yīng)該定義fiq中斷堆棧的大小。2.5.5 c/os -文件組 包括c/os -實(shí)時(shí)操作系統(tǒng)的全部文件。默認(rèn)情況下可以包含全部的文件,用戶不用進(jìn)行任何修改。但也可以根據(jù)實(shí)際情況進(jìn)行剪裁,例如在應(yīng)用時(shí)不用信號(hào)量管理函數(shù)就可以將os_sem.c文件從工程中移除,且對(duì)工程編譯產(chǎn)生的代碼長

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論