51單片機(jī)上移植ucos-II_第1頁(yè)
51單片機(jī)上移植ucos-II_第2頁(yè)
51單片機(jī)上移植ucos-II_第3頁(yè)
51單片機(jī)上移植ucos-II_第4頁(yè)
51單片機(jī)上移植ucos-II_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、嵌入式實(shí)時(shí)操作系統(tǒng)實(shí)驗(yàn)報(bào)告51單片機(jī)上移植aC/OS-II系別計(jì)算機(jī)與電子系專(zhuān)業(yè)班級(jí)電子 09010901 班學(xué)生姓名高傲指導(dǎo)教師黃向宇提交日期 20122012 年 4 4 月 1717 日一、實(shí)驗(yàn)?zāi)康睦斫庖浦睳C/OS-II的一般原理及基本方法。掌握在51單片機(jī)上移植NC/OS-II的方法及步驟,掌握在51單片機(jī)上基于NC/OS-II系統(tǒng)構(gòu)建應(yīng)用程序的基本原理及方法。二、實(shí)驗(yàn)內(nèi)容1.建立并熟悉編譯及仿真調(diào)試環(huán)境(keil+proteus)。2.下載已移植好的軟件包,在開(kāi)發(fā)環(huán)境下建立工程編譯并運(yùn)行觀察運(yùn)行結(jié)果,使用Keil自帶的仿真調(diào)試工具觀察程序運(yùn)行情況(內(nèi)存的分配、變量及CPU寄存器的動(dòng)

2、態(tài)變化、任務(wù)的切換運(yùn)行狀態(tài)等);比較移植前和移植后的相關(guān)文件,分析移植過(guò)程中做了哪些改動(dòng)工作。3.結(jié)合前兩次實(shí)驗(yàn)內(nèi)容,在移植軟件包的基礎(chǔ)上嘗試增加用戶任務(wù),并利用信號(hào)量、消息郵箱等建立任務(wù)之間的通信聯(lián)系;同時(shí)嘗試采用動(dòng)態(tài)內(nèi)存分配的方法為任務(wù)分配內(nèi)存,使用Keil仿真工具觀察程序運(yùn)行情況并記錄運(yùn)行結(jié)果。4.輸入課本P220的例子程序,編譯運(yùn)行并觀察運(yùn)行結(jié)果。5 .將以上調(diào)試好的軟件移植到proteus開(kāi)發(fā)環(huán)境中去,利用proteus的硬件仿真環(huán)境創(chuàng)建幾個(gè)實(shí)際任務(wù)(如鍵盤(pán)、顯示器、LED點(diǎn)陣、數(shù)碼管、時(shí)鐘或溫度傳感器等)給每個(gè)賦以適當(dāng)?shù)膬?yōu)先級(jí),配置合適的堆棧容量,編譯運(yùn)行并觀察運(yùn)行情況,顯示信息可

3、以用液晶顯示器或虛擬終端來(lái)顯示。三.實(shí)驗(yàn)原理1.移植的概念所謂移植,就是使一個(gè)實(shí)時(shí)內(nèi)核能在某個(gè)微處理器或微控制器上運(yùn)行。為了方便移植,大部分的NC/OS代碼是用C語(yǔ)言寫(xiě)的;但仍需要用C和匯編語(yǔ)言寫(xiě)一些與處理器相關(guān)的代碼,這是因?yàn)?n在逾崎處理器寄存器時(shí)只能通過(guò)匯編語(yǔ)言來(lái)實(shí)現(xiàn)。由于仙-C/O僦計(jì)時(shí)就已經(jīng)充分考慮了可移植性,所以仙C/OSn的移植相對(duì)來(lái)說(shuō)是比較容易的。要使仙C/OS正常運(yùn)行,處理器必須滿足以下要求:1 .處理器的C編譯器能產(chǎn)生可重入代碼。2 .用C語(yǔ)言就可以打開(kāi)和關(guān)閉中斷。3 .處理器支持中斷,并且能產(chǎn)生定時(shí)中斷(通常在10至100Hz之間)。4 .處理器支持能夠容納一定量數(shù)據(jù)(可

4、能是幾千字節(jié))的硬件堆棧。5 .處理器有將堆棧指針和其它CPU寄存器讀出和存儲(chǔ)到堆棧或內(nèi)存中的指令。如果用戶理解了處理器和C編譯器的技術(shù)細(xì)節(jié),移植N-RCOS作實(shí)際上是非常簡(jiǎn)單的。前提是您的處理器和編譯器滿足了-n的要求,COS已經(jīng)有了必要工具。移植工作包括以下幾個(gè)內(nèi)容:聲明10個(gè)數(shù)據(jù)類(lèi)型(OS_CPU.H)用#巾ne聲明三個(gè)宏(OS_CPU.H)用C語(yǔ)言編寫(xiě)六個(gè)簡(jiǎn)單的函數(shù)(OS_CPU_C.C)編寫(xiě)四個(gè)匯編語(yǔ)言函數(shù)(OS_CPU_A.ASM)根據(jù)處理器的不同,一個(gè)移植實(shí)例可能需要編寫(xiě)或改寫(xiě)50至300行的代碼,需要的時(shí)間從幾個(gè)小時(shí)到一星期不等。一旦代碼移植結(jié)束,下一步工作就是測(cè)試。測(cè)試一個(gè)象

