电子系统设计ucos实验一.docx
- 文档编号:8001262
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:14
- 大小:156.95KB
电子系统设计ucos实验一.docx
《电子系统设计ucos实验一.docx》由会员分享,可在线阅读,更多相关《电子系统设计ucos实验一.docx(14页珍藏版)》请在冰豆网上搜索。
电子系统设计ucos实验一
一、实验要求:
要求掌握消息邮箱的使用,停止统计任务。
二、实验思考题:
1.任务总数是多少?
用户任务和系统任务各是什么?
答:
任务总数是9个。
用户任务分别是启动任务,时钟任务,还有Tast1到Tast5,一共7个,系统任务是统计任务和空闲任务。
2.各个用户任务的功能和优先级是什么?
答:
Task1()功能:
定时。
Task2()功能:
实现‘|’‘/’‘—’‘\\’循环。
Task3()功能:
实现‘|’‘\\’‘—’‘/’循环。
Task4()功能:
发送一个从‘A’到‘Z’的字符。
Task5()功能:
接收从任务4发送的字符。
3.分析任务4和任务5直接是如果传递消息的?
三、程序修改(停止统计任务)
1.修改os_cfg.h里面的OS_TASK_STAT_EN为0
2.把voidTaskStart(void*pdata)任务中OSStatInit();给删除了,因为我们要把统计任务给停止了。
3.删除staticvoidTaskStartDisp(void)中的显示统计任务的语句。
四、运行结果
运行结果:
停止统计任务以后运行结果:
#include"includes.h"
#defineTASK_STK_SIZE512/*Sizeofeachtask'sstacks(#ofWORDs)*/
#defineTASK_START_ID0/*ApplicationtasksIDs*/
#defineTASK_CLK_ID1
#defineTASK_1_ID2
#defineTASK_2_ID3
#defineTASK_3_ID4
#defineTASK_4_ID5
#defineTASK_5_ID6
#defineTASK_START_PRIO10/*Applicationtaskspriorities*/
#defineTASK_CLK_PRIO11
#defineTASK_1_PRIO12
#defineTASK_2_PRIO13
#defineTASK_3_PRIO14
#defineTASK_4_PRIO15
#defineTASK_5_PRIO16
OS_STKTaskStartStk[TASK_STK_SIZE];/*Startuptaskstack*/
OS_STKTaskClkStk[TASK_STK_SIZE];/*Clocktaskstack*/
OS_STKTask1Stk[TASK_STK_SIZE];/*Task#1taskstack*/
OS_STKTask2Stk[TASK_STK_SIZE];/*Task#2taskstack*/
OS_STKTask3Stk[TASK_STK_SIZE];/*Task#3taskstack*/
OS_STKTask4Stk[TASK_STK_SIZE];/*Task#4taskstack*/
OS_STKTask5Stk[TASK_STK_SIZE];/*Task#5taskstack*/
OS_EVENT*AckMbox;/*MessagemailboxesforTasks#4and#5*/
OS_EVENT*TxMbox;
voidTaskStart(void*data);/*Functionprototypesoftasks*/
staticvoidTaskStartCreateTasks(void);
staticvoidTaskStartDispInit(void);
staticvoidTaskStartDisp(void);
voidTaskClk(void*data);
voidTask1(void*data);
voidTask2(void*data);
voidTask3(void*data);
voidTask4(void*data);
voidTask5(void*data);
voidmain(void)
{
OS_STK*ptos;
OS_STK*pbos;
INT32Usize;
PC_DispClrScr(DISP_FGND_WHITE);/*Clearthescreen*/
OSInit();/*InitializeuC/OS-II*/
PC_DOSSaveReturn();/*SaveenvironmenttoreturntoDOS*/
PC_VectSet(uCOS,OSCtxSw);/*InstalluC/OS-II'scontextswitchvector*/
PC_ElapsedInit();/*Initializedelapsedtimemeasurement*/
ptos=&TaskStartStk[TASK_STK_SIZE-1];/*TaskStart()willuseFloating-Point*/
pbos=&TaskStartStk[0];
size=TASK_STK_SIZE;
OSTaskStkInit_FPE_x86(&ptos,&pbos,&size);
OSTaskCreateExt(TaskStart,
(void*)0,
ptos,
TASK_START_PRIO,
TASK_START_ID,
pbos,
size,
(void*)0,
OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
OSStart();/*Startmultitasking*/
}
voidTaskStart(void*pdata)
{
#ifOS_CRITICAL_METHOD==3/*AllocatestorageforCPUstatusregister*/
OS_CPU_SRcpu_sr;
#endif
INT16Skey;
pdata=pdata;/*Preventcompilerwarning*/
TaskStartDispInit();/*Setupthedisplay*/
OS_ENTER_CRITICAL();/*InstalluC/OS-II'sclocktickISR*/
PC_VectSet(0x08,OSTickISR);
PC_SetTickRate(OS_TICKS_PER_SEC);/*Reprogramtickrate*/
OS_EXIT_CRITICAL();
OSStatInit();/*InitializeuC/OS-II'sstatistics*/
AckMbox=OSMboxCreate((void*)0);/*Create2messagemailboxes*/
TxMbox=OSMboxCreate((void*)0);
TaskStartCreateTasks();/*Createallothertasks*/
for(;;){
TaskStartDisp();/*Updatethedisplay*/
if(PC_GetKey(&key)){/*Seeifkeyhasbeenpressed*/
if(key==0x1B){/*Yes,seeifit'stheESCAPEkey*/
PC_DOSReturn();/*Yes,returntoDOS*/
}}
OSCtxSwCtr=0;/*Clearcontextswitchcounter*/
OSTimeDly(OS_TICKS_PER_SEC);/*Waitonesecond*/
}}
staticvoidTaskStartDispInit(void)
{
}
staticvoidTaskStartDisp(void)
{
chars[80];
sprintf(s,"%5d",OSTaskCtr);/*Display#tasksrunning*/
PC_DispStr(18,22,s,DISP_FGND_YELLOW+DISP_BGND_BLUE);
sprintf(s,"%3d",OSCPUUsage);/*DisplayCPUusagein%*/
PC_DispStr(36,22,s,DISP_FGND_YELLOW+DISP_BGND_BLUE);
sprintf(s,"%5d",OSCtxSwCtr);/*Display#contextswitchespersecond*/
PC_DispStr(18,23,s,DISP_FGND_YELLOW+DISP_BGND_BLUE);
sprintf(s,"V%4.2f",(float)OSVersion()*0.01);/*DisplayuC/OS-II'sversionnumber*/
PC_DispStr(75,24,s,DISP_FGND_YELLOW+DISP_BGND_BLUE);
switch(_8087){/*DisplaywhetherFPUpresent*/
case0:
PC_DispStr(71,22,"NOFPU",DISP_FGND_YELLOW+DISP_BGND_BLUE);
break;
case1:
PC_DispStr(71,22,"8087FPU",DISP_FGND_YELLOW+DISP_BGND_BLUE);
break;
case2:
PC_DispStr(71,22,"80287FPU",DISP_FGND_YELLOW+DISP_BGND_BLUE);
break;
case3:
PC_DispStr(71,22,"80387FPU",DISP_FGND_YELLOW+DISP_BGND_BLUE);
break;
}
}
staticvoidTaskStartCreateTasks(void)
{
OSTaskCreateExt(TaskClk,
(void*)0,
&TaskClkStk[TASK_STK_SIZE-1],
TASK_CLK_PRIO,
TASK_CLK_ID,
&TaskClkStk[0],
TASK_STK_SIZE,
(void*)0,
OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(Task1,
(void*)0,
&Task1Stk[TASK_STK_SIZE-1],
TASK_1_PRIO,
TASK_1_ID,
&Task1Stk[0],
TASK_STK_SIZE,
(void*)0,
OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(Task2,
(void*)0,
&Task2Stk[TASK_STK_SIZE-1],
TASK_2_PRIO,
TASK_2_ID,
&Task2Stk[0],
TASK_STK_SIZE,
(void*)0,
OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(Task3,
(void*)0,
&Task3Stk[TASK_STK_SIZE-1],
TASK_3_PRIO,
TASK_3_ID,
&Task3Stk[0],
TASK_STK_SIZE,
(void*)0,
OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(Task4,
(void*)0,
&Task4Stk[TASK_STK_SIZE-1],
TASK_4_PRIO,
TASK_4_ID,
&Task4Stk[0],
TASK_STK_SIZE,
(void*)0,
OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(Task5,
(void*)0,
&Task5Stk[TASK_STK_SIZE-1],
TASK_5_PRIO,
TASK_5_ID,
&Task5Stk[0],
TASK_STK_SIZE,
(void*)0,
OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
}
/*
*********************************************************************************************************
*TASK#1
*
*Description:
Thistaskexecutesevery100mSandmeasuresthetimeittasktoperformstackchecking
*foreachofthe5applicationtasks.Also,thistaskdisplaysthestatisticsrelatedto
*eachtask'sstackusage.
*********************************************************************************************************
*/
voidTask1(void*pdata)
{
INT8Uerr;
OS_STK_DATAdata;/*Storagefortaskstackdata*/
INT16Utime;/*Executiontime(inuS)*/
INT8Ui;
chars[80];
pdata=pdata;
for(;;){
for(i=0;i<7;i++){
PC_ElapsedStart();
err=OSTaskStkChk(TASK_START_PRIO+i,&data);
time=PC_ElapsedStop();
if(err==OS_ERR_NONE){
sprintf(s,"%4ld%4ld%4ld%6d",
data.OSFree+data.OSUsed,
data.OSFree,
data.OSUsed,
time);
PC_DispStr(19,12+i,s,DISP_FGND_BLACK+DISP_BGND_LIGHT_GRAY);
}
}
OSTimeDlyHMSM(0,0,0,100);/*Delayfor100mS*/
}
}
/*
*********************************************************************************************************
*TASK#2
*
*Description:
Thistaskdisplaysaclockwiserotatingwheelonthescreen.
*********************************************************************************************************
*/
voidTask2(void*data)
{
data=data;
for(;;){
PC_DispChar(70,15,'|',DISP_FGND_YELLOW+DISP_BGND_BLUE);
OSTimeDly(10);
PC_DispChar(70,15,'/',DISP_FGND_YELLOW+DISP_BGND_BLUE);
OSTimeDly(10);
PC_DispChar(70,15,'-',DISP_FGND_YELLOW+DISP_BGND_BLUE);
OSTimeDly(10);
PC_DispChar(70,15,'\\',DISP_FGND_YELLOW+DISP_BGND_BLUE);
OSTimeDly(10);
}
}
/*
*********************************************************************************************************
*TASK#3
*
*Description:
Thistaskdisplaysacounter-clockwiserotatingwheelonthescreen.
*
*Note(s):
Iallocated500bytesofstorageonthestacktoartificially'eat'upstackspace.
*********************************************************************************************************
*/
voidTask3(void*data)
{
chardummy[500];
INT16Ui;
data=data;
for(i=0;i<499;i++){/*Useupthestackwith'junk'*/
dummy[i]='?
';
}
for(;;){
PC_DispChar(70,16,'|',DISP_FGND_YELLOW+DISP_BGND_BLUE);
OSTimeDly(20);
PC_DispChar(70,16,'\\',DISP_FGND_YELLOW+DISP_BGND_BLUE);
OSTimeDly(20);
PC_DispChar(70,16,'-',DISP_FGND_YELLOW+DISP_BGND_BLUE);
OSTimeDly(20);
PC_DispChar(70,16,'/',DISP_FGND_YELLOW+DISP_BGND_BLUE);
OSTimeDly(20);
}
}
/*
*********************************************************************************************************
*TASK#4
*
*Description:
ThistasksendsamessagetoTask#5.Themessageconsistofacharacterthatneedsto
*bedisplayedbyTask#5.ThistaskthenwaitsforanacknowledgementfromTask#5
*indicatingthatthemessagehasbeendisplayed.
*********************************************************************************************************
*/
voidTask4(void*data)
{
chartxmsg;
INT8Uerr;
data=data;
txmsg='A';
for(;;){
OSMboxPost(TxMbox,(void*)&txmsg);/*SendmessagetoTask#5*/
OSMboxPend(AckMbox,0,&err);/*WaitforacknowledgementfromTask#5*/
txmsg++;/*Nextmessagetosend*/
if(txmsg=='Z'){
txmsg='A';/*Startnewseriesofmessages*/
}
}
}
/*
*********************************************************************************************************
*TASK#5
*
*Description:
ThistaskdisplaysmessagessentbyTask#4.Whenthemessageisdisplayed,Task#5
*acknowledgesTask#4.
*********************************************************************************************************
*/
voidTask5(void*data)
{
char*rxmsg;
INT8Uerr;
data=data;
for(;;){
rxmsg=(char*)OSMboxPend(TxMbox,0,&err);/*WaitformessagefromTask#4*/
PC_DispChar(70,18,*rxmsg,DISP_FGND_YELLOW+DISP_BGND_BLUE);
OSTimeDlyHMSM(0,0,1,0);/*Wait1second*/
OSMboxPost(AckMbox,(void*
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 系统 设计 ucos 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)