ucosII实验报告.docx

上传人:b****5 文档编号:11920578 上传时间:2023-04-16 格式:DOCX 页数:91 大小:422.31KB
下载 相关 举报
ucosII实验报告.docx_第1页
第1页 / 共91页
ucosII实验报告.docx_第2页
第2页 / 共91页
ucosII实验报告.docx_第3页
第3页 / 共91页
ucosII实验报告.docx_第4页
第4页 / 共91页
ucosII实验报告.docx_第5页
第5页 / 共91页
点击查看更多>>
下载资源
资源描述

ucosII实验报告.docx

《ucosII实验报告.docx》由会员分享,可在线阅读,更多相关《ucosII实验报告.docx(91页珍藏版)》请在冰豆网上搜索。

ucosII实验报告.docx

ucosII实验报告

实验1《任务的创建、删除、挂起、恢复》

实验学时:

2实验地点:

二综x203实验日期:

2013/12/13

一、实验目的

1.实验环境的建立

2.任务的接口函数的应用

二、实验容

1.设计一个只有一个任务Task1,当程序运行后任务的工作就是每秒在显示器上显示一个字符“M”。

2.在任务Task1中在创建一个任务Task2。

当程序运行后,任务Task1的工作在显示器上显示一个字符“M”;Task2则是在显示器上显示字符“Y”。

3.要求任务Task2运行20次后,挂起任务Task1;任务Task2运行40次后,恢复任务Task1。

4.当任务Task1运行5次时,用函数OSSchedLock()对调度器进行加锁;而当任务Task1运行到第10次时,再用函数OSSchedUnlock()对调度器进行解锁,并运行该程序。

5.使任务Task1能删除任务Task2。

三、实验方法

包括实验方法、原理、技术、方案等。

四、实验步骤

1.将BC45文件夹拷贝到C分区根目录下。

2.将software文件夹拷贝到任意分区根目录下。

3.分别完成实验1、2、3、4、5

五、实验结果

1.DOS窗口每秒显示一个字符“M”。

每行显示10个“M”字符,行与行的间隔是一行。

按ESC键程序退出

2.DOS窗口交替显示字符"M"和“Y”,每隔一秒显示一次。

每行显示10个字符,行与行之间的间隔是一行。

按ESC键程序退出

3.DOS窗口开始交替显示字符"M"和“Y”,显示20次以后,Task1挂起,只显示“Y”,当Task2运行40次以后,Task1恢复,然后开始Task1,Task2交替运行。

4.DOS窗口开始交题显示字符"M"和“Y”,显示5次以后,Task1将任务调度器上锁,此时只有“M”打印,当Task1运行10次后,Task1,Task2开始交替运行。

5.DOS窗口开始交替显示字符“M”和“Y”,显示10次后,只显示“Y”

六、实验结论

对实验数据和结果进行分析描述,给出实验取得的成果和结论。

1.

 

程序:

/********

*Exercise2-1

*author:

csuchenan

*time:

2013-12-12

********/

#include"includes.h"

#defineTASK_STK_SIZE256

OS_STKMyTaskStk[TASK_STK_SIZE];

INT16Skey;

INT8Ux=0,y=0;

voidMyTask(void*pdata){

#ifOS_CRITICAL_METHOD==3

OS_CPU_SRcpu_sr;

#endif

pdata=pdata;

OS_ENTER_CRITICAL();

PC_VectSet(0X08,OSTickISR);

PC_SetTickRate(OS_TICKS_PER_SEC);

OS_EXIT_CRITICAL();

OSStatInit();

for(;;){

if(x>10){

x=0;

y=y+2;

}

PC_DispChar(x,y,*(char*)pdata,,DISP_BGND_BLACK+DISP_FGND_WHITE);

x=x+1;

if(PC_GetKey(&key)==1){

if(key==0x1B){

PC_DOSReturn();

}

}

OSTimeDlyHMSM(0,0,1,0);

}

}

 

voidmain(void){

char*ch="M";

OSInit();

PC_DOSSaveReturn();

PC_VectSet(uCOS,OSCtxSw);

PC_DispClrScr(DISP_FGND_WHITE+DISP_BGND_BLACK);

OSTaskCreate(MyTask,ch,&MyTaskStk[TASK_STK_SIZE-1],0);

OSStart();

}

2.

程序源代码:

/********

*Exercise2-2

*author:

csuchenan

*time:

2013-12-13

********/