5、仙-R一樣的鴕/OS任務(wù)實(shí)時(shí)內(nèi)核并不復(fù)雜。甚至可以在沒(méi)有應(yīng)用程序的情況下測(cè)試。換句話說(shuō),就是讓內(nèi)核自己測(cè)試自己。這樣做有兩個(gè)好處:第一,避免使本來(lái)就復(fù)雜的事情更加復(fù)雜;第二,如果出現(xiàn)問(wèn)題,可以知道問(wèn)題出在內(nèi)核代碼上而不是應(yīng)用程序。剛開(kāi)始的時(shí)候可以運(yùn)行一些簡(jiǎn)單的任務(wù)和時(shí)鐘節(jié)拍中斷服務(wù)例程。一旦多任務(wù)調(diào)度成功地運(yùn)行了,再添加應(yīng)用程序的任務(wù)就是非常簡(jiǎn)單的工作了。2.開(kāi)發(fā)工具移植以C/OSII需要一個(gè)C編譯器,并且是針對(duì)用戶用的CPU的。因?yàn)镹C/OSR是一個(gè)可剝奪型內(nèi)核,用戶只有通過(guò)C編譯器來(lái)產(chǎn)生可重入代碼;C編譯器還要支持匯編語(yǔ)言程序。絕大部分的C編譯器都是為嵌入式系統(tǒng)設(shè)計(jì)的,它包括匯編器、連接器

6、和定位器。連接器用來(lái)將不同的模塊(編譯過(guò)和匯編過(guò)的文件)連接成目標(biāo)文件。定位器則允許用戶將代碼和數(shù)據(jù)放置在目標(biāo)處理器的指定內(nèi)存映射空間中。所用的C編譯器還必須提供一個(gè)機(jī)制來(lái)從C中打開(kāi)和關(guān)閉中斷。一些編譯器允許用戶在C源代碼中插入?yún)R編語(yǔ)言。 這就使得插入合適的處理器指令來(lái)允許和禁止中斷變得非常容易了。還有一些編譯器實(shí)際上包括了語(yǔ)言擴(kuò)展功能,可以直接從C中允許和禁止中斷。3 .目錄和文件本書(shū)所付的磁盤(pán)中提供了仙-aCOS裝程序,可在硬盤(pán)上安裝仙-II和移植實(shí)例代碼(Intel80 x86實(shí)模式,大模式編譯)。我設(shè)計(jì)了一個(gè)連續(xù)的目錄結(jié)構(gòu),使得用戶更容易找到目標(biāo)處理器的文件。 如果想增加一個(gè)其它處理器

