




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、江蘇師范大學計 算 機 科 學 與 技 術 學 院實 驗 報 告課 程:嵌入式系統(tǒng)及應用 學 號:姓 名:班 級:教 師:計算機科學與技術學院制實驗一:實驗名稱:BC工具的使用方法實驗目的:學習和掌握BC工具的使用方法實驗(程序調試)過程:進行下述實驗前設置環(huán)境變量PATH,變量值添加:例題2-1一個簡單的問候程序1. 程序代碼#include<stdio.h>void main()printf(“Hello,World!n”);2. 編輯程序使用Windows提供的文本文件,待程序編寫完畢無誤后用8109.c名稱將文件存放到事先創(chuàng)建的一個目錄中,即11268109中。3. 把程序
2、編譯成目標程序進入命令環(huán)境并進入程序所在的目錄,然后使用如下的命令對源文件8109.c進行編譯:bcc -c -ml -Ic:bc31include - Lc:bc31lib 8109.c4. 把目標文件連接成可執(zhí)行文件命令如下:tlink c:bc31libc0l.obj test.obj,test,test,c:bc31libcl.lib5. 運行8109例題2-2一個具有三個源文件應用程序的編譯及連接示例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.運行實驗過程中遇到的問題與解決方法:1. 問題:源代碼中出現(xiàn)中文字符,程序出錯。解決方法:把源代碼中的中文字符改為英文字符。2. 輸入命令時把英文字母L寫成數(shù)字1。3. 沒有配置環(huán)境變量,命令不能執(zhí)行。分析程序運行結果:Bcc命令編譯生成obj文件,tlink命令將obj文件鏈接生成可執(zhí)行文件。用bcc分別編譯pa.c,pb.c,8109.c生成obj文件,編寫tlink文件進行連接,生成可執(zhí)行文件。運行結果實驗二:實驗名稱:*.MAK的編寫方法實驗目
6、的:掌握*.MAK文件的編寫方法實驗(程序調試)過程:例題2-3標號作用的示例1. makefile代碼target1: md 11target2: md 22target3: rd 11 rd 222. 運行命令makemake target2make target3例題2-4:為例題2-2設計一個具有4個程序段的makefile,并在該文件中實現(xiàn)源文件的編譯以及目標文件的連接,從而生成最終可執(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程序編寫一個makefile文件,并利用依賴把用以完成工程文件編譯及連接工作的各個程序段之間關聯(lián)起來,從而使用戶僅使用一個make命令,便可完成編譯及連接任務。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. 批處理文件由于在前面已經有了makefile和連接文件,所以這里只寫批處理文件:ECHO OFF
9、ECHO *ECHO * 批處理文件ECHO *ECHO *ECHO ONc:bc31binmake -f 8109.mak2. 批處理文件的啟動:雙擊該文件即可例題2-7:本例使用了兩個來源不同的第三方源程序,一個存放在目錄PORTPT,另一個存放在目錄PC。用戶自己的源文件TEST.c和連接文件TEST.LNK存放在目錄SOURCE,批處理文件和makefile文件被存放在目錄TEST,同時該目錄還要負責存放將來創(chuàng)建出來的最終可執(zhí)行文件TEST.EXE。本例題無第三方源程序,故無實驗結果!實驗過程中遇到的問題與解決方法:1. 問題:在做例題2-6時,雙擊批處理文件,運行失敗。解決方法:沒有
10、把makefile文件名字改為8060.mak,修改之后就可以正常運行了。分析程序運行結果: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實驗三:實驗名稱:調試第三章3-63-10例題實驗目的:掌握第三章3-63-10例題的調試方法實驗(程序調試)過程:例題3-6設計一個只有一個任務MyTasK的應用程序,當程序運行后,任務MyTasK的工作就是每秒在顯示器上顯示一個字符“M”。該應用程序的代碼如下:#include "includes.h"#define TASK_STK_SIZE 5
11、12/任務堆棧長度OS_STK TaskStartStkTASK_STK_SIZE;/定義任務堆棧區(qū)INT16S key;/用于退出uCOS_II的鍵INT8U x=0,y=0;/字符顯示位置void MyTask(void *data);/聲明一個任務/*主函數(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)建任務MyTas
12、ks,/給任務傳遞參數(shù)&TaskStartStkTASK_STK_SIZE - 1,/設置任務堆棧棧頂指針0);/使任務MyTask的優(yōu)先級別為0 OSStart();/啟動uCOS_II的多任務管理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時鐘中斷向量 PC_SetTickRate(OS_TICKS_PER_SEC);/設置uCO
13、S_II時鐘頻率 OS_EXIT_CRITICAL(); OSStatInit();/初始化uCOS_II的統(tǒng)計任務 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應用程序的任務MyTasK中再創(chuàng)建一個任務YouTasK,當程序運行后,任務MyTasK的工作在顯示器上顯示一個字符“M”;而任務YouTasK則是在顯示器上顯示字符“Y”。應用程序的源代碼如下:/*Test*/#include "includes.h"#define TASK_STK_SIZE 512/任務堆棧長度OS_STK MyTaskStkTASK_STK_SIZE;/定義任務堆棧區(qū)OS_STK YouTaskStkTASK_STK_SIZE;/定義任務堆棧區(qū)INT16S key;/用于退出uCOS_II的鍵INT8U x=0,y=0;/字符顯示位置void M
15、yTask(void *data);/聲明任務void YouTask(void *data);/聲明任務/*主函數(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)建任務MyTasks_M,/給任務傳遞參數(shù)&MyTaskStkTASK_STK_SIZE - 1,/設置任務堆棧棧頂指針0/任務的優(yōu)先級別為0);
16、OSStart( );/啟動多任務管理/*任務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);/安裝時鐘中斷向量 PC_SetTickRate(OS_TICKS_PER_SEC);/設置時鐘頻率 OS_EXIT_CRITICAL( ); OSStatInit( );/初始化統(tǒng)計任務
17、OSTaskCreate(YouTask,/創(chuàng)建任務MyTasks_Y,/給任務傳遞參數(shù)&YouTaskStkTASK_STK_SIZE - 1,/設置任務堆棧棧頂指針2/ MyTask的優(yōu)先級別為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( );/恢復Dos環(huán)境 OSTimeDlyHMSM(0, 0, 3, 0);/等待3秒/*任務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應用程序的任務YouTasK。要求任務YouTasK運行20次后,掛起任MyTasK務;當任務YouTasK運行40次后,恢復任務MyTasK。應用程序的源代碼如下:#include "includes.h"#define TASK_STK_SIZE 512/任務堆棧長度OS_STK MyTaskStkTASK_STK_SIZE;/定義任務堆棧區(qū)OS_STK YouTaskStkTASK_STK_SIZE;/定義任務堆棧區(qū)INT16S key;/用于退出uCOS_II的鍵INT8U x=0,y=0;/字符顯示位置INT8U time=0;vo
20、id MyTask(void *data);/聲明任務void YouTask(void *data);/聲明任務/*主函數(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)建任務MyTasks_M,/給任務傳遞參數(shù)&MyTaskStkTASK_STK_SIZE - 1,/設置任務堆棧棧頂指針0);/使任務MyTas
21、k的優(yōu)先級別為0 OSStart();/啟動uCOS_II的多任務管理/*任務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時鐘中斷向量 PC_SetTickRate(OS_TICKS_PER_SEC);/設置uCOS_II時鐘頻率 OS_EXIT_CRITICA
22、L(); OSStatInit();/初始化uCOS_II的統(tǒng)計任務 OSTaskCreate(YouTask,/創(chuàng)建任務MyTasks_Y,/給任務傳遞參數(shù)&YouTaskStkTASK_STK_SIZE - 1,/設置任務堆棧棧頂指針2);/使任務MyTask的優(yōu)先級別為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);/等待 /*任務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的任務MyTasK,當任務MyTasK運行10次時用函數(shù)OSSchedLock()對調度器進行加鎖,而當任務MyTasK運行到第80次時再用函數(shù)OSSchedUnlock()對調度器進行解鎖,并運行該程序。應用程序的代碼如下:#include "includes.h"#define TASK_STK_SIZE 512/任務堆棧長度OS_STK MyTaskSt
25、kTASK_STK_SIZE;/定義任務堆棧區(qū)OS_STK YouTaskStkTASK_STK_SIZE;/定義任務堆棧區(qū)INT16S key;/用于退出uCOS_II的鍵INT8U x=0,y=0;/字符顯示位置INT8U times=0;/運行次數(shù)void MyTask(void *data);/聲明任務void YouTask(void *data);/聲明任務/*主函數(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)建任務MyTasks_M,/給任務傳遞參數(shù)&MyTaskStkTASK_STK_SIZE - 1,/設置任務堆棧棧頂指針0);/使任務MyTask的優(yōu)先級別為0 OSStart();/啟動uCOS_II的多任務管理/*任務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時鐘中斷向量 PC_SetTickRate(OS_TICKS_PER_SEC);/設置uCOS_II時鐘頻率 OS_EXIT_CRITICAL(); OSStatInit();/初始化uCOS_II的統(tǒng)計任務 OSTaskCreate(YouTask,/創(chuàng)建任務MyTasks_Y,/給任務傳遞參數(shù)&YouTaskStkTASK_STK_SIZE - 1,/設置任務堆棧棧頂指針2);/使任務MyTask的優(yōu)先級別為2 for (;) if (x>50) x=0; y
28、+=2; times+=1;if (times=10)OSSchedLock();/鎖調度器if (times=80)OSSchedUnlock();/解鎖調度器 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);/等待 /*任務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應用程序,使任務MyTasK能刪除任務YouTasK。修改后的代碼如下:#include "
30、includes.h"#define TASK_STK_SIZE 512/任務堆棧長度OS_STK MyTaskStkTASK_STK_SIZE;/定義任務堆棧區(qū)OS_STK YouTaskStkTASK_STK_SIZE;/定義任務堆棧區(qū)INT16S key;/用于退出uCOS_II的鍵INT8U x=0,y=0;/字符顯示位置void MyTask(void *data);/聲明任務void YouTask(void *data);/聲明任務/*主函數(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)建任務MyTasks_M,/給任務傳遞參數(shù)&MyTaskStkTASK_STK_SIZE - 1,/設置任務堆棧棧頂指針0);/使任務MyTask的優(yōu)先級別為0 OSStart();/啟動uCOS_II的多任務管理/*任務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時鐘中斷向量 PC_SetTickRate(OS_TICKS_PER_SEC);/設置uCOS_II時鐘頻率 OS_EXIT_CRITICAL(); OSStatInit();/初始化uCOS_II的統(tǒng)計任務 OSTaskCreate(YouTask,/創(chuàng)建任務MyTasks_Y,/給任務傳遞參數(shù)&am
33、p;YouTaskStkTASK_STK_SIZE - 1,/設置任務堆棧棧頂指針2);/使任務MyTask的優(yōu)先級別為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);/延時一個時鐘節(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);/等待 /*任務YouTask*/void YouTask (void *pdata) char *s1="YouTask:我必須要刪除我自己了!" char *s2="YouTask:我已經刪除我自己了!"#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*/實驗過程中遇到的問題與解決方法:1. 編寫連接文件時出錯,程序不能正常運行。解決方法:用記事本打開,并把文件屬性設置為所有屬性,然后修改即可。分析程序運行結果:3-6無符號8位整數(shù)x記錄一行中已打印的字符數(shù),y記錄打印位置的行數(shù),分別初始化為0。Main函數(shù)中經OSInit()初始化uC/OSii,經PC_DOSSaveReturn()保存當前的dos環(huán)境,安裝任務切換中斷向量,用OSTaskCreate()創(chuàng)建MyTask任務,設置優(yōu)先級為0(最高
37、),隨后用OSStart()啟動多任務管理器。MyTask任務中,首先進入臨界段,安裝時鐘中斷向量,并設置時鐘頻率,然后退出臨界段。for循環(huán)中剛開始的if判斷當前一行打印字符數(shù)是否超過11個(x從0開始計數(shù),每打印一個M,則x+=1),若超過11個,則x復位到0,y+=2,即打印位置向下移2行。PC_DispChar()函數(shù)用于打印字符,后景色黑色,前景色白色,位置為x列y行,每打印一個字符,列數(shù)加1。若按下ESC,則推出uC/OS,OSTimeDlyHMSM()用于延時,每輸出一個字符,等待1秒。3-7無符號8位整數(shù)x記錄打印字符位置的列數(shù),y記錄打印位置的行數(shù),分別初始化為0。Main函
38、數(shù)中經OSInit()初始化uC/OSii,經PC_DOSSaveReturn()保存當前的dos環(huán)境,安裝任務切換中斷向量,用OSTaskCreate()創(chuàng)建MyTask任務,設置優(yōu)先級為0(最高),隨后用OSStart()啟動多任務管理器。MyTask任務中,首先進入臨界段,安裝時鐘中斷向量,并設置時鐘頻率,然后退出臨界段。MyTask中通過OSTaskCreate()創(chuàng)建了YouTask任務,設置優(yōu)先級為2。for循環(huán)中剛開始的if判斷當前一行打印字符數(shù)是否超過51個(x從0開始計數(shù),每打印一個M,則x+=1),若超過51個,則x復位到0,y+=2,即打印位置向下移2行。PC_DispC
39、har()函數(shù)用于打印字符,后景色黑色,前景色白色,位置為x列y行,每打印一個字符“M”,列數(shù)加1。若按下ESC,則推出uC/OS,OSTimeDlyHMSM()用于延時,每輸出一個字符,等待3秒。在MyTask任務等待期間,YouTask運行,for循環(huán)中剛開始的if判斷當前一行打印字符數(shù)是否超過51個(x從0開始計數(shù),每打印一個Y,則x+=1),若超過51個,則x復位到0,y+=2,即打印位置向下移2行。PC_DispChar()函數(shù)用于打印字符,后景色黑色,前景色白色,位置為x列y行,每打印一個字符“Y”,列數(shù)加1。若按下ESC,則推出uC/OS,OSTimeDlyHMSM()用于延時,
40、每輸出一個字符,等待1秒。由于MyTask運行每次等待3秒,YouTask運行每次等待1秒,所以程序每次打印一個M,然后打印三個Y,循環(huán)往復,一行滿51個字符則換行。3-8無符號8位整數(shù)x記錄打印字符位置的列數(shù),y記錄打印位置的行數(shù),分別初始化為0。無符號8位整數(shù)變量time記錄YouTask的運行次數(shù)。Main函數(shù)中經OSInit()初始化uC/OSii,經PC_DOSSaveReturn()保存當前的dos環(huán)境,安裝任務切換中斷向量,用OSTaskCreate()創(chuàng)建MyTask任務,設置優(yōu)先級為0(最高),隨后用OSStart()啟動多任務管理器。MyTask任務中,首先進入臨界段,安裝
41、時鐘中斷向量,并設置時鐘頻率,然后退出臨界段。MyTask中通過OSTaskCreate()創(chuàng)建了YouTask任務,設置優(yōu)先級為2。for循環(huán)中剛開始的if判斷當前一行打印字符數(shù)是否超過51個(x從0開始計數(shù),每打印一個M,則x+=1),若超過51個,則x復位到0,y+=2,即打印位置向下移2行。PC_DispChar()函數(shù)用于打印字符,后景色黑色,前景色白色,位置為x列y行,每打印一個字符“M”,列數(shù)加1。若按下ESC,則推出uC/OS,OSTimeDlyHMSM()用于延時,每輸出一個字符,等待3秒。在MyTask任務等待期間,YouTask運行,for循環(huán)中剛開始先判斷運行YouTa
42、sk運行次數(shù)time是否滿20次,若達到20次則通過OSTaskSuspend(0)將優(yōu)先級為0的任務(即MyTask)掛起。判斷time是否滿40次,若達到40次,則通過OSTaskResume(0)將已被掛起的MyTask恢復。之后的if判斷當前一行打印字符數(shù)是否超過51個(x從0開始計數(shù),每打印一個Y,則x+=1),若超過51個,則x復位到0,y+=2,即打印位置向下移2行。PC_DispChar()函數(shù)用于打印字符,后景色黑色,前景色白色,位置為x列y行,每打印一個字符“Y”,列數(shù)加1。若按下ESC,則推出uC/OS,OSTimeDlyHMSM()用于延時,每輸出一個字符,等待1秒。由
43、于MyTask運行每次等待3秒,YouTask運行每次等待1秒,所以程序剛開始時每次打印一個M,然后打印三個Y,循環(huán)往復,當YouTask運行滿20次,MyTask掛起,此時恰好打印了兩個Y,MyTask等待了2秒,之后只有YouTask運行,連續(xù)輸出20個Y,time達到40次,MyTask被恢復,由于之前MyTask等待了兩秒,所以MyTask會繼續(xù)等待1秒,程序輸出一個Y,然后MyTask完成等待,程序繼續(xù)循環(huán)執(zhí)行,每次輸出一個M,三個Y。3-9無符號8位整數(shù)x記錄打印字符位置的列數(shù),y記錄打印位置的行數(shù),分別初始化為0。無符號8位整數(shù)變量time記錄YouTask的運行次數(shù)。Main函
44、數(shù)中經OSInit()初始化uC/OSii,經PC_DOSSaveReturn()保存當前的dos環(huán)境,安裝任務切換中斷向量,用OSTaskCreate()創(chuàng)建MyTask任務,設置優(yōu)先級為0(最高),隨后用OSStart()啟動多任務管理器。MyTask任務中,首先進入臨界段,安裝時鐘中斷向量,并設置時鐘頻率,然后退出臨界段。MyTask中通過OSTaskCreate()創(chuàng)建了YouTask任務,設置優(yōu)先級為2。for循環(huán)中剛開始的if判斷當前一行打印字符數(shù)是否超過51個(x從0開始計數(shù),每打印一個M,則x+=1),若超過51個,則x復位到0,y+=2,即打印位置向下移2行。For循環(huán)每執(zhí)行一次,time加1。PC_DispChar()函數(shù)用于打印字符,后景色黑色,前景色白色,位置為x列y行,每打印一個字符“M”,列數(shù)加1。若按下ESC,則推出uC/OS,OSTimeDlyHMSM()用于延時,每輸出一個字符,等待3秒。當time=10時,MyTask
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大慶出租車考試練習題庫
- 立德樹人理念下初中體育教學中德育滲透研究
- 2025年甘肅省高考歷史試卷真題(含答案解析)
- 行業(yè)資質證書專注于特定行業(yè)的權威證書(5篇)
- 電影拍攝項目合作及投資分配協(xié)議
- 印刷制作及版權許可協(xié)議
- 2025年一建考試《機電工程管理與實務》案例分析題庫-電氣設備安裝與調試技術解析
- 傳統(tǒng)節(jié)日中的故事童話色彩作文5篇范文
- 2025年導游資格證考試筆試旅游服務質量管理與旅游行業(yè)法規(guī)解讀試卷
- 2025年醫(yī)用X射線設備項目立項申請報告模板
- 《礦用防爆車輛電動自動轉向系統(tǒng)技術要求》
- 代收房租協(xié)議書范文
- 民法典合同編解讀之保證合同
- 《中藥學》課件-中藥思政元素案例
- 廣東省深圳市寶安區(qū)2022-2023學年二年級下學期期末數(shù)學試卷
- 譯林版英語八年級下冊語法知識總結
- 范卿平人教版初三化學講義全集
- 幼兒園規(guī)范化幼兒園參評自評報告
- 產科運用PDCA循環(huán)降低入室新生兒低血糖發(fā)生率品管圈成果匯報
- 《水資源管理》機考題庫及答案開放大學考試題庫 答案
- 菜鳥WMS(大寶)操作手冊 (修復的)
評論
0/150
提交評論