用UC0SII實(shí)現(xiàn)任務(wù)間共享變量的無沖突訪問及任務(wù)間的消息郵箱通信和隊(duì)列通信_第1頁
用UC0SII實(shí)現(xiàn)任務(wù)間共享變量的無沖突訪問及任務(wù)間的消息郵箱通信和隊(duì)列通信_第2頁
用UC0SII實(shí)現(xiàn)任務(wù)間共享變量的無沖突訪問及任務(wù)間的消息郵箱通信和隊(duì)列通信_第3頁
用UC0SII實(shí)現(xiàn)任務(wù)間共享變量的無沖突訪問及任務(wù)間的消息郵箱通信和隊(duì)列通信_第4頁
用UC0SII實(shí)現(xiàn)任務(wù)間共享變量的無沖突訪問及任務(wù)間的消息郵箱通信和隊(duì)列通信_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、實(shí)驗(yàn)項(xiàng)目名稱:用UC0SII實(shí)現(xiàn)任務(wù)間共享變量的無沖突訪問及任務(wù)間的消息郵箱通信和隊(duì)列通信。實(shí)驗(yàn)?zāi)康模?、實(shí)現(xiàn)任務(wù)之間共享變量無沖突的訪問2 、實(shí)現(xiàn)任務(wù)之間消息郵箱的通信3 、實(shí)現(xiàn)任務(wù)之間的消息隊(duì)列的通信實(shí)驗(yàn)內(nèi)容(實(shí)驗(yàn)過程及問題的解決):實(shí)驗(yàn)主要參照了例題4.7、4.8、4.9,將3個(gè)例題合成一個(gè)任務(wù),滿足題目的要求。首先,設(shè)置了5個(gè)任務(wù),oneTask和foTask2個(gè)任務(wù)建立了互斥信號*Mutexp,用OSMutexPend(Mutexp,0,&err);和OSMutexPost(Mutexp),并延時(shí)等待一秒,進(jìn)行2個(gè)任務(wù)的共享變量無沖突訪問控制。然后在hertask任務(wù)中,顯示

2、times的次數(shù),并使用消息郵箱OSMboxPost(Str_Box,s)給twoTask任務(wù)郵箱消息,twoTask接收到消息后,根據(jù)OSTimeGet()獲得系統(tǒng)時(shí)間范圍來判斷要傳送給stwoTask任務(wù)的字符,并使用OSQPost(Str_Q,s4)和OSQPend(Str_Q,0,&err);進(jìn)行消息隊(duì)列的通信。調(diào)試與結(jié)果測試分析:字符oneTaskrunning和foTaskrunning在互斥信號的條件下,一直循環(huán)配對出現(xiàn),而屏幕上的數(shù)字就是消息郵箱傳遞消息的次數(shù),而twoTaskrunning和stwoTaskrunning各出現(xiàn)了2次,是由于在消息隊(duì)列郵箱中設(shè)置了在10

3、0<OSTimeGet()<500和500<OSTimeGet()<900,分別在系統(tǒng)不同時(shí)間范圍內(nèi)顯示不同字符,用以區(qū)別。實(shí)驗(yàn)程序附錄:/*/$1*/#include"includes.h"#defineTASK_STK_SIZE512/任務(wù)堆棧長度#defineN_MESSAGES128OS_STKStartTaskStkTASK_STK_SIZE;OS_STKoneTaskStkTASK_STK_SIZE;OS_STKfoTaskStkTASK_STK_SIZE;OS_STKherTaskStkTASK_STK_SIZE;OS_STKtwoTa

4、skStkTASK_STK_SIZE;OS_STKstwoTaskStkTASK_STK_SIZE;/定義消息隊(duì)列長度/定義任務(wù)堆棧區(qū)/定義任務(wù)堆棧區(qū)/定義任務(wù)堆棧區(qū)/定義任務(wù)堆棧區(qū)/定義任務(wù)堆棧區(qū)/定義任務(wù)堆棧區(qū)INT16Skey;/用于退出的鍵char*s;char*ss;char*s1="oneTaskrunning"char*s2="foTaskrunning"/char*sss="OneTaskRequestsemaphore"char*s3="herTaskrunning"char*s4="t

5、woTaskrunning"char*s5="stwoTaskrunning"INT8Uerr;INT8Uy=0;INT32UTimes=0;/INT32UTimess=0;OS_EVENT*Str_Box;OS_EVENT*Str_Q;OS_EVENT*Mutexp;void*MsgGrpN_MESSAGES;voidStartTask(void*data);voidoneTask(void*data);voidfoTask(void*data);voidherTask(void*data);voidtwoTask(void*data);voidstwoTask

6、(void*data);/字符顯示位/定義事件控制塊/定義事件控制塊/定義消息指針數(shù)組/聲明起始任務(wù)/聲明任務(wù)/聲明任務(wù)/聲明任務(wù)/聲明任務(wù)/聲明任務(wù)/*主函數(shù)*/voidmain(void)OSInit();/初始化uCOS_IIPC_DOSSaveReturn();/保存Dos環(huán)境PC_VectSet(uCOS,OSCtxSw);/安裝uCOS_II中斷Str_Box=OSMboxCreate(void*)0);/創(chuàng)建郵箱型信號量Str_Q=OSQCreate(&MsgGrp0,N_MESSAGES);/創(chuàng)建消息隊(duì)列Mutexp=OSMutexCreate(1,&err);