7、的移植實(shí)例, 您可以考慮采取同樣的方法(包括目錄的建立和文件的命名等等)。所有的移植實(shí)例都應(yīng)放在用戶硬盤(pán)的仙COSII目錄下。各個(gè)微處理器或微控制器的移植源代碼必須在以下兩個(gè)或三個(gè)文件中找到:OS_CPU.H,OS_CPU_C.C,OS_CPU_A.ASM。匯編語(yǔ)言文件OS_CPU_A.ASM是可選擇的,因?yàn)槟承〤編譯器允許用戶在C語(yǔ)言中插入?yún)R編語(yǔ)言, 所以用戶可以將所需的匯編語(yǔ)言代碼直接放到OS_CPU_C.C中。放置移植實(shí)例的目錄決定于用戶所用的處理器, 例如在下面的表中所示的放置不同移植實(shí)例的目錄結(jié)構(gòu)。注意,各個(gè)目錄雖然針對(duì)完全不同的目標(biāo)處理器,但都包括了相同的文件名。:一.一Intel

8、/AMD:SOFTWAREuCOS-IIIx86Si80186_LOS_CPU.HOS_CPU_A.ASMOS_CPU_C.CSOFTWAREuCOS-IIIx86LC/OSOS_CPU.HOS_CPU_C.Cr r,一”一”一.rMotorolaSOFTWAREuCOS-II68HC11iiii68HC11-_i_OS_CPU.HOS_CPU_A.ASMOS_CPU_C.CINCLUDES.H在第一章中曾提到過(guò),INCLUDES.H是一個(gè)頭文件,它在所有.C文件的第一行被包含#includeincludes.hINCLUDES.H使得用戶項(xiàng)目中的每個(gè).C文件不用分別去考慮它實(shí)際上需要哪些頭文

9、件。使用INCLUDES.H的唯一缺點(diǎn)是它可能會(huì)包含一些實(shí)際不相關(guān)的頭文件。這意味著每個(gè)文件的編譯時(shí)間可能會(huì)增加。但由于它增強(qiáng)了代碼的可移植性, 所以我們還是決定使用這一方法。 用戶可以通過(guò)編輯INCLUDES.H來(lái)增加自己的頭文件,但是用戶的頭文件必須添加在頭文件列表的最后。OS_CPU.HOS_CPU.H包括了用#defines定義的與處理器相關(guān)的常量,宏和類(lèi)型定義。OS_CPU.H的大體結(jié)構(gòu)如程序清單L8.1所示。程序清單L8.1OS_CPU.H.#ifdefOS_CPU_GLOBALS#defineOS_CPU_EXT#else#defineOS_CPU_EXTextern#endif

10、/*數(shù)據(jù)類(lèi)型(與編譯器相關(guān))*/typedefunsignedcharINT8U;/*無(wú)符號(hào)8位整數(shù)*/typedefsignedcharINT8S;/*有符號(hào)8位整數(shù)*/typedefunsignedintINT16U;/*無(wú)符號(hào)16位整數(shù)*/typedefsignedintINT16S;/*有符號(hào)16位整數(shù)*/typedefunsignedlongINT32U;/*無(wú)符號(hào)32位整數(shù)*/typedefsignedlongINT32S;/*有符號(hào)32位整數(shù)*/typedefunsignedcharBOOLEAN;typedeffloatFP32;/*單精度浮點(diǎn)數(shù)*/(2)typedefdoub

11、leFP64;/*雙精度浮點(diǎn)數(shù)*/typedefunsignedintOS_STK;/*堆棧入口寬度為16位*/*與處理器相關(guān)的代碼*/#defineOS_ENTER_CRITICAL()?/*禁止中斷*/#defineOS_EXIT_CRITICAL()?/*允許中斷*/#defineOSSTKGROWTH/*定義堆棧的增長(zhǎng)方向:向下,0=向上*/#defineOS_TASK_SW()?與編譯器相關(guān)的數(shù)據(jù)類(lèi)型因?yàn)椴煌奈⑻幚砥饔胁煌淖珠L(zhǎng),所以CC/OSI的移植包括了一系列的類(lèi)型定義以確保其可移植性。尤其是,NOS-R代5C隊(duì)不使用C的short,int和10ng等數(shù)據(jù)類(lèi)型,因?yàn)樗鼈兪桥c編譯

