- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
淮海工学院计算工程学院实验报告书课 程 名: 嵌入式操作系统 题 目: 实验八 消息队列 班 级: 计算机131学 号: 2013122699 姓 名: 李健伟 一、实验目的掌握嵌入式实时操作系统uC/OS-II 中消息队列机制的基本原理和使用方法。二、实验原理 在本实验中,设计了6 个普通应用任务:TA0(优先级为1)、TA1(优先级为2)、TA2(优先级为3)、TA3(优先级为4)、TA4(优先级为5)、TA5(优先级为6),以及一个控制任务TaskCon(优先级为7)。uC/OS-II中,等待消息的任务总是按照优先级的高低来决定获得消息的顺序的。具体的设计思路为:_ 创建队列的功能:创建一个等待属性为 FIFO 的消息队列 1;创建一个等待属性为LIFO 的消息队列2。_ 考察以FIFO方式释放消息的消息队列:由任务 TA0、TA1、TA2 等待队列 1中的消息。TA0、TA1、TA2 使用相同的任务代码(Taskq1 函数)。_ 考察以LIFO方式释放消息的消息队列:由任务TA3、TA4、TA5等待队列2中的消息。TA3、TA4、TA5 使用相同的任务代码(Taskq2 函数)。_ 考察清空消息队列、查询消息队列的功能:TaskCon任务向队列 2 中连续发送6 条消息,然后查询消息数;清空该队列后再查询。考察删除消息队列的安全性:在任务TA3、TA4、TA5等待队列2 中的消息的过程中,让TaskCon 删除队列2;当队列2 被删除后,检查任务TA3、TA4、TA5 调用接收消息的函数是否返回错误码。三、实验步骤在 main()函数中通过q1 = OSQCreate(Msg1[0],6);q2 = OSQCreate(Msg2[0],6); 创建两个消息队列。在 TaskStart 任务中创建并启动所有的应用任务。void TaskStartCreateTasks (void){INT8U i;for (i = 0; i N_TASKS; i++) // Create N_TASKS identical tasks{TaskData1[i] = i; // Each task will pass its own idOSTaskCreate(Task1, (void *)TaskData1[i], TaskStk1[i][TASK_STK_SIZE - 1],i+1);}-for (i = 0; i N_TASKS; i++) // Create N_TASKS identical tasks{TaskData2[i] = i; // Each task will pass its own idOSTaskCreate(Task2, (void *)TaskData2[i], TaskStk2[i][TASK_STK_SIZE - 1],i+4);}OSTaskCreate(TaskCon, (void *)0, TaskConStk[TASK_STK_SIZE - 1],i+4);}应用任务TA0的代码(TA1,TA2相同):从队列 q1中按 LIFO 方式取消息。void Task1 (void *pdata){INT8U err;INT8U id;void *mg;id=*(int *)pdata;for (;;){OSTimeDlyHMSM(0, 0, 2, 0); /* Wait 2 second */mg=OSQPend(q1,0,err); /* apply for message */switch(err){case OS_NO_ERR:/* If it is normally, just print the string.*/printf(Task_%d GOT %s\n\r,id,(char *)mg);OSTimeDlyHMSM(0, 0, 0, 200*(4-id));break;default :/* If the queue is empty or has been deleted, print another string.*/printf( Queue1 %d is EMPTY!\n\r,id);OSTimeDlyHMSM(0, 0, 0, 200*(4-id));break;}}}应用任务TA3的代码(TA4,TA5相同):从队列 q2中按 FIFO 方式取消息。void Task2 (void *pdata){INT8U err;INT8U id;void *mg;id=*(int *)pdata;for (;;){OSTimeDlyHMSM(0, 0, 2, 0);/* Wait 2 second */mg=OSQPend(q2,0,err);/* apply for me
您可能关注的文档
最近下载
- 2024年第十六届全国大学生数学竞赛初赛试卷及参考答案(非数学B类).pdf VIP
- 自考本科《小学综合性学习与跨学科教学》2025年4月模拟题附答案.docx VIP
- 高校教师培训教学设计模板.docx VIP
- 《野外辨别方向》课件.ppt VIP
- 2024年第十六届全国大学生数学竞赛初赛试卷及参考答案(非数学A类).pdf VIP
- 医务人员职业防护.ppt VIP
- 第42届全国中学生物理竞赛复赛试题.docx VIP
- 万科示范区验收移交指引.docx VIP
- 唐代僧人的法律规范-政大机构典藏.PDF
- 2025-2026学年高二地理上学期第一次月考卷5【测试范围:选择性必修一,第1~2章第1节】(原卷及解析).docx VIP
文档评论(0)