版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 年产6.5万套高端实木家具15万套新型材料家具项目可行性研究报告模板-立项备案
- 广东深圳市罗湖区翠园东晓中学2026−2027学年第一学期九年级开学考数学试卷(含答案)
- 2026年高校计算机科学与技术专业期末编程大题专项训练
- 2026年公共卫生医师《流行病学》冲刺押题试卷
- 2026年事业单位招聘《财务会计》实务操作专项训练卷
- 2026年城市管理局事业编《城市管理知识》全真试卷
- 2026年公路养护工程师道路工程预算编制培训试卷
- 2026年教师资格证考试综合素质与教育教学知识全真单套预测试卷
- 2026年审计师考试审计理论与方法专项训练
- 2026全国保安员资格考试题库附答案
- 公路工程2018预算定额释义手册
- 项目部用车管理制度
- 养老院财务管理年度预算计划
- 护理安全给药管理制度
- 《腹膜透析患者包裹性腹膜硬化综合管理中国专家共识》解读
- 太子城至锡林浩特铁路环境影响报告书
- FZ∕T 93038-2018 梳理机用金属针布齿条
- 2023 年 5 月全国事业单位联考 C 类《综合应 用能力》及参考答案
- 家校共育 班主任研修课件
- SB/T 10379-2012速冻调制食品
- GB/T 16585-1996硫化橡胶人工气候老化(荧光紫外灯)试验方法
评论
0/150
提交评论