12、器相關(guān)的,不可移植。相反的,我定義的整型數(shù)據(jù)結(jié)構(gòu)既是可移植的又是直觀的L8.1(2)。為了方便,雖然仙-C/OS不使用浮點(diǎn)數(shù)據(jù),但我還是定義了浮點(diǎn)數(shù)據(jù)類(lèi)型L8.1(2)。例如,INT16U數(shù)據(jù)類(lèi)型總是代表16位的無(wú)符號(hào)整數(shù)?,F(xiàn)在,-HC/OS和用戶的應(yīng)用程序就可以估計(jì)出聲明為該數(shù)據(jù)類(lèi)型的變量的數(shù)值范圍是065535。將仙C/OSI移植到32位的處理器上也就意味著INT16U實(shí)際被聲明為無(wú)符號(hào)短整型數(shù)據(jù)結(jié)構(gòu)而不是無(wú)符號(hào)整型數(shù)據(jù)結(jié)構(gòu)。但是,-R所處理的C/OS仍然是INT16U。用戶必須將任務(wù)堆棧的數(shù)據(jù)類(lèi)型告訴給艮-n0這/OS程是通過(guò)為OS_STK聲明正確的C數(shù)據(jù)類(lèi)型來(lái)完成的。如果用戶的處理器上

13、的堆棧成員是32位的,并且用戶的編譯文件指定整型為32位數(shù),那么就應(yīng)該將OS_STK明位無(wú)符號(hào)整型數(shù)據(jù)類(lèi)型。所有的任務(wù)堆棧都必須用OS_STK*聲明數(shù)據(jù)類(lèi)型。用戶所必須要做的就是查看編譯器手冊(cè),并找到對(duì)應(yīng)于仙C/OS標(biāo)準(zhǔn)C數(shù)據(jù)類(lèi)型。OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()免受多任務(wù)或中斷服務(wù)例程(ISRs)的破壞。中斷禁止時(shí)間是商業(yè)實(shí)時(shí)內(nèi)核公司提供的重要指標(biāo)之一,因?yàn)樗鼘⒂绊懙接脩舻南到y(tǒng)對(duì)實(shí)時(shí)事件的響應(yīng)能力。雖然CC/OSH盡量使中斷禁止時(shí)間達(dá)到最短,但是NC/OS1的中斷禁止時(shí)間還主要依賴于處理器結(jié)與所有的實(shí)時(shí)內(nèi)核一樣,11-O8先禁止中斷再訪問(wèn)代碼的臨界

14、段,并且在訪問(wèn)完畢后重新允許中斷。這就使得以-n能夠保COS界段代碼構(gòu)和編譯器產(chǎn)生的代碼的質(zhì)量。通常每個(gè)處理器都會(huì)提供一定的指令來(lái)禁止/允許中斷,因此用戶的C編譯器必須要有一定的機(jī)制來(lái)直接從C中執(zhí)行這些操作。有些編譯器能夠允許用戶在C源代碼中插入?yún)R編語(yǔ)言聲明。 這樣就使得插入處理器指令來(lái)允許和禁止中斷變得很容易了。其它一些編譯器實(shí)際上包括了語(yǔ)言擴(kuò)展功能,可以直接從C中允許和禁止中斷。為了隱藏編譯器廠商提供的具體實(shí)現(xiàn)方法,NC/OSn定義了兩個(gè)宏來(lái)禁止和允許中斷:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()L8.1(3)。(OS_ENTER_CRITICAL();

15、/*?仙C/OSII臨界代碼段*/OS_EXIT_CRITICAL();方法1執(zhí)行這兩個(gè)宏的第一個(gè)也是最簡(jiǎn)單的方法是在OS_ENTER_CRITICAL()中調(diào)用處理器指令來(lái)禁止中斷,以及在OS_EXIT_CRITICAL()中調(diào)用允許中斷指令。但是,在這個(gè)過(guò)程中還存在著小小的問(wèn)題。如果用戶在禁止中斷的情況下調(diào)用仙C/OSII函數(shù),在從仙C/OSI返回的時(shí)候,中斷可能會(huì)變成是允許的了!如果用戶禁止中斷就表明用戶想在從-n函數(shù)om的時(shí)候中斷還是禁止的。在這種情況下,光靠這種執(zhí)行方法可能是不夠的。方法2執(zhí)行OS_ENTER_CRITICAL()的第二個(gè)方法是先將中斷禁止?fàn)顟B(tài)保存到堆棧中, 然后禁止