#include"includes.h"

#defineMy_TASK1_STK_SIZE256

#defineMy_TASK2_STK_SIZE256

OS_STKMyTask1Stk[My_TASK1_STK_SIZE];

OS_STKMyTask2Stk[My_TASK2_STK_SIZE];

INT16Skey;

INT8Ux=0,y=0;

voidMyTask2(void*pdata){

#ifOS_CRITICAL_METHOD==3

OS_CPU_SRcpu_sr;

#endif

pdata=pdata;

OS_ENTER_CRITICAL();

PC_VectSet(0x80,OSTickISR);

PC_SetTickRate(OS_TICKS_PER_SEC);

OS_EXIT_CRITICAL();

for(;;){

if(x>10){

x=0;

y=y+2;

}

PC_DispChar(x,y,*(char*)pdata,DISP_BGND_BLACK+DISP_FGND_WHITE);

x=x+1;

if(PC_GetKey(&key)==1){

if(key==0x1B){

PC_DOSReturn();

}

}

OSTimeDlyHMSM(0,0,1,0);

}

 

}

voidMyTask1(void*pdata){

#ifOS_CRITICAL_METHOD==3

OS_CPU_SRcpu_sr;

#endif

char*ch="Y";

pdata=pdata;

OS_ENTER_CRITICAL();

PC_VectSet(0X08,OSTickISR);

PC_SetTickRate(OS_TICKS_PER_SEC);

OS_EXIT_CRITICAL();

OSStatInit();

OSTaskCreate(MyTask2,ch,&MyTask2Stk[My_TASK2_STK_SIZE-1],1);

for(;;){

if(x>10){

x=0;

y=y+2;

}

PC_DispChar(x,y,*(char*)pdata,DISP_BGND_BLACK+DISP_FGND_WHITE);

x=x+1;

if(PC_GetKey(&key)==1){

if(key==0x1B){

PC_DOSReturn();

}

}

OSTimeDlyHMSM(0,0,1,0);

}

}

 

voidmain(void){

char*ch="M";

OSInit();

PC_DOSSaveReturn();

PC_VectSet(uCOS,OSCtxSw);

PC_DispClrScr(DISP_FGND_WHITE+DISP_BGND_BLACK);

OSTaskCreate(MyTask1,ch,&MyTask1Stk[My_TASK1_STK_SIZE-1],0);

OSStart();

}

3.

程序:

/********

*Exercise2-3

*author:

csuchenan

*time:

2013-12-13

********/

#include"includes.h"

#defineMy_TASK1_STK_SIZE256

#defineMy_TASK2_STK_SIZE256

OS_STKMyTask1Stk[My_TASK1_STK_SIZE];

OS_STKMyTask2Stk[My_TASK2_STK_SIZE];

INT16Skey;

INT8Ux=0,y=0;

INT16Ut=0;

voidMyTask2(void*pdata){

#ifOS_CRITICAL_METHOD==3

OS_CPU_SRcpu_sr;

#endif

pdata=pdata;

for(;;){

t+=1;

if(cnt==20){

OSTaskSuspend(0);

}

if(cnt==40){

OSTaskResume(0);

}

if(x>10){

x=0;

y=y+2;

}

PC_DispChar(x,y,*(char*)pdata,DISP_BGND_BLACK+DISP_FGND_WHITE);

x=x+1;

if(PC_GetKey(&key)==1){

if(key==0x1B){

PC_DOSReturn();

}

}

OSTimeDlyHMSM(0,0,1,0);

}

}

voidMyTask1(void*pdata){

char*ch2="Y";

#ifOS_CRITICAL_METHOD==3

OS_CPU_SRcpu_sr;

#endif

pdata=pdata;

OS_ENTER_CRITICAL();

PC_VectSet(0X08,OSTickISR);

PC_SetTickRate(OS_TICKS_PER_SEC);

OS_EXIT_CRITICAL();

OSStatInit();

OSTaskCreate(MyTask2,ch2,&MyTask2Stk[My_TASK2_STK_SIZE-1],1);

for(;;){

if(x>10){

x=0;

y=y+2;

}

PC_DispChar(x,y,*(char*)pdata,DISP_BGND_BLACK+DISP_FGND_WHITE);

x=x+1;

if(PC_GetKey(&key)==1){

if(key==0x1B){

PC_DOSReturn();

}

}

cnt++;

OSTimeDlyHMSM(0,0,1,0);

}

}

 

