ucosII实验报告Word文件下载.docx
- 文档编号:20427998
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:77
- 大小:422.43KB
ucosII实验报告Word文件下载.docx
《ucosII实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《ucosII实验报告Word文件下载.docx(77页珍藏版)》请在冰豆网上搜索。
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个字符,行与行之间的间隔是一行。
3.DOS窗口开始交替显示字符"
和“Y”,显示20次以后,Task1挂起,只显示“Y”,当Task2运行40次以后,Task1恢复,然后开始Task1,Task2交替运行。
4.DOS窗口开始交题显示字符"
和“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="
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
2013-12-13
#defineMy_TASK1_STK_SIZE256
#defineMy_TASK2_STK_SIZE256
OS_STKMyTask1Stk[My_TASK1_STK_SIZE];
OS_STKMyTask2Stk[My_TASK2_STK_SIZE];
voidMyTask2(void*pdata){
OS_CPU_SRcpu_sr;
PC_VectSet(0x80,OSTickISR);
PC_DispChar(x,y,*(char*)pdata,DISP_BGND_BLACK+DISP_FGND_WHITE);
voidMyTask1(void*pdata){
char*ch="
Y"
OSTaskCreate(MyTask2,ch,&
MyTask2Stk[My_TASK2_STK_SIZE-1],1);
OSTaskCreate(MyTask1,ch,&
MyTask1Stk[My_TASK1_STK_SIZE-1],0);
3.
*Exercise2-3
INT16Ucnt=0;
cnt+=1;
if(cnt==20){
OSTaskSuspend(0);
if(cnt==40){
OSTaskResume(0);
char*ch2="
OSTaskCreate(MyTask2,ch2,&
MyTask2Stk[My_TASK2_STK_SIZE-1],1);
cnt++;
4.
cnt=cnt+1;
if(cnt==5){
OSSchedLock();
elseif(cnt==10){
OSSchedUnlock();
5.
程序代码如下:
if(OSTaskDelReq(OS_PRIO_SELF)==OS_TASK_DEL_REQ){
OSTaskDel(OS_PRIO_SELF);
break;
if(cnt==10){
while(OSTaskDelReq(0)!
=OS_TASK_NOT_EXIST){
OSTimeDly
(1);
注:
有程序的要求附上程序源代码,有图表的要有截图并有相应的文字说明和分析
七、实验小结
给出本次实验的体会,如学会了什么,遇到哪些问题,如何解决这些问题,存在哪些有待改进的地方。
实验2《时钟节拍及时间管理函数》
综合实验楼x201实验日期:
2013/12/15
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模拟开发环境下,将顺序执行的程序改为多任务运行,并跟踪程序或设置断点观察多任务系统执行流程。
3.安装KEIL2集成开发环境。
4.分别完成实验1、2、3、4、5
记录实验输出数据和结果。
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;
#defineTASK_STK_SIZE512
INT16Skey;
INT8Ux=0,y=0;
voidMyTask(void*data);
voidmain(void)
{
char*s_M="
OSIn
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ucosII 实验 报告