16、中斷。而執(zhí)行OS_EXIT_CRITICAL()的時(shí)候只是從堆棧中恢復(fù)中斷狀態(tài)。如果用這個(gè)方法的話,不管用戶是在中斷禁止還是允許的情況下調(diào)用仙C/OSR服務(wù),在整個(gè)調(diào)用過(guò)程中都不會(huì)改變中斷狀態(tài)。如果用戶在中斷禁止的時(shí)候調(diào)用仙CO服務(wù),其實(shí)用戶是在延長(zhǎng)應(yīng)用程序的中斷響應(yīng)時(shí)間。用戶的應(yīng)用程序還可以用OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()來(lái)保護(hù)代碼的臨界段。但是,用戶在使用這種方法的時(shí)候還得十分小心,因?yàn)槿绻脩粼谡{(diào)用象OSTimeDly()之類(lèi)的服務(wù)之前就禁止中斷,很有可能用戶的應(yīng)用程序會(huì)崩潰。發(fā)生這種情況的原因是任務(wù)被掛起直到時(shí)間期滿,而中斷是禁止的,因而用

17、戶不可能獲得節(jié)拍中斷!很明顯,所有的PEND調(diào)用都會(huì)涉及到這個(gè)問(wèn)題,用戶得十分小心。一個(gè)通用的辦法是用戶應(yīng)該在中斷允許的情況下調(diào)用-R的系統(tǒng)服務(wù)!問(wèn)題是:哪種方法更好一點(diǎn)?這就得看用戶想犧牲些什么。如果用戶并不關(guān)心在調(diào)用仙C/OS務(wù)后用戶的應(yīng)用程序中中斷是否是允許的,那么用戶應(yīng)該選擇第一種方法執(zhí)行。如果用戶想在調(diào)用卜OS-R服務(wù)過(guò)程中保持中斷禁止?fàn)顟B(tài),那么很明顯用戶應(yīng)該選擇第二種方法。給用戶舉個(gè)例子吧,通過(guò)執(zhí)行STI命令在Intel80186上禁止中斷,并用CLI命令來(lái)允許中斷。用戶可以用下面的方法來(lái)執(zhí)行這兩個(gè)宏:C/OS#defineOS_ENTER_CRITICAL()asmCLI#def

18、ineOS_EXIT_CRITICAL()asmSTICLI和SCI指令都會(huì)在兩個(gè)時(shí)鐘周期內(nèi)被馬上執(zhí)行(總共為四個(gè)周期)。為了保持中斷狀態(tài),用戶需要用下面的方法來(lái)執(zhí)行宏:#defineOS_ENTER_CRITICAL()asmPUSHF;CLI#defineOS_EXIT_CRITICAL()asmPOPF在這種情況下,OS_ENTER_CRITICAL()需要12個(gè)時(shí)鐘周期,而OS_EXIT_CRITICAL()需要另外的8個(gè)時(shí)鐘周期(總共有20個(gè)周期)。這樣,保持中斷禁止?fàn)顟B(tài)要比簡(jiǎn)單的禁止/允許中斷多花16個(gè)時(shí)鐘周期的時(shí)間(至少在80186上是這樣的)。當(dāng)然,如果用戶有一個(gè)速度比較快的處

19、理器(如IntelPentiumn),那么這兩種方法的時(shí)間差別會(huì)很小。OS_STK_GROWTH絕大多數(shù)的微處理器和微控制器的堆棧是從上往下長(zhǎng)的。但是某些處理器是用另外一種方式工作的。-R被/OS成兩種情況都可以處理,只要在結(jié)構(gòu)常量OS_STK_GROWTHL8.1(4)中指定堆棧的生長(zhǎng)方式(如下所示)就可以了。置OS_STK_GROWTH為0表示堆棧從下往上長(zhǎng)。置OS_STK_GROWTH為1表示堆棧從上往下長(zhǎng)。OS_TASK_SW()OS_TASK_SW()L8.1(5)是一個(gè)宏,它是在仙C/OS從低優(yōu)先級(jí)任務(wù)切換到最高優(yōu)先級(jí)任務(wù)時(shí)被調(diào)用的。OS_TASK_SW()總是在任務(wù)級(jí)代碼中被調(diào)用