voidmain(void){

char*ch="M";

OSInit();

PC_DOSSaveReturn();

PC_VectSet(uCOS,OSCtxSw);

PC_DispClrScr(DISP_FGND_WHITE+DISP_BGND_BLACK);

OSTaskCreate(MyTask1,ch,&MyTask1Stk[My_TASK1_STK_SIZE-1],0);

OSStart();

}

4.

程序:

/********

*Exercise2-3

*author:

csuchenan

*time:

2013-12-13

********/

#include"includes.h"

#defineMy_TASK1_STK_SIZE256

#defineMy_TASK2_STK_SIZE256

OS_STKMyTask1Stk[My_TASK1_STK_SIZE];

OS_STKMyTask2Stk[My_TASK2_STK_SIZE];

INT16Skey;

INT8Ux=0,y=0;

INT16Ut=0;

voidMyTask2(void*pdata){

#ifOS_CRITICAL_METHOD==3

OS_CPU_SRcpu_sr;

#endif

pdata=pdata;

for(;;){

if(x>10){

x=0;

y=y+2;

}

PC_DispChar(x,y,*(char*)pdata,DISP_BGND_BLACK+DISP_FGND_WHITE);

x=x+1;

if(PC_GetKey(&key)==1){

if(key==0x1B){

PC_DOSReturn();

}

}

OSTimeDlyHMSM(0,0,1,0);

}

}

voidMyTask1(void*pdata){

char*ch2="Y";

#ifOS_CRITICAL_METHOD==3

OS_CPU_SRcpu_sr;

#endif

pdata=pdata;

OS_ENTER_CRITICAL();

PC_VectSet(0X08,OSTickISR);

PC_SetTickRate(OS_TICKS_PER_SEC);

OS_EXIT_CRITICAL();

OSStatInit();

OSTaskCreate(MyTask2,ch2,&MyTask2Stk[My_TASK2_STK_SIZE-1],1);

for(;;){

t=t+1;

if(cnt==5){

OSSchedLock();

}

elseif(cnt==10){

OSSchedUnlock();

}

if(x>10){

x=0;

y=y+2;

}

PC_DispChar(x,y,*(char*)pdata,DISP_BGND_BLACK+DISP_FGND_WHITE);

x=x+1;

if(PC_GetKey(&key)==1){

if(key==0x1B){

PC_DOSReturn();

}

}

OSTimeDlyHMSM(0,0,1,0);

}

}

 

voidmain(void){

char*ch="M";

OSInit();

PC_DOSSaveReturn();

PC_VectSet(uCOS,OSCtxSw);

PC_DispClrScr(DISP_FGND_WHITE+DISP_BGND_BLACK);

OSTaskCreate(MyTask1,ch,&MyTask1Stk[My_TASK1_STK_SIZE-1],0);

OSStart();

}

5.

程序代码如下:

/********

*Exercise2-3

*author:

csuchenan

*time:

2013-12-13

********/

#include"includes.h"

#defineMy_TASK1_STK_SIZE256

#defineMy_TASK2_STK_SIZE256

OS_STKMyTask1Stk[My_TASK1_STK_SIZE];

OS_STKMyTask2Stk[My_TASK2_STK_SIZE];

INT16Skey;

INT8Ux=0,y=0;

INT16Ut=0;

voidMyTask2(void*pdata){

#ifOS_CRITICAL_METHOD==3

OS_CPU_SRcpu_sr;

#endif

pdata=pdata;

for(;;){

if(OSTaskDelReq(OS_PRIO_SELF)==OS_TASK_DEL_REQ){

OSTaskDel(OS_PRIO_SELF);

break;

}

if(x>10){

x=0;

y=y+2;

}

PC_DispChar(x,y,*(char*)pdata,DISP_BGND_BLACK+DISP_FGND_WHITE);

x=x+1;

if(PC_GetKey(&key)==1){

if(key==0x1B){

PC_DOSReturn();

}

}

OSTimeDlyHMSM(0,0,1,0);

}

}

