




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、江蘇師范大學(xué)計(jì) 算 機(jī) 科 學(xué) 與 技 術(shù) 學(xué) 院實(shí) 驗(yàn) 報(bào) 告課 程:嵌入式系統(tǒng)及應(yīng)用 學(xué) 號(hào):姓 名:班 級(jí):教 師:計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院制實(shí)驗(yàn)一:實(shí)驗(yàn)名稱:BC工具的使用方法實(shí)驗(yàn)?zāi)康模簩W(xué)習(xí)和掌握BC工具的使用方法實(shí)驗(yàn)(程序調(diào)試)過程:進(jìn)行下述實(shí)驗(yàn)前設(shè)置環(huán)境變量PATH,變量值添加:例題2-1一個(gè)簡單的問候程序1. 程序代碼#include<stdio.h>void main()printf(“Hello,World!n”);2. 編輯程序使用Windows提供的文本文件,待程序編寫完畢無誤后用8109.c名稱將文件存放到事先創(chuàng)建的一個(gè)目錄中,即11268109中。3. 把程序
2、編譯成目標(biāo)程序進(jìn)入命令環(huán)境并進(jìn)入程序所在的目錄,然后使用如下的命令對(duì)源文件8109.c進(jìn)行編譯:bcc -c -ml -Ic:bc31include - Lc:bc31lib 8109.c4. 把目標(biāo)文件連接成可執(zhí)行文件命令如下:tlink c:bc31libc0l.obj test.obj,test,test,c:bc31libcl.lib5. 運(yùn)行8109例題2-2一個(gè)具有三個(gè)源文件應(yīng)用程序的編譯及連接示例1. pa程序代碼/pa.h#ifndef PA_H#define PA_Hvoid A_print();#endif/pa.c#include<stdio.h>#inclu
3、de"pa.h"void A_print() printf("AAAAAAAAn");2. pb程序代碼/pb.h#ifndef PB_H#define PB_Hvoid B_print();#endif/pb.c#include<stdio.h>#include"pb.h"void B_print() printf(" BBBBBBBBn");3. 8109.c程序代碼/8109.c#include"pa.h"#include"pb.h"void main()
4、for(;) A_print(); B_print(); 4. 編譯編譯pa.c以形成pa.obj文件,命令為:>bcc - c -ml -Ic:bc31include -I. -Lc:bc31lib pa.c編譯pb.c以形成pa.obj文件,命令為:>bcc - c -ml -Ic:bc31include -I. -Lc:bc31lib pb.c編譯8109.c以形成8109.obj文件,命令為:>bcc - c -ml -Ic:bc31include -I. -Lc:bc31lib 8109.c5. 連接成可執(zhí)行文件8109.exe生成8109.exe的命令為>t
5、link c:bc31libc0l.obj pa.obj pb.obj 8109.obj,8109,8109,c:bc31libcl.lib6.運(yùn)行實(shí)驗(yàn)過程中遇到的問題與解決方法:1. 問題:源代碼中出現(xiàn)中文字符,程序出錯(cuò)。解決方法:把源代碼中的中文字符改為英文字符。2. 輸入命令時(shí)把英文字母L寫成數(shù)字1。3. 沒有配置環(huán)境變量,命令不能執(zhí)行。分析程序運(yùn)行結(jié)果:Bcc命令編譯生成obj文件,tlink命令將obj文件鏈接生成可執(zhí)行文件。用bcc分別編譯pa.c,pb.c,8109.c生成obj文件,編寫tlink文件進(jìn)行連接,生成可執(zhí)行文件。運(yùn)行結(jié)果實(shí)驗(yàn)二:實(shí)驗(yàn)名稱:*.MAK的編寫方法實(shí)驗(yàn)?zāi)?/p>
6、的:掌握*.MAK文件的編寫方法實(shí)驗(yàn)(程序調(diào)試)過程:例題2-3標(biāo)號(hào)作用的示例1. makefile代碼target1: md 11target2: md 22target3: rd 11 rd 222. 運(yùn)行命令makemake target2make target3例題2-4:為例題2-2設(shè)計(jì)一個(gè)具有4個(gè)程序段的makefile,并在該文件中實(shí)現(xiàn)源文件的編譯以及目標(biāo)文件的連接,從而生成最終可執(zhí)行文件。1. makefile代碼如下:8109.EXE: TLINK tlink.txtPA.OBJ: Bcc -c -ml -Ic:bc31include -Lc:bc31lib PA.cPB.O
7、BJ: Bcc -c -ml -Ic:bc31include -Lc:bc31lib PB.c8060.OBJ: Bcc -c -ml -Ic:bc31include -Lc:bc31lib 8109.c2. makefile的執(zhí)行:>make pa.obj>make pb.obj>make 8109.obj>make例題2-5為例題2-2程序編寫一個(gè)makefile文件,并利用依賴把用以完成工程文件編譯及連接工作的各個(gè)程序段之間關(guān)聯(lián)起來,從而使用戶僅使用一個(gè)make命令,便可完成編譯及連接任務(wù)。1. makefile文件8109.EXE: PA.OBJ PB.OBJ
8、8109.OBJ TLINK tlink.txtPA.OBJ: Bcc -c -ml -Ic:bc31include -Lc:bc31lib PA.cPB.OBJ: Bcc -c -ml -Ic:bc31include -Lc:bc31lib PB.c8109.OBJ: Bcc -c -ml -Ic:bc31include -Lc:bc31lib 8109.c2. makefile的執(zhí)行過程>make例題2-6使用批處理文件、makefile和連接文件來處理例題2-2源程序的編譯和連接。1. 批處理文件由于在前面已經(jīng)有了makefile和連接文件,所以這里只寫批處理文件:ECHO OFF
9、ECHO *ECHO * 批處理文件ECHO *ECHO *ECHO ONc:bc31binmake -f 8109.mak2. 批處理文件的啟動(dòng):雙擊該文件即可例題2-7:本例使用了兩個(gè)來源不同的第三方源程序,一個(gè)存放在目錄PORTPT,另一個(gè)存放在目錄PC。用戶自己的源文件TEST.c和連接文件TEST.LNK存放在目錄SOURCE,批處理文件和makefile文件被存放在目錄TEST,同時(shí)該目錄還要負(fù)責(zé)存放將來創(chuàng)建出來的最終可執(zhí)行文件TEST.EXE。本例題無第三方源程序,故無實(shí)驗(yàn)結(jié)果!實(shí)驗(yàn)過程中遇到的問題與解決方法:1. 問題:在做例題2-6時(shí),雙擊批處理文件,運(yùn)行失敗。解決方法:沒有
10、把makefile文件名字改為8060.mak,修改之后就可以正常運(yùn)行了。分析程序運(yùn)行結(jié)果:2-3創(chuàng)建目錄11,創(chuàng)建目錄22,刪除目錄11,、22.2-4(1)2-4(2)2-4(3)2-4(4)2-5(1)2-5(2)2-6實(shí)驗(yàn)三:實(shí)驗(yàn)名稱:調(diào)試第三章3-63-10例題實(shí)驗(yàn)?zāi)康模赫莆盏谌?-63-10例題的調(diào)試方法實(shí)驗(yàn)(程序調(diào)試)過程:例題3-6設(shè)計(jì)一個(gè)只有一個(gè)任務(wù)MyTasK的應(yīng)用程序,當(dāng)程序運(yùn)行后,任務(wù)MyTasK的工作就是每秒在顯示器上顯示一個(gè)字符“M”。該應(yīng)用程序的代碼如下:#include "includes.h"#define TASK_STK_SIZE 5
11、12/任務(wù)堆棧長度OS_STK TaskStartStkTASK_STK_SIZE;/定義任務(wù)堆棧區(qū)INT16S key;/用于退出uCOS_II的鍵INT8U x=0,y=0;/字符顯示位置void MyTask(void *data);/聲明一個(gè)任務(wù)/*主函數(shù)*/void main (void) char* s="M"/定義要顯示的字符 OSInit();/初始化uCOS_II PC_DOSSaveReturn();/保存Dos環(huán)境 PC_VectSet(uCOS, OSCtxSw);/安裝uCOS_II中斷 OSTaskCreate(MyTask,/創(chuàng)建任務(wù)MyTas
12、ks,/給任務(wù)傳遞參數(shù)&TaskStartStkTASK_STK_SIZE - 1,/設(shè)置任務(wù)堆棧棧頂指針0);/使任務(wù)MyTask的優(yōu)先級(jí)別為0 OSStart();/啟動(dòng)uCOS_II的多任務(wù)管理void MyTask (void *pdata)#if OS_CRITICAL_METHOD = 3 OS_CPU_SR cpu_sr;#endif pdata = pdata; OS_ENTER_CRITICAL(); PC_VectSet(0x08, OSTickISR);/安裝uCOS_II時(shí)鐘中斷向量 PC_SetTickRate(OS_TICKS_PER_SEC);/設(shè)置uCO
13、S_II時(shí)鐘頻率 OS_EXIT_CRITICAL(); OSStatInit();/初始化uCOS_II的統(tǒng)計(jì)任務(wù) for (;) if (x>10) x=0; y+=2; PC_DispChar(x, y,/在x,y位置顯示s中的字符*(char*)pdata, DISP_BGND_BLACK+DISP_FGND_WHITE ); x += 1; /如果按下Esc鍵則退出uCOS_IIif (PC_GetKey(&key) = TRUE) if (key = 0x1B) PC_DOSReturn(); OSTimeDlyHMSM(0, 0, 1, 0);/等待 例題3-7在3
14、-6應(yīng)用程序的任務(wù)MyTasK中再創(chuàng)建一個(gè)任務(wù)YouTasK,當(dāng)程序運(yùn)行后,任務(wù)MyTasK的工作在顯示器上顯示一個(gè)字符“M”;而任務(wù)YouTasK則是在顯示器上顯示字符“Y”。應(yīng)用程序的源代碼如下:/*Test*/#include "includes.h"#define TASK_STK_SIZE 512/任務(wù)堆棧長度OS_STK MyTaskStkTASK_STK_SIZE;/定義任務(wù)堆棧區(qū)OS_STK YouTaskStkTASK_STK_SIZE;/定義任務(wù)堆棧區(qū)INT16S key;/用于退出uCOS_II的鍵INT8U x=0,y=0;/字符顯示位置void M
15、yTask(void *data);/聲明任務(wù)void YouTask(void *data);/聲明任務(wù)/*主函數(shù)*/void main (void) char* s_M="M"/定義要顯示的字符 OSInit( );/初始化uCOS_II PC_DOSSaveReturn( );/保存Dos環(huán)境 PC_VectSet(uCOS, OSCtxSw);/安裝uCOS_II中斷 OSTaskCreate(MyTask,/創(chuàng)建任務(wù)MyTasks_M,/給任務(wù)傳遞參數(shù)&MyTaskStkTASK_STK_SIZE - 1,/設(shè)置任務(wù)堆棧棧頂指針0/任務(wù)的優(yōu)先級(jí)別為0);
16、OSStart( );/啟動(dòng)多任務(wù)管理/*任務(wù)MyTask*/void MyTask (void *pdata) char* s_Y="Y"/定義要顯示的字符#if OS_CRITICAL_METHOD = 3 OS_CPU_SR cpu_sr;#endif pdata = pdata; OS_ENTER_CRITICAL( ); PC_VectSet(0x08, OSTickISR);/安裝時(shí)鐘中斷向量 PC_SetTickRate(OS_TICKS_PER_SEC);/設(shè)置時(shí)鐘頻率 OS_EXIT_CRITICAL( ); OSStatInit( );/初始化統(tǒng)計(jì)任務(wù)
17、OSTaskCreate(YouTask,/創(chuàng)建任務(wù)MyTasks_Y,/給任務(wù)傳遞參數(shù)&YouTaskStkTASK_STK_SIZE - 1,/設(shè)置任務(wù)堆棧棧頂指針2/ MyTask的優(yōu)先級(jí)別為2); for (;) if (x>50) x=0; y+=2; PC_DispChar(x, y,/字符的顯示位置*(char*)pdata, DISP_BGND_BLACK+DISP_FGND_WHITE ); x += 1; /如果按下Esc鍵則退出uCOS_IIif (PC_GetKey(&key) = TRUE) if (key = 0x1B) PC_DOSRetur
18、n( );/恢復(fù)Dos環(huán)境 OSTimeDlyHMSM(0, 0, 3, 0);/等待3秒/*任務(wù)YouTask*/void YouTask (void *pdata)#if OS_CRITICAL_METHOD = 3 OS_CPU_SR cpu_sr;#endif pdata = pdata; for (;) if (x>50) x=0; y+=2; PC_DispChar(x, y,/字符的顯示位置*(char*)pdata, DISP_BGND_BLACK+DISP_FGND_WHITE ); x += 1; OSTimeDlyHMSM(0, 0, 1, 0);/等待1秒 /*E
19、nd*/例題3-8修改例題3-7應(yīng)用程序的任務(wù)YouTasK。要求任務(wù)YouTasK運(yùn)行20次后,掛起任MyTasK務(wù);當(dāng)任務(wù)YouTasK運(yùn)行40次后,恢復(fù)任務(wù)MyTasK。應(yīng)用程序的源代碼如下:#include "includes.h"#define TASK_STK_SIZE 512/任務(wù)堆棧長度OS_STK MyTaskStkTASK_STK_SIZE;/定義任務(wù)堆棧區(qū)OS_STK YouTaskStkTASK_STK_SIZE;/定義任務(wù)堆棧區(qū)INT16S key;/用于退出uCOS_II的鍵INT8U x=0,y=0;/字符顯示位置INT8U time=0;vo
20、id MyTask(void *data);/聲明任務(wù)void YouTask(void *data);/聲明任務(wù)/*主函數(shù)*/void main (void) char* s_M="M"/定義要顯示的字符 OSInit();/初始化uCOS_II PC_DOSSaveReturn();/保存Dos環(huán)境 PC_VectSet(uCOS, OSCtxSw);/安裝uCOS_II中斷 OSTaskCreate(MyTask,/創(chuàng)建任務(wù)MyTasks_M,/給任務(wù)傳遞參數(shù)&MyTaskStkTASK_STK_SIZE - 1,/設(shè)置任務(wù)堆棧棧頂指針0);/使任務(wù)MyTas
21、k的優(yōu)先級(jí)別為0 OSStart();/啟動(dòng)uCOS_II的多任務(wù)管理/*任務(wù)MyTask*/void MyTask (void *pdata) char* s_Y="Y"/定義要顯示的字符#if OS_CRITICAL_METHOD = 3 OS_CPU_SR cpu_sr;#endif pdata = pdata; OS_ENTER_CRITICAL(); PC_VectSet(0x08, OSTickISR);/安裝uCOS_II時(shí)鐘中斷向量 PC_SetTickRate(OS_TICKS_PER_SEC);/設(shè)置uCOS_II時(shí)鐘頻率 OS_EXIT_CRITICA
22、L(); OSStatInit();/初始化uCOS_II的統(tǒng)計(jì)任務(wù) OSTaskCreate(YouTask,/創(chuàng)建任務(wù)MyTasks_Y,/給任務(wù)傳遞參數(shù)&YouTaskStkTASK_STK_SIZE - 1,/設(shè)置任務(wù)堆棧棧頂指針2);/使任務(wù)MyTask的優(yōu)先級(jí)別為0 for (;) if (x>50) x=0; y+=2; PC_DispChar(x, y,/顯示字符的位置*(char*)pdata, DISP_BGND_BLACK+DISP_FGND_WHITE ); x += 1; /如果按下Esc鍵則退出uCOS_IIif (PC_GetKey(&key
23、) = TRUE) if (key = 0x1B) PC_DOSReturn(); OSTimeDlyHMSM(0, 0, 3, 0);/等待 /*任務(wù)YouTask*/void YouTask (void *pdata)#if OS_CRITICAL_METHOD = 3 OS_CPU_SR cpu_sr;#endif pdata = pdata; for (;) if(time=20) OSTaskSuspend(0); if(time=40) OSTaskResume(0); time+=1; if (x>50) x=0; y+=2; PC_DispChar(x, y,/顯示字符的
24、位置*(char*)pdata, DISP_BGND_BLACK+DISP_FGND_WHITE ); x += 1; OSTimeDlyHMSM(0, 0, 1, 0);/等待 /*End*/例題3-9改造例題3-7的任務(wù)MyTasK,當(dāng)任務(wù)MyTasK運(yùn)行10次時(shí)用函數(shù)OSSchedLock()對(duì)調(diào)度器進(jìn)行加鎖,而當(dāng)任務(wù)MyTasK運(yùn)行到第80次時(shí)再用函數(shù)OSSchedUnlock()對(duì)調(diào)度器進(jìn)行解鎖,并運(yùn)行該程序。應(yīng)用程序的代碼如下:#include "includes.h"#define TASK_STK_SIZE 512/任務(wù)堆棧長度OS_STK MyTaskSt
25、kTASK_STK_SIZE;/定義任務(wù)堆棧區(qū)OS_STK YouTaskStkTASK_STK_SIZE;/定義任務(wù)堆棧區(qū)INT16S key;/用于退出uCOS_II的鍵INT8U x=0,y=0;/字符顯示位置INT8U times=0;/運(yùn)行次數(shù)void MyTask(void *data);/聲明任務(wù)void YouTask(void *data);/聲明任務(wù)/*主函數(shù)*/void main (void) char* s_M="M"/定義要顯示的字符 OSInit();/初始化uCOS_II PC_DOSSaveReturn();/保存Dos環(huán)境 PC_VectS
26、et(uCOS, OSCtxSw);/安裝uCOS_II中斷 OSTaskCreate(MyTask,/創(chuàng)建任務(wù)MyTasks_M,/給任務(wù)傳遞參數(shù)&MyTaskStkTASK_STK_SIZE - 1,/設(shè)置任務(wù)堆棧棧頂指針0);/使任務(wù)MyTask的優(yōu)先級(jí)別為0 OSStart();/啟動(dòng)uCOS_II的多任務(wù)管理/*任務(wù)MyTask*/void MyTask (void *pdata) char* s_Y="Y"/定義要顯示的字符#if OS_CRITICAL_METHOD = 3 OS_CPU_SR cpu_sr;#endif pdata = pdata;
27、OS_ENTER_CRITICAL(); PC_VectSet(0x08, OSTickISR);/安裝uCOS_II時(shí)鐘中斷向量 PC_SetTickRate(OS_TICKS_PER_SEC);/設(shè)置uCOS_II時(shí)鐘頻率 OS_EXIT_CRITICAL(); OSStatInit();/初始化uCOS_II的統(tǒng)計(jì)任務(wù) OSTaskCreate(YouTask,/創(chuàng)建任務(wù)MyTasks_Y,/給任務(wù)傳遞參數(shù)&YouTaskStkTASK_STK_SIZE - 1,/設(shè)置任務(wù)堆棧棧頂指針2);/使任務(wù)MyTask的優(yōu)先級(jí)別為2 for (;) if (x>50) x=0; y
28、+=2; times+=1;if (times=10)OSSchedLock();/鎖調(diào)度器if (times=80)OSSchedUnlock();/解鎖調(diào)度器 PC_DispChar(x, y,/顯示字符的位置*(char*)pdata, DISP_BGND_BLACK+DISP_FGND_WHITE ); x += 1; /如果按下Esc鍵則退出uCOS_IIif (PC_GetKey(&key) = TRUE) if (key = 0x1B) PC_DOSReturn(); OSTimeDlyHMSM(0, 0, 3, 0);/等待 /*任務(wù)YouTask*/void YouT
29、ask (void *pdata)#if OS_CRITICAL_METHOD = 3 OS_CPU_SR cpu_sr;#endif pdata = pdata; for (;) if (x>50) x=0; y+=2; PC_DispChar(x, y,/顯示字符的位置*(char*)pdata, DISP_BGND_BLACK+DISP_FGND_WHITE ); x += 1; OSTimeDlyHMSM(0, 0, 1, 0);/等待 /*End*/例題3-10 修改例題3-7應(yīng)用程序,使任務(wù)MyTasK能刪除任務(wù)YouTasK。修改后的代碼如下:#include "
30、includes.h"#define TASK_STK_SIZE 512/任務(wù)堆棧長度OS_STK MyTaskStkTASK_STK_SIZE;/定義任務(wù)堆棧區(qū)OS_STK YouTaskStkTASK_STK_SIZE;/定義任務(wù)堆棧區(qū)INT16S key;/用于退出uCOS_II的鍵INT8U x=0,y=0;/字符顯示位置void MyTask(void *data);/聲明任務(wù)void YouTask(void *data);/聲明任務(wù)/*主函數(shù)*/void main (void) char* s_M="M"/定義要顯示的字符 OSInit();/初始化
31、uCOS_II PC_DOSSaveReturn();/保存Dos環(huán)境 PC_VectSet(uCOS, OSCtxSw);/安裝uCOS_II中斷 OSTaskCreate(MyTask,/創(chuàng)建任務(wù)MyTasks_M,/給任務(wù)傳遞參數(shù)&MyTaskStkTASK_STK_SIZE - 1,/設(shè)置任務(wù)堆棧棧頂指針0);/使任務(wù)MyTask的優(yōu)先級(jí)別為0 OSStart();/啟動(dòng)uCOS_II的多任務(wù)管理/*任務(wù)MyTask*/void MyTask (void *pdata) char* s_Y="Y"/定義要顯示的字符 char* s="MyTask:
32、我要求YouTask自己刪除自己!"#if OS_CRITICAL_METHOD = 3 OS_CPU_SR cpu_sr;#endif pdata = pdata; OS_ENTER_CRITICAL(); PC_VectSet(0x08, OSTickISR);/安裝uCOS_II時(shí)鐘中斷向量 PC_SetTickRate(OS_TICKS_PER_SEC);/設(shè)置uCOS_II時(shí)鐘頻率 OS_EXIT_CRITICAL(); OSStatInit();/初始化uCOS_II的統(tǒng)計(jì)任務(wù) OSTaskCreate(YouTask,/創(chuàng)建任務(wù)MyTasks_Y,/給任務(wù)傳遞參數(shù)&am
33、p;YouTaskStkTASK_STK_SIZE - 1,/設(shè)置任務(wù)堆棧棧頂指針2);/使任務(wù)MyTask的優(yōu)先級(jí)別為0 for (;) if (x>30)while( OSTaskDelReq( 2 ) != OS_TASK_NOT_EXIST ) PC_DispStr(10,8,s,DISP_FGND_YELLOW+DISP_BGND_BLUE);OSTimeDly(1);/延時(shí)一個(gè)時(shí)鐘節(jié)拍 if (x>50) x=0; y+=2; PC_DispChar(x, y,/顯示字符的位置*(char*)pdata, DISP_BGND_BLACK+DISP_FGND_WHITE
34、); x += 1; /如果按下Esc鍵則退出uCOS_IIif (PC_GetKey(&key) = TRUE) if (key = 0x1B) PC_DOSReturn(); OSTimeDlyHMSM(0, 0, 3, 0);/等待 /*任務(wù)YouTask*/void YouTask (void *pdata) char *s1="YouTask:我必須要?jiǎng)h除我自己了!" char *s2="YouTask:我已經(jīng)刪除我自己了!"#if OS_CRITICAL_METHOD = 3 OS_CPU_SR cpu_sr;#endif pdata
35、 = pdata; for (;) if( OSTaskDelReq(OS_PRIO_SELF ) = OS_TASK_DEL_REQ )PC_DispStr(10,10,s1,DISP_FGND_WHITE+DISP_BGND_BLACK);OSTimeDlyHMSM(0, 0, 15, 0);PC_DispStr(10,12,s2,DISP_FGND_WHITE+DISP_BGND_BLACK);OSTaskDel( OS_PRIO_SELF ); if (x>50) x=0; y+=2; PC_DispChar(x, y,/顯示字符的位置*(char*)pdata, DISP_BG
36、ND_BLACK+DISP_FGND_WHITE ); x += 1; OSTimeDlyHMSM(0, 0, 1, 0);/等待 /*End*/實(shí)驗(yàn)過程中遇到的問題與解決方法:1. 編寫連接文件時(shí)出錯(cuò),程序不能正常運(yùn)行。解決方法:用記事本打開,并把文件屬性設(shè)置為所有屬性,然后修改即可。分析程序運(yùn)行結(jié)果:3-6無符號(hào)8位整數(shù)x記錄一行中已打印的字符數(shù),y記錄打印位置的行數(shù),分別初始化為0。Main函數(shù)中經(jīng)OSInit()初始化uC/OSii,經(jīng)PC_DOSSaveReturn()保存當(dāng)前的dos環(huán)境,安裝任務(wù)切換中斷向量,用OSTaskCreate()創(chuàng)建MyTask任務(wù),設(shè)置優(yōu)先級(jí)為0(最高
37、),隨后用OSStart()啟動(dòng)多任務(wù)管理器。MyTask任務(wù)中,首先進(jìn)入臨界段,安裝時(shí)鐘中斷向量,并設(shè)置時(shí)鐘頻率,然后退出臨界段。for循環(huán)中剛開始的if判斷當(dāng)前一行打印字符數(shù)是否超過11個(gè)(x從0開始計(jì)數(shù),每打印一個(gè)M,則x+=1),若超過11個(gè),則x復(fù)位到0,y+=2,即打印位置向下移2行。PC_DispChar()函數(shù)用于打印字符,后景色黑色,前景色白色,位置為x列y行,每打印一個(gè)字符,列數(shù)加1。若按下ESC,則推出uC/OS,OSTimeDlyHMSM()用于延時(shí),每輸出一個(gè)字符,等待1秒。3-7無符號(hào)8位整數(shù)x記錄打印字符位置的列數(shù),y記錄打印位置的行數(shù),分別初始化為0。Main函
38、數(shù)中經(jīng)OSInit()初始化uC/OSii,經(jīng)PC_DOSSaveReturn()保存當(dāng)前的dos環(huán)境,安裝任務(wù)切換中斷向量,用OSTaskCreate()創(chuàng)建MyTask任務(wù),設(shè)置優(yōu)先級(jí)為0(最高),隨后用OSStart()啟動(dòng)多任務(wù)管理器。MyTask任務(wù)中,首先進(jìn)入臨界段,安裝時(shí)鐘中斷向量,并設(shè)置時(shí)鐘頻率,然后退出臨界段。MyTask中通過OSTaskCreate()創(chuàng)建了YouTask任務(wù),設(shè)置優(yōu)先級(jí)為2。for循環(huán)中剛開始的if判斷當(dāng)前一行打印字符數(shù)是否超過51個(gè)(x從0開始計(jì)數(shù),每打印一個(gè)M,則x+=1),若超過51個(gè),則x復(fù)位到0,y+=2,即打印位置向下移2行。PC_DispC
39、har()函數(shù)用于打印字符,后景色黑色,前景色白色,位置為x列y行,每打印一個(gè)字符“M”,列數(shù)加1。若按下ESC,則推出uC/OS,OSTimeDlyHMSM()用于延時(shí),每輸出一個(gè)字符,等待3秒。在MyTask任務(wù)等待期間,YouTask運(yùn)行,for循環(huán)中剛開始的if判斷當(dāng)前一行打印字符數(shù)是否超過51個(gè)(x從0開始計(jì)數(shù),每打印一個(gè)Y,則x+=1),若超過51個(gè),則x復(fù)位到0,y+=2,即打印位置向下移2行。PC_DispChar()函數(shù)用于打印字符,后景色黑色,前景色白色,位置為x列y行,每打印一個(gè)字符“Y”,列數(shù)加1。若按下ESC,則推出uC/OS,OSTimeDlyHMSM()用于延時(shí),
40、每輸出一個(gè)字符,等待1秒。由于MyTask運(yùn)行每次等待3秒,YouTask運(yùn)行每次等待1秒,所以程序每次打印一個(gè)M,然后打印三個(gè)Y,循環(huán)往復(fù),一行滿51個(gè)字符則換行。3-8無符號(hào)8位整數(shù)x記錄打印字符位置的列數(shù),y記錄打印位置的行數(shù),分別初始化為0。無符號(hào)8位整數(shù)變量time記錄YouTask的運(yùn)行次數(shù)。Main函數(shù)中經(jīng)OSInit()初始化uC/OSii,經(jīng)PC_DOSSaveReturn()保存當(dāng)前的dos環(huán)境,安裝任務(wù)切換中斷向量,用OSTaskCreate()創(chuàng)建MyTask任務(wù),設(shè)置優(yōu)先級(jí)為0(最高),隨后用OSStart()啟動(dòng)多任務(wù)管理器。MyTask任務(wù)中,首先進(jìn)入臨界段,安裝
41、時(shí)鐘中斷向量,并設(shè)置時(shí)鐘頻率,然后退出臨界段。MyTask中通過OSTaskCreate()創(chuàng)建了YouTask任務(wù),設(shè)置優(yōu)先級(jí)為2。for循環(huán)中剛開始的if判斷當(dāng)前一行打印字符數(shù)是否超過51個(gè)(x從0開始計(jì)數(shù),每打印一個(gè)M,則x+=1),若超過51個(gè),則x復(fù)位到0,y+=2,即打印位置向下移2行。PC_DispChar()函數(shù)用于打印字符,后景色黑色,前景色白色,位置為x列y行,每打印一個(gè)字符“M”,列數(shù)加1。若按下ESC,則推出uC/OS,OSTimeDlyHMSM()用于延時(shí),每輸出一個(gè)字符,等待3秒。在MyTask任務(wù)等待期間,YouTask運(yùn)行,for循環(huán)中剛開始先判斷運(yùn)行YouTa
42、sk運(yùn)行次數(shù)time是否滿20次,若達(dá)到20次則通過OSTaskSuspend(0)將優(yōu)先級(jí)為0的任務(wù)(即MyTask)掛起。判斷time是否滿40次,若達(dá)到40次,則通過OSTaskResume(0)將已被掛起的MyTask恢復(fù)。之后的if判斷當(dāng)前一行打印字符數(shù)是否超過51個(gè)(x從0開始計(jì)數(shù),每打印一個(gè)Y,則x+=1),若超過51個(gè),則x復(fù)位到0,y+=2,即打印位置向下移2行。PC_DispChar()函數(shù)用于打印字符,后景色黑色,前景色白色,位置為x列y行,每打印一個(gè)字符“Y”,列數(shù)加1。若按下ESC,則推出uC/OS,OSTimeDlyHMSM()用于延時(shí),每輸出一個(gè)字符,等待1秒。由
43、于MyTask運(yùn)行每次等待3秒,YouTask運(yùn)行每次等待1秒,所以程序剛開始時(shí)每次打印一個(gè)M,然后打印三個(gè)Y,循環(huán)往復(fù),當(dāng)YouTask運(yùn)行滿20次,MyTask掛起,此時(shí)恰好打印了兩個(gè)Y,MyTask等待了2秒,之后只有YouTask運(yùn)行,連續(xù)輸出20個(gè)Y,time達(dá)到40次,MyTask被恢復(fù),由于之前MyTask等待了兩秒,所以MyTask會(huì)繼續(xù)等待1秒,程序輸出一個(gè)Y,然后MyTask完成等待,程序繼續(xù)循環(huán)執(zhí)行,每次輸出一個(gè)M,三個(gè)Y。3-9無符號(hào)8位整數(shù)x記錄打印字符位置的列數(shù),y記錄打印位置的行數(shù),分別初始化為0。無符號(hào)8位整數(shù)變量time記錄YouTask的運(yùn)行次數(shù)。Main函
44、數(shù)中經(jīng)OSInit()初始化uC/OSii,經(jīng)PC_DOSSaveReturn()保存當(dāng)前的dos環(huán)境,安裝任務(wù)切換中斷向量,用OSTaskCreate()創(chuàng)建MyTask任務(wù),設(shè)置優(yōu)先級(jí)為0(最高),隨后用OSStart()啟動(dòng)多任務(wù)管理器。MyTask任務(wù)中,首先進(jìn)入臨界段,安裝時(shí)鐘中斷向量,并設(shè)置時(shí)鐘頻率,然后退出臨界段。MyTask中通過OSTaskCreate()創(chuàng)建了YouTask任務(wù),設(shè)置優(yōu)先級(jí)為2。for循環(huán)中剛開始的if判斷當(dāng)前一行打印字符數(shù)是否超過51個(gè)(x從0開始計(jì)數(shù),每打印一個(gè)M,則x+=1),若超過51個(gè),則x復(fù)位到0,y+=2,即打印位置向下移2行。For循環(huán)每執(zhí)行一次,time加1。PC_DispChar()函數(shù)用于打印字符,后景色黑色,前景色白色,位置為x列y行,每打印一個(gè)字符“M”,列數(shù)加1。若按下ESC,則推出uC/OS,OSTimeDlyHMSM()用于延時(shí),每輸出一個(gè)字符,等待3秒。當(dāng)time=10時(shí),MyTask
溫馨提示
- 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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 商場管理知識(shí)與技能體系
- 特色餐飲品牌股權(quán)轉(zhuǎn)讓與產(chǎn)業(yè)鏈整合協(xié)議
- 知識(shí)產(chǎn)權(quán)保護(hù)員工保密合同范本
- 文化產(chǎn)業(yè)代理招聘合同模板
- 倉儲(chǔ)物流園區(qū)停車場施工合同模板
- 餐飲加盟店終止及資產(chǎn)轉(zhuǎn)讓合同
- 車間場地租賃與節(jié)能降耗技術(shù)應(yīng)用合同
- 財(cái)務(wù)預(yù)算編制財(cái)務(wù)顧問服務(wù)合同范本
- 群體行為管理問題分析
- 采棉機(jī)租賃及棉花采摘服務(wù)合同
- 四川省成都市錦江區(qū)2024屆生物七年級(jí)第二學(xué)期期末綜合測試試題含解析
- 化學(xué)品安全員工職業(yè)安全衛(wèi)生培訓(xùn)課件
- 智慧電力能源管理服務(wù)平臺(tái)建設(shè)方案 智慧電網(wǎng)能源管理服務(wù)平臺(tái)建設(shè)方案
- 無創(chuàng)血糖儀行業(yè)營銷策略方案
- 運(yùn)用PDCA降低留置尿管相關(guān)尿路感染課件
- 麥克利蘭素質(zhì)能力模型
- 數(shù)據(jù)治理咨詢項(xiàng)目投標(biāo)文件技術(shù)方案
- DB51∕2672-2020 成都市鍋爐大氣污染物排放標(biāo)準(zhǔn)
- 零基預(yù)算的應(yīng)用
- 腫瘤標(biāo)志物的免疫檢驗(yàn)(免疫學(xué)檢驗(yàn)課件)
- 湖南省懷化市鶴城區(qū)2023年數(shù)學(xué)三下期末監(jiān)測試題含解析
評(píng)論
0/150
提交評(píng)論