20、的。另一個(gè)函數(shù)OSIntEx)被用來(lái)在ISR使得更高優(yōu)先級(jí)任務(wù)處于就緒狀態(tài)時(shí),執(zhí)行任務(wù)切換功能。任務(wù)切換只是簡(jiǎn)單的將處理器寄存器保存到將被掛起的任務(wù)的堆棧中, 并且將更高優(yōu)先級(jí)的任務(wù)從堆棧中恢復(fù)出來(lái)。在叱c/osn中,處于就緒狀態(tài)的任務(wù)的堆棧結(jié)構(gòu)看起來(lái)就像剛發(fā)生過(guò)中斷并將所有的寄存器保存到堆棧中的情形一樣。換句話說(shuō),叱-R要運(yùn)行處C/OS于就緒狀態(tài)的任務(wù)必須要做的事就是將所有處理器寄存器從任務(wù)堆棧中恢復(fù)出來(lái),并且執(zhí)行中斷的返回。為了切換任務(wù)可以通過(guò)執(zhí)行OS_TASK_SW()來(lái)產(chǎn)生中斷。 大部分的處理器會(huì)提供軟中斷或是陷阱(TRAP)指令來(lái)完成這個(gè)功能。ISR或是陷阱處理函數(shù)(也叫做異常處理函

21、數(shù))的向量地址必須指向匯編語(yǔ)言函數(shù)OSCtxSw()(參看8.04.02)。例如,在Intel或者AMD80 x86處理器上可以使用INT指令。但是中斷處理向量需要指向OSCtxSw()。Motorola68HC11處理器使用的是SWI指令,同樣,SWI的向量地址仍是OSCtxSw()。還有,Motorola680 x0/CPU32可能會(huì)使用16個(gè)陷阱指令中的一個(gè)。當(dāng)然,選中的陷阱向量地址還是OSCtxSw()。一些處理器如ZilogZ80并不提供軟中斷機(jī)制。在這種情況下,用戶需要盡自己的所能將堆棧結(jié)構(gòu)設(shè)置成與中斷堆棧結(jié)構(gòu)一樣。OS_TASK_SW()只會(huì)簡(jiǎn)單的調(diào)用OSCtxSw()而不是將某

22、個(gè)向量指向OSCtxSw()。 仙C/OS已經(jīng)被移植到了Z80處理器上,CC/O也同樣可以。OS_CPU_A.ASM仙C/OSR的移植實(shí)例要求用戶編寫(xiě)四個(gè)簡(jiǎn)單的匯編語(yǔ)言函數(shù):OSStartHighRdy()OSCtxSw()OSIntCtxSw()OSTickISR()如果用戶的編譯器支持插入?yún)R編語(yǔ)言代碼的話, 用戶就可以將所有與處理器相關(guān)的代碼放到OS_CPU_C.C文件中,而不必再擁有一些分散的匯編語(yǔ)言文件。四.實(shí)驗(yàn)步驟1 .安裝實(shí)驗(yàn)環(huán)境keiluV4安裝KeilC51V9.00版本,即uV4打開(kāi)uVision4,點(diǎn)擊File-LicenseManagement.,打開(kāi)LicenseMan

23、agement窗口,復(fù)制右上角的CID打開(kāi)注冊(cè)機(jī),在CID窗口里填上剛剛復(fù)制的CID,其它設(shè)置不變點(diǎn)擊Generate生成許可號(hào),復(fù)制許可號(hào)將許可號(hào)復(fù)制到LicenseManagement窗口下部的NewLicenseIDCode,點(diǎn)擊右側(cè)的AddLIC若上方的Product顯示的是PK51Prof.DevelopersKit即注冊(cè)成功,SupportPeriod為有效期,一般可以到30年左右,若有效期較短,可多次生成許可號(hào)重新注冊(cè)。2.打開(kāi)實(shí)驗(yàn)例程1)打開(kāi)51ucosii軟件包, 查看所含文件信息, 在keiluV4下新建工程并將51ucosii下所包含的文件都添加到工程里,選擇好相關(guān)工程配