voidMyTask1(void*pdata){

char*ch2="Y";

#ifOS_CRITICAL_METHOD==3

OS_CPU_SRcpu_sr;

#endif

pdata=pdata;

OS_ENTER_CRITICAL();

PC_VectSet(0X08,OSTickISR);

PC_SetTickRate(OS_TICKS_PER_SEC);

OS_EXIT_CRITICAL();

OSStatInit();

OSTaskCreate(MyTask2,ch2,&MyTask2Stk[My_TASK2_STK_SIZE-1],1);

for(;;){

t=t+1;

if(cnt==10){

while(OSTaskDelReq(0)!

=OS_TASK_NOT_EXIST){

OSTimeDly

(1);

}

}

if(x>10){

x=0;

y=y+2;

}

PC_DispChar(x,y,*(char*)pdata,DISP_BGND_BLACK+DISP_FGND_WHITE);

x=x+1;

if(PC_GetKey(&key)==1){

if(key==0x1B){

PC_DOSReturn();

}

}

OSTimeDlyHMSM(0,0,1,0);

}

}

 

voidmain(void){

char*ch="M";

OSInit();

PC_DOSSaveReturn();

PC_VectSet(uCOS,OSCtxSw);

PC_DispClrScr(DISP_FGND_WHITE+DISP_BGND_BLACK);

OSTaskCreate(MyTask1,ch,&MyTask1Stk[My_TASK1_STK_SIZE-1],0);

OSStart();

}

注:

有程序的要求附上程序源代码,有图表的要有截图并有相应的文字说明和分析

七、实验小结

给出本次实验的体会,如学会了什么,遇到哪些问题,如何解决这些问题,存在哪些有待改进的地方。

实验2《时钟节拍及时间管理函数》

实验学时:

2实验地点:

综合实验楼x201实验日期:

2013/12/15

一、实验目的

1.实验环境的建立

2.多任务环境下中断机制及时间API的应用

二、实验容

1.在OS_CPU_C.C文件中按如下代码定义函数OSTimeTickHook(),然后运行并查看运行结果。

实现显示系统在每发生500次时钟中断期间,调度器进行任务调度的次数。

2.设计一个有3个任务的应用程序。

这3个任务分别是:

MyTask、YouTask、和InterTask。

其中任务InterTask是在时钟节拍中断服务程序中用钩子函数OSTimeTickHook()中断了10000次时使用一个信号变量InterKey激活的。

运行并分析由中断服务程序激活任务的工作特点。

3.设计一个应用,在任务MyTask中调用函数OSTimeDlyResume()取消任务YouTask的延时。

为了观察任务YouTask的延时时间的变化,在钩子函数OSTimeTickHook()输出了任务YouTask在延时时间到时的时钟节拍数。

4.设计一个应用程序,在任务中调用OSTimeGet()函数获得并显示系统的时钟节拍数OSTime。

当任务运行10s时,调用函数OSTimeSet()将OSTime的值设为10。

5.在KEIL模拟开发环境下,将顺序执行的程序改为多任务运行,并跟踪程序或设置断点观察多任务系统执行流程。

三、实验方法

包括实验方法、原理、技术、方案等。

四、实验步骤

1.将BC45文件夹拷贝到C分区根目录下。

2.将software文件夹拷贝到任意分区根目录下。

3.安装KEIL2集成开发环境。

4.分别完成实验1、2、3、4、5

五、实验结果

记录实验输出数据和结果。

1.

 

2.

3.

4.

 

5.

六、实验结论

对实验数据和结果进行分析描述,给出实验取得的成果和结论。

1.

OS_CPU_C.c

#ifOS_CPU_HOOKS_EN>0

INT16Ud=0;

INT16Ud1=0;

voidOSTimeTickHook(void)

{

char*s0="500";

char*s1="Per";

char*s2="TimesInterruptAttemperTimes";

chars[8];

if(d==500)

{

PC_DispStr(14,4,s1,DISP_BGND_BLACK+DISP_FGND_WHITE);

PC_DispStr(18,4,s0,DISP_BGND_BLACK+DISP_FGND_WHITE);

PC_DispStr(22,4,s2,DISP_BGND_BLACK+DISP_FGND_WHITE);

sprintf(s,"%d",OSCtxSwCtr);

PC_DispStr(31,d1+5,s,DISP_BGND_BLACK+DISP_FGND_WHITE);

d=0;

d1+=1;

}

d+=1;

}

#endif

#include"includes.h"

#defineTASK_STK_SIZE512

OS_STKMyTaskStk[TASK_STK_SIZE];

INT16Skey;

INT8Ux=0,y=0;

voidMyTask(void*data);

voidmain(void)

{

char*s_M="M";

OSInit();/*Initialize

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 中职中专

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1