版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年云南文山铝业有限公司招聘备考题库及一套参考答案详解
- 2026年四团农业和林业草原中心公开招聘动物疫病防控购买服务的备考题库及完整答案详解1套
- 2026年国投期货有限公司招聘备考题库及参考答案详解
- 2026年中化方胜能源管理服务有限公司招聘备考题库及完整答案详解一套
- 2026年双清区退役军人事务局所属事业单位选调工作人员备考题库及答案详解一套
- 2026年四川省自然资源资产储备中心关于公开考核招聘专业技术人员的备考题库有答案详解
- 2026年中共西藏自治区委员会党校(西藏自治区行政学院)急需紧缺人才引进备考题库附答案详解
- 2026年宁县第二人民医院公开招聘专业技术人员备考题库及答案详解1套
- 2026年天津医科大学总医院导诊员岗位(北方辅医外包项目)招聘备考题库及1套参考答案详解
- 2026年五指山市就业服务中心招聘备考题库及参考答案详解
- 房地产楼盘介绍
- 2025内蒙古润蒙能源有限公司招聘22人考试题库附答案解析(夺冠)
- 2026年国家电网招聘之电网计算机考试题库500道有答案
- (2025年)辽宁省葫芦岛市辅警招聘警务辅助人员考试题库真题试卷公安基础知识及答案
- 钢结构施工组织方案大全
- 江苏省徐州市2025-2026学年高二上学期期中考试信息技术试卷(含答案)
- 广东省广州市2025年上学期八年级数学期末考试试卷附答案
- 2025福建德化闽投抽水蓄能有限公司社会招聘4人备考题库附答案
- 2025年物业管理中心工作总结及2026年工作计划
- 雨课堂学堂在线学堂云军事理论国防大学单元测试考核答案
- 多源医疗数据融合的联邦学习策略研究
评论
0/150
提交评论