24、置項(xiàng),編譯生成調(diào)試文件及hex文件,利用keiluV4仿真器觀察運(yùn)行結(jié)果(使用串口1);2)分析整個(gè)實(shí)驗(yàn)文件目錄結(jié)構(gòu)及實(shí)驗(yàn)參考程序。3)按照實(shí)驗(yàn)內(nèi)容要求編寫(xiě)程序并編譯運(yùn)行3.利用proteus進(jìn)行仿真五.實(shí)驗(yàn)現(xiàn)象與結(jié)果分析1.建立并熟悉編譯及仿真調(diào)試環(huán)境(keil+proteus)2.下載已移植好的軟件包,在開(kāi)發(fā)環(huán)境下建立工程編譯并運(yùn)行觀察運(yùn)行結(jié)果,使用Keil自帶的仿真調(diào)試工具觀察程序運(yùn)行情況(內(nèi)存的分配、變量及CPUI.UCOSJ.C:,承*安jljl崢右? ?rilzjerialrilzjerialn n: :3 3門(mén)工B&kl;B&kl;| |IIIIi iC CT T

25、JUklZ-dAZE-JUklZ-dAZE-1 1:lAJZSUElAJZSUEa a7a7aF FJObdJObd 1 1AJIESCA*tSZrjAJIESCA*tSZrj| |0 0j jr r-h-h)f)fQSTaairCTeaTEQSTaairCTeaTE( (TasrS5*fETasrS5*fEnT,nT,voidvoidro.ro.DO|,1)DO|,1)? ?r9n.HTV4C.9n.HTV4C.,TWFlt?TWFlt?三國(guó)(TUld(TUld卜* rr3kyy:QfI,lrr3kyy:QfI,l1 17 7%由6EW6EWC C日R RMMMs s) )ASJt*rcOA

26、SJt*rcO* *Vfl-lSVfl-lS:w w;d dB BT TI I734734:IF4dEVFIF4dEVF t t|K三七工0 0 Ef5Ef5r r1 1布p|p|ihih口 egP/?ligP/?li于叫Q4卻口MLnrfvwHt*pnrfvwHt*p一nJn寄存器的動(dòng)態(tài)變化、任務(wù)的切換運(yùn)行狀態(tài)等) ;比較移植前和移植后的相關(guān)文件,析移植過(guò)程中做了哪些改動(dòng)工作3.結(jié)合前兩次實(shí)驗(yàn)內(nèi)容,在移植軟件包的基礎(chǔ)上嘗試增加用戶任務(wù),并利用信號(hào)量、消息郵箱等建立任務(wù)之間的通信聯(lián)系;同時(shí)嘗試采用動(dòng)態(tài)內(nèi)存分配的方法為任務(wù)分配內(nèi)存,使用Keil仿真工具觀察程序運(yùn)行情況并記錄運(yùn)行結(jié)果。SII既制y

27、IIStudy、*uCOSIIStudy5.將以上調(diào)試好的軟件移植到proteus開(kāi)發(fā)環(huán)境中去,利用proteus的硬件仿真環(huán)境創(chuàng)建幾個(gè)實(shí)際任務(wù)(如鍵盤(pán)、顯示器、LED點(diǎn)陣、數(shù)碼管、時(shí)鐘或溫度傳感器等)給每thisthisis出門(mén).th.itIEt=isL2.th.i=IEtihL3Lttlltttllt1務(wù)task1.I111=3號(hào)=JL3-fl1-fl1= =IE113k1r: :himhimIStask2task2, ,ttiLettiLe L L3 3thisthis isisticLlticLlr r: :AimAim isisistaskistask3 3r ristististlistl. .irtioirtiok2k2. .isistasE1tasE1, ,this=T1.個(gè)賦以適當(dāng)?shù)膬?yōu)先級(jí),配置合適的堆棧容量,編譯運(yùn)行并觀察運(yùn)行情況,顯示信息可以用液晶顯示器或虛擬終端來(lái)顯示。1).Keil調(diào)試窗口和結(jié)果:2),移植到proteus開(kāi)發(fā)環(huán)境中,利用proteus的硬件仿真參考源代碼:#includesbitled=P1A7;unsignedcharcodetable=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x0

溫馨提示

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