7、/定義信號量OSTaskCreate(StartTask,/創(chuàng)建任務(wù)StartTask(void*)0,/給任務(wù)傳遞參數(shù)&StartTaskStkTASK_STK_SIZE-1,/設(shè)置任務(wù)堆棧棧頂0);/使任務(wù)的優(yōu)先級別為0OSStart();/啟動(dòng)多任務(wù)管理/*任務(wù)StartTask*/voidStartTask(void*pdata)#ifOS_CRITICAL_METHOD=3OS_CPU_SRcpu_sr;#endifpdata=pdata;OS_ENTER_CRITICAL();PC_VectSet(0x08,OSTickISR);/安裝時(shí)鐘中斷向量PC_SetTickRat

8、e(OS_TICKS_PER_SEC);/設(shè)置uCOS_II時(shí)鐘頻率OS_EXIT_CRITICAL();OSStatInit();/初始化統(tǒng)計(jì)任務(wù)OSTaskCreate(oneTask,/創(chuàng)建任務(wù)oneTask(void*)0,/給任務(wù)傳遞參數(shù)&oneTaskStkTASK_STK_SIZE-1,/設(shè)置任務(wù)堆棧棧頂3);/使任務(wù)的優(yōu)先級別為3OSTaskCreate(foTask,/創(chuàng)建任務(wù)foTask(void*)0,/給任務(wù)傳遞參數(shù)&foTaskStkTASK_STK_SIZE-1,/設(shè)置任務(wù)堆棧棧頂4);/使任務(wù)的優(yōu)先級別為4OSTaskCreate(herTask,

9、/創(chuàng)建任務(wù)herTask(void*)0,/給任務(wù)傳遞參數(shù)&herTaskStkTASK_STK_SIZE-1,/設(shè)置任務(wù)堆棧棧頂5);/使任務(wù)的優(yōu)先級別為5OSTaskCreate(twoTask,/創(chuàng)建任務(wù)twoTask(void*)0,/給任務(wù)傳遞參數(shù)&twoTaskStkTASK_STK_SIZE-1,/設(shè)置任務(wù)堆棧棧頂6);/使任務(wù)的優(yōu)先級別為6OSTaskCreate(stwoTask,/創(chuàng)建任務(wù)stwoTask(void*)0,/給任務(wù)傳遞參數(shù)&stwoTaskStkTASK_STK_SIZE-1,/設(shè)置任務(wù)堆棧棧頂7);/使任務(wù)的優(yōu)先級別為7for(;)

10、如果按下Esc鍵則退出uCOS_IIif(PC_GetKey(&key)=TRUE)if(key=0x1B)PC_DOSReturn();OSTimeDlyHMSM(0,0,3,0);/等待3秒/*任務(wù)oneTask*/voidoneTask(void*pdata)# ifOS_CRITICAL_METHOD=3OS_CPU_SRcpu_sr;#endifpdata=pdata;for(;)/等待200 毫秒/OSTimeDlyHMSM(0,0,0,200);/PC_DispStr(10,+y,/sss,/DISP_BGND_BLACK+DISP_FGND_WHITE);OSMutex

11、Pend(Mutexp,0,&err);/請求信號量PC_DispStr(10,+y,s1,DISP_BGND_BLACK+DISP_FGND_WHITE);OSMutexPost(Mutexp);/發(fā)送信號量號量OSTimeDlyHMSM(0,0,1,0);/等待1秒voidfoTask(void*pdata)/*任務(wù) foTask*/# ifOS_CRITICAL_METHOD=3OS_CPU_SRcpu_sr;#endifpdata=pdata;for(;)OSMutexPend(Mutexp,0,&err);/請求信號量號量PC_DispStr(10,+y,s2,DIS

12、P_BGND_BLACK+DISP_FGND_WHITE);/for(Timess;Timess<2;Timess+)/OS_Sched();/OSMutexPost(Mutexp);/發(fā)送信號量OSTimeDlyHMSM(0,0,1,0);/等待1秒/*任務(wù) herTask*/voidherTask(void*pdata)# ifOS_CRITICAL_METHOD=3OS_CPU_SRcpu_sr;#endifpdata=pdata;for(;)sprintf(s,"%d",Times);/發(fā)送消息OSMboxPost(Str_Box,s);/*PC_DispSt

13、r(10,+y,Str_Box->OSEventPtr,/s,DISP_BGND_BLACK+DISP_FGND_WHITE);*/Times+;OSTimeDlyHMSM(0,0,1,0);/等待1秒voidtwoTask(void*pdata)/*任務(wù) twoTask*/# ifOS_CRITICAL_METHOD=3OS_CPU_SRcpu_sr;#endifpdata=pdata;for(;)ss=OSMboxPend(Str_Box,10,&err);PC_DispStr(10,+y,ss,DISP_BGND_BLACK+DISP_FGND_WHITE);if(OSTimeGet()>100&&OSTimeGet()<500)OSQPost(Str_Q,s4);/發(fā)送消息if(OSTimeGet()>500&&OSTimeGet()<900)OSQPostFront(Str_Q,s5);/發(fā)送消息OSTimeDlyHMSM(0,0,1,0);/等待1秒voidst

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論