




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验项目名称:用UC0SII实现任务间共享变量的无冲突访问及任务间的消息邮箱通信和队列通信。实验目的:1、实现任务之间共享变量无冲突的访问2 、实现任务之间消息邮箱的通信3 、实现任务之间的消息队列的通信实验内容(实验过程及问题的解决):实验主要参照了例题4.7、4.8、4.9,将3个例题合成一个任务,满足题目的要求。首先,设置了5个任务,oneTask和foTask2个任务建立了互斥信号*Mutexp,用OSMutexPend(Mutexp,0,&err);和OSMutexPost(Mutexp),并延时等待一秒,进行2个任务的共享变量无冲突访问控制。然后在hertask任务中,显示
2、times的次数,并使用消息邮箱OSMboxPost(Str_Box,s)给twoTask任务邮箱消息,twoTask接收到消息后,根据OSTimeGet()获得系统时间范围来判断要传送给stwoTask任务的字符,并使用OSQPost(Str_Q,s4)和OSQPend(Str_Q,0,&err);进行消息队列的通信。调试与结果测试分析:字符oneTaskrunning和foTaskrunning在互斥信号的条件下,一直循环配对出现,而屏幕上的数字就是消息邮箱传递消息的次数,而twoTaskrunning和stwoTaskrunning各出现了2次,是由于在消息队列邮箱中设置了在10
3、0<OSTimeGet()<500和500<OSTimeGet()<900,分别在系统不同时间范围内显示不同字符,用以区别。实验程序附录:/*/$1*/#include"includes.h"#defineTASK_STK_SIZE512/任务堆栈长度#defineN_MESSAGES128OS_STKStartTaskStkTASK_STK_SIZE;OS_STKoneTaskStkTASK_STK_SIZE;OS_STKfoTaskStkTASK_STK_SIZE;OS_STKherTaskStkTASK_STK_SIZE;OS_STKtwoTa
4、skStkTASK_STK_SIZE;OS_STKstwoTaskStkTASK_STK_SIZE;/定义消息队列长度/定义任务堆栈区/定义任务堆栈区/定义任务堆栈区/定义任务堆栈区/定义任务堆栈区/定义任务堆栈区INT16Skey;/用于退出的键char*s;char*ss;char*s1="oneTaskrunning"char*s2="foTaskrunning"/char*sss="OneTaskRequestsemaphore"char*s3="herTaskrunning"char*s4="t
5、woTaskrunning"char*s5="stwoTaskrunning"INT8Uerr;INT8Uy=0;INT32UTimes=0;/INT32UTimess=0;OS_EVENT*Str_Box;OS_EVENT*Str_Q;OS_EVENT*Mutexp;void*MsgGrpN_MESSAGES;voidStartTask(void*data);voidoneTask(void*data);voidfoTask(void*data);voidherTask(void*data);voidtwoTask(void*data);voidstwoTask
6、(void*data);/字符显示位/定义事件控制块/定义事件控制块/定义消息指针数组/声明起始任务/声明任务/声明任务/声明任务/声明任务/声明任务/*主函数*/voidmain(void)OSInit();/初始化uCOS_IIPC_DOSSaveReturn();/保存Dos环境PC_VectSet(uCOS,OSCtxSw);/安装uCOS_II中断Str_Box=OSMboxCreate(void*)0);/创建邮箱型信号量Str_Q=OSQCreate(&MsgGrp0,N_MESSAGES);/创建消息队列Mutexp=OSMutexCreate(1,&err);
7、/定义信号量OSTaskCreate(StartTask,/创建任务StartTask(void*)0,/给任务传递参数&StartTaskStkTASK_STK_SIZE-1,/设置任务堆栈栈顶0);/使任务的优先级别为0OSStart();/启动多任务管理/*任务StartTask*/voidStartTask(void*pdata)#ifOS_CRITICAL_METHOD=3OS_CPU_SRcpu_sr;#endifpdata=pdata;OS_ENTER_CRITICAL();PC_VectSet(0x08,OSTickISR);/安装时钟中断向量PC_SetTickRat
8、e(OS_TICKS_PER_SEC);/设置uCOS_II时钟频率OS_EXIT_CRITICAL();OSStatInit();/初始化统计任务OSTaskCreate(oneTask,/创建任务oneTask(void*)0,/给任务传递参数&oneTaskStkTASK_STK_SIZE-1,/设置任务堆栈栈顶3);/使任务的优先级别为3OSTaskCreate(foTask,/创建任务foTask(void*)0,/给任务传递参数&foTaskStkTASK_STK_SIZE-1,/设置任务堆栈栈顶4);/使任务的优先级别为4OSTaskCreate(herTask,
9、/创建任务herTask(void*)0,/给任务传递参数&herTaskStkTASK_STK_SIZE-1,/设置任务堆栈栈顶5);/使任务的优先级别为5OSTaskCreate(twoTask,/创建任务twoTask(void*)0,/给任务传递参数&twoTaskStkTASK_STK_SIZE-1,/设置任务堆栈栈顶6);/使任务的优先级别为6OSTaskCreate(stwoTask,/创建任务stwoTask(void*)0,/给任务传递参数&stwoTaskStkTASK_STK_SIZE-1,/设置任务堆栈栈顶7);/使任务的优先级别为7for(;)
10、如果按下Esc键则退出uCOS_IIif(PC_GetKey(&key)=TRUE)if(key=0x1B)PC_DOSReturn();OSTimeDlyHMSM(0,0,3,0);/等待3秒/*任务oneTask*/voidoneTask(void*pdata)# ifOS_CRITICAL_METHOD=3OS_CPU_SRcpu_sr;#endifpdata=pdata;for(;)/等待200 毫秒/OSTimeDlyHMSM(0,0,0,200);/PC_DispStr(10,+y,/sss,/DISP_BGND_BLACK+DISP_FGND_WHITE);OSMutex
11、Pend(Mutexp,0,&err);/请求信号量PC_DispStr(10,+y,s1,DISP_BGND_BLACK+DISP_FGND_WHITE);OSMutexPost(Mutexp);/发送信号量号量OSTimeDlyHMSM(0,0,1,0);/等待1秒voidfoTask(void*pdata)/*任务 foTask*/# ifOS_CRITICAL_METHOD=3OS_CPU_SRcpu_sr;#endifpdata=pdata;for(;)OSMutexPend(Mutexp,0,&err);/请求信号量号量PC_DispStr(10,+y,s2,DIS
12、P_BGND_BLACK+DISP_FGND_WHITE);/for(Timess;Timess<2;Timess+)/OS_Sched();/OSMutexPost(Mutexp);/发送信号量OSTimeDlyHMSM(0,0,1,0);/等待1秒/*任务 herTask*/voidherTask(void*pdata)# ifOS_CRITICAL_METHOD=3OS_CPU_SRcpu_sr;#endifpdata=pdata;for(;)sprintf(s,"%d",Times);/发送消息OSMboxPost(Str_Box,s);/*PC_DispSt
13、r(10,+y,Str_Box->OSEventPtr,/s,DISP_BGND_BLACK+DISP_FGND_WHITE);*/Times+;OSTimeDlyHMSM(0,0,1,0);/等待1秒voidtwoTask(void*pdata)/*任务 twoTask*/# ifOS_CRITICAL_METHOD=3OS_CPU_SRcpu_sr;#endifpdata=pdata;for(;)ss=OSMboxPend(Str_Box,10,&err);PC_DispStr(10,+y,ss,DISP_BGND_BLACK+DISP_FGND_WHITE);if(OSTimeGet()>100&&OSTimeGet()<500)OSQPost(Str_Q,s4);/发送消息if(OSTimeGet()>500&&OSTimeGet()<900)OSQPostFront(Str_Q,s5);/发送消息OSTimeDlyHMSM(0,0,1,0);/等待1秒voidst
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 品牌配件库存管理制度
- 小区静默日常管理制度
- 固定资产投资管理制度
- 医院油料使用管理制度
- 各国海域使用管理制度
- 回迁小区车辆管理制度
- 公园医疗安全管理制度
- 针对持续集成环境的测试案例设计试题及答案
- 自动化脚本设计中的最佳实践试题及答案
- 幼儿厨房卫生管理制度
- 行业调研报告:全球及中国琥珀聚糖行业研究及十四五规划分析报告
- 2025年浙江科学中考预测卷(含答案)
- 刻章公司公章刻制管理制度-承接-登记-制作-检验-保管-领取
- 高龄心房颤动患者抗凝治疗中国专家共识(2024)解读课件
- 初中数学八年级三角形及三角形全等专题练习题(附含答案)
- 2024国际物流师考试内容试题及答案
- 幼儿园篮球比赛方案
- 重点人口管理工作规定
- PLC技术在供水系统中的应用与优化
- 劳务分包方案投标文件(技术方案)
- 2025年企业弹性工时劳动合同范文
评论
0/150
提交评论