付費下載
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
實驗五郵箱通信實驗一、實驗?zāi)康恼莆誹C/OS-II操作系統(tǒng)下使用信號量解決任務(wù)之間的同步問題;掌握uC/OS-II操作系統(tǒng)下任務(wù)間通訊的方法。二、實驗內(nèi)容三、實驗設(shè)備四、實驗原理1.uC/OS-II任務(wù)之間的通訊與同步方式:在μC/OS-II中,有多種方法可以保護任務(wù)之間的共享數(shù)據(jù)和提供任務(wù)之間的通訊。1)利用宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()來關(guān)閉中斷和打開中斷。當(dāng)兩個任務(wù)或者一個任務(wù)和一個中斷服務(wù)子程序共享某些數(shù)據(jù)時,可以采用這種方法;2)利用函數(shù)OSSchedLock()和OSSchekUnlock()對μC/OS-II中的任務(wù)調(diào)度函數(shù)上鎖和開鎖;3)信號量;4)郵箱;5)隊列。2.uC/OS-II中使用郵箱實現(xiàn)任務(wù)之間的通訊郵箱可使一個任務(wù)或者中斷服務(wù)子程序向另一個任務(wù)發(fā)送一個指針型的變量。該指針指向一個包含了特定“消息”的數(shù)據(jù)結(jié)構(gòu)。通過調(diào)用OSMboxCreate()函數(shù)來創(chuàng)建郵箱,并指定指針的初始值。一般情況下,這個初始值是NULL,但也可以初始化一個郵箱,使其在最開始就包含一條消息。如果使用郵箱的目的是用來通知一個事件的發(fā)生(發(fā)送一條消息),那么就要初始化該郵箱為NULL,因為在開始時,事件還沒有發(fā)生。如果用戶用郵箱來共享某些資源,那么就要初始化該郵箱為一個非NULL的指針。在這種情況下,郵箱被當(dāng)成一個二值信號量使用。使用郵箱同樣可以實現(xiàn)上節(jié)中描述的任務(wù)間的同步。通過OSMboxPost()函數(shù)發(fā)送一個消息到郵箱中,通過OSMboxPend()函數(shù)等待一個郵箱中的消息,如果郵箱中沒有可用的消息,OSMboxPend()的調(diào)用任務(wù)就被掛起,直到郵箱中有了消息或者等待超時。下面的代碼每100個時鐘節(jié)拍從TaskSEG中發(fā)送一個字符串,在TaskLED中接收并打印出來。voidTaskLED(void*Id){char*Msg;INT8Uerr;for(;;){/*waitforamessagefromtheinputmailbox*/Msg=(char*)OSMboxPend(Mbox1,0,&err);uHALr_printf(Msg);/*printtask'sid*/}}voidTaskSEG(void*Id){charMsg[100];INT8Uerr;intnCount=0;for(;;){/*posttheinputmessagetotheoutputmailbox*/sprintf(Msg,"TaskSEG%d",nCount++);OSMboxPost(Mbox1,Msg);OSTimeDly(100);}}五、實驗步驟1、打開E:\caderm\examples\UCOS-II\Eg3.aws工程,編譯鏈接工程,并下載運行,代碼實現(xiàn)每100個時鐘節(jié)拍從TaskSEG中發(fā)送一個字符串,在TaskLED中接收并打印出來。仔細閱讀程序,理解郵箱通信。2、修改程序,實現(xiàn)一個任務(wù)發(fā)送英文字符消息a-z(可以只發(fā)送其中幾個字符,也可以一個一個全部發(fā)送),發(fā)送后點亮LED燈(點燈的花樣自行定義),另一個任務(wù)接收消息并在串口終端上顯示。修改后的程序如下:#include "Includes.h"/*uC/OSinterface*/#include"option.h"#include"2410lib.h"#include"uhal.h"/*任務(wù)棧*/OS_STKStackLED[STACKSIZE]={0,};//任務(wù)LED任務(wù)棧OS_STKStackSEG[STACKSIZE]={0,};//任務(wù)SEG任務(wù)棧/*任務(wù)ID*/charIdLED='1';//任務(wù)LEDIDcharIdSEG='2';//任務(wù)SEGID/*任務(wù)處理函數(shù)*/voidTaskLED(void*Id);//任務(wù)LED任務(wù)處理函數(shù)voidTaskSEG(void*Id);//任務(wù)SEG任務(wù)處理函數(shù)/*郵箱*/OS_EVENT*Mbox1;/**跑馬燈閃爍函數(shù),調(diào)用一次,四個跑馬燈由亮變滅或者由滅變亮*/voidUser_LED_Blink(void){ staticintled_status=0; led_status+=1; if(led_status%2==0) Led_Display(0x0f); else Led_Display(0x00); }/**數(shù)碼管顯示實驗,由0到F依次顯示*/voidUser_SEG_Blink(void){ staticunsignedcharseg_value[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; staticintseg_status=0; *((unsignedchar*)0x10000006)=0x3e; *((unsignedchar*)0x10000004)=seg_value[seg_status]; seg_status+=1; if(seg_status>15) seg_status=0;}/**任務(wù)LED任務(wù)處理函數(shù)*1、OSStart調(diào)用之前創(chuàng)建的最高優(yōu)先級任務(wù),在該函數(shù)重啟動時鐘節(jié)拍定時器*2、等待郵箱中的消息,并打印出來*/voidTaskLED(void*Id){ char *Msg; INT8U err;/*啟動時鐘節(jié)拍定時器,開始多任務(wù)調(diào)度*/ARMTargetStart(); for(;;){ /*等待郵箱中的消息,如果沒有消息則掛起該任務(wù)*/ Msg=(char*)OSMboxPend(Mbox1,0,&err); /*打印接受到的消息*/ uHALr_printf(Msg); }}/**任務(wù)SEG任務(wù)處理函數(shù)*1、每隔100ticks即1000ms,閃爍數(shù)碼管*2、每隔100ticks即1000ms,向郵箱發(fā)送一個字符串?dāng)?shù)據(jù)*/voidTaskSEG(void*Id){ char Msg[100]; INT8U err; intnCount=97; for(;;){ /*發(fā)送數(shù)據(jù)到郵箱*/ if(nCount>121)//’a’~’z’所對應(yīng)的ASCII碼 nCount=97; elsesprintf(Msg,"%c\n",nCount++); OSMboxPost(Mbox1,Msg); /*閃爍數(shù)碼管*/ User_SEG_Blink(); User_LED_Blink(); /*延遲1000ms*/ OSTimeDly(100); }}/**Main函數(shù).*1、初始化目標(biāo)系統(tǒng),初始化硬件定時器等,與操作系統(tǒng)無關(guān)*2、調(diào)用OSInit初始化uC/OS-II軟件數(shù)據(jù)結(jié)構(gòu)等,必須在打開時鐘節(jié)拍中斷之前調(diào)用*3、創(chuàng)建一個郵箱*4、創(chuàng)建兩個任務(wù),TaskLED和TaskSEG,TaskLED的優(yōu)先級為5,TaskSEG的優(yōu)先級為13,TaskLED的優(yōu)先級高于TaskSEG*5、調(diào)用OSStart啟動uC/OS-II*/voidMain(void){/**目標(biāo)系統(tǒng)初始化*/ ARMTargetInit();/**uC/OS-II軟件初始化*/ OSInit(); /* *創(chuàng)建一個郵箱 */ Mbox1=OSMboxCreate((void*)0); /**創(chuàng)建兩個任務(wù),TaskLED和TaskSEG,TaskLED的優(yōu)先級為5,TaskSEG的優(yōu)先級為13,TaskLED的優(yōu)先級高于TaskSEG*/ OSTaskCreate(TaskLED,(void*)&IdLED,(OS_STK*)&StackLED[STACKSIZE-1],5); OSTaskCreate(TaskSEG,(void*)&IdSEG,(OS_STK*)&StackSEG[STACKSIZE-1],
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年上海煙草機械有限責(zé)任公司招聘16人備考考試試題附答案解析
- 2026年上半年黑龍江省教育廳事業(yè)單位公開招聘工作人員1人備考考試試題附答案解析
- 2026云南昭通市公共就業(yè)和人才服務(wù)中心招聘1人備考考試題庫附答案解析
- 2026廣西南寧市隆安縣疾病預(yù)防控制中心招聘編外工作人員3人備考考試題庫附答案解析
- 2026新疆昆玉融泰紡織科技有限公司招聘1人參考考試題庫附答案解析
- 2026江蘇南京大學(xué)XZ2026-011地球科學(xué)與工程學(xué)院秘書招聘參考考試試題附答案解析
- 2026西安未央?yún)^(qū)漢城社區(qū)衛(wèi)生服務(wù)中心招聘(19人)參考考試題庫附答案解析
- 2026吉林白城市大安市公安局招聘警務(wù)輔助人員50人備考考試試題附答案解析
- 2026年上半年云南省科學(xué)技術(shù)廳直屬事業(yè)單位公開招聘人員(8人)備考考試題庫附答案解析
- 2026中智江西贛州蓉江新區(qū)項目綜合服務(wù)崗招聘2人參考考試試題附答案解析
- 【《四旋翼飛行器坐標(biāo)系及相互轉(zhuǎn)換關(guān)系分析綜述》1000字】
- 2026浙江金華市婺城區(qū)城市發(fā)展控股集團有限公司招聘59人筆試參考題庫及答案解析
- 靜脈補液課件
- 廣東深圳市鹽田高級中學(xué)2024~2025學(xué)年高一上冊1月期末考試化學(xué)試題 附答案
- 2026年自動駕駛政策法規(guī)報告
- 2026年輔警招聘考試試題庫附答案【完整版】
- 浙江省《檢驗檢測機構(gòu)技術(shù)負責(zé)人授權(quán)簽字人》考試題及答案
- 新媒體評論管理制度規(guī)范(3篇)
- 建筑施工風(fēng)險辨識與防范措施
- 浙江省杭州地區(qū)六校2026屆化學(xué)高一第一學(xué)期期末學(xué)業(yè)水平測試試題含解析
- 2025年CFA二級估值與財務(wù)報表分析試卷(含答案)
評論
0/150
提交評論