下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、关于UCOS下邮箱使用的两个经验在使用UCOS的邮箱时,遇到一些问题,现将一些小总结写下,希望对大家有所帮助。 邮箱使用总结1数据的存放。邮箱一般用来传递数据,不管何种类型都可以传递。在传递时,先把数据数据用void *进行类型变化,化为void *这种万用类型,而在接收邮箱的数据时,再复原本钱身的数据类型。比方以下的两个例子:一是传递指向一个数组的指针。发端采用如下方式:OSMboxPost(ComSendMbox, (void *)ComBufRec); 其中的ComBufRec就是数组名,也表示指向该数组的指针,将原来的字符型数组名或指针变成(void *)类型,而接收端,利用send_
2、ptr = (uint8 *)OSMboxPend(ComSendMbox, 0, &err); 将(void *)类型复原为指针。二是传递一个字符型变量。发端采用如下方式:OSMboxPost(KeyMbox, (void *)key_value); 其中的key_value就是字符型变量,将原来的字符型变量变成(void *)类型,而接收端,利用key = (INT8U)OSMboxPend(KeyMbox, 0, &err); 将(void *)类型复原为字符型变量。2、关于在邮箱中不能存放传递0值的问题在邮箱的传递中,如果把一个0值放入邮箱,经过void *类型变化后,变成了void
3、*0,而判断邮箱中是否有数据正是通过判断邮箱中指向Message的指针是否为0来判断,这样虽然放入了一个0变量,但邮箱中却无法判断这个0值,认为邮箱中还是空。ucos觉得使用它还是需要很多技巧性的,也就是说ucos需要技巧性的操作,今天我就我对邮箱这一块的看法说说。下面我用一个例子说一下首先例子的功能就是创立一个邮箱myMbox利用它所存取的msg不同而进行相应的任务调度。程序片段如下OS_EVENT *myMbox;Static INT8U TaskAMsg,TaskBMsg;myMbox = OSMboxCreatevoid *TaskAMsgvoid TaskA(void *i)for
4、(;)if(OSMboxPend(myMbox,0,&myErr)= (void *)& TaskAMsg)Uart_Printf(TaskAn);OSTimeDly(100); (1)OSMboxPost(myMbox,(void *)& TaskBMsg);OSTimeDly(100); (2)void TaskB(void *i)for (;)if(OSMboxPend(myMbox,0,&myErr) = (void *)& TaskBMsg)Uart_Printf(TaskBn);OSTimeDly(100); (1)OSMboxPost(myMbox,(void *)& TaskA
5、Msg);OSTimeDly(100); (2)OSTaskCreate(TaskA, (void *)0, (void *)&Task_Stk5STK_size_S - 1, 6);OSTaskCreate(TaskB, (void *)0, (void *)&Task_Stk6STK_size_S - 1, 7);大概的程序片度如上,这里我特地把OSTimeDly分成两种情况放置,但程序运行的结果是一样的,个人认为放置在位置2上容易理解,下面我们要讨论的是放在位置一上是个怎么回事。从程序中我们可以大概看出,首先创立了一个邮箱myMbox 初始化它的消息内容为TaskAMsg想想这里可以初始
6、化为TaskBMsg吗?好了从任务A开始看起。首先程序运行当然是先执行TaskA了,因为它的优先级是最高的是吧。那么由于邮箱有初始化也就是msg != void*0;的情况,这个时候OSMboxPend就直接返回了Msg,它是一个地址。在if语句中判断是不是TaskA要等的消息,如果是就执行if语句的内容,从初始化我们知道这里肯定会执行if语句的内容了。那么好了打印完了之后就是OSTimeDly100了,也就是说TaskA到了这里就开始被挂起100个tick了。这时候是怎么挂起的呢,对就是直接从Rdy表中把它给删除掉,等到100个tick过去后在重新添加近Rdy表。我们要注意的是,在这里Tas
7、kA没有被放在事件等待的Rdy里头。那么程序在这100个tick期间去做什么去了呢!当然程序挂起了TaskA也就只能跑到TaskB去了。到了TaskB由于邮箱这个时候还没有消息看清楚OSMboxPost放在OSTimeDly后面,也就是TaskB执行了OSMboxPend,但由于邮箱里头的msg是空的,那么它就将TaskB给挂起了,挂起了放在哪里了呢?注意了,这个时候TaskB就被添加在事件等待列表里头了。然后程序去做什么去了?这个时候如果TaskA和TaskB如果都还没有Rdy的话,那么程序就去执行IDLE任务拉。等到TaskA的tick到了之后就执行OSMboxPost(myMbox,(v
8、oid *)& TaskBMsg);也就是给myMbox投递一封邮件了,邮件的内容是TaskBMsg因为我们的收信人是TaskB。这个时候OSMboxPost首先会检查事件等待列表中是否有任务在等待,如果有的话就把里头优先级最高的任务给拿出来放到Rdy表里头去并且将我们刚刚邮寄的信转发给它并放到它自己的信箱里头,这里我们是把给TaskB的信放在TaskB的OSTCBMsg里头,然后看看这个任务是否已经就绪了,如果是就把它添加到Rdy里头去。那么这这里TaskB是不是已经就绪了呢?是的,到这里,TaskB就被添加到Rdy表去了。跟着TaskA就回到if语句上,第一次判断邮箱是非空的,但里面的消息
9、并不是TaskA所要的,这时候OSMboxPend还把邮箱清空了。第二次执行OSMboxPend的时候由于邮箱在第一次的时候被清空了,这个时候TaskA就被挂起拉,并且添加到事件等待列表中去。然后进行任务切换了,任务切换到TaskB去。执行OSMboxPend未执行完的语句。那么之前是执行到OSSched那里,现在往下去执行msg = OSTCBCur-OSTCBMsg;这条语句。我们知道刚刚在TaskA的OSMboxPost的时候它把信放在TaskB的OSTCBMsg里头,那么这个时候OSMboxPend就不等待了,就执行if语句了哦。跟着的过程就和上面的一样了。到这里把OSTimeDly放
10、在位置1的情况个人分析就结束了,那么放在位置2呢,这也太容易理解了吧。several group number, then with b a, =c,c is is methyl b two vertical box between of accurate size. Per-23 measurement, such as proceeds of c values are equal and equal to the design value, then the vertical installation accurate. For example a, b, and c valueswhile on horizontal vertical errors for measurement, General in iron angle code bit at measurement
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026海南三亚凤凰国际机场招聘22人笔试历年参考题库附带答案详解
- 2026年黑河北安市社区卫生服务中心公开招聘工作人员82人备考题库附答案详解
- 2026年潍坊市街道办人员招聘考试备考试题及答案详解
- 2026江苏扬州市通享出行服务有限公司职业经理人招聘1人备考题库完整参考答案详解
- 2026河南信阳师范大学招聘60人备考题库附答案详解(轻巧夺冠)
- 2026上海市绿化和市容管理局部分直属事业单位中高级专业技术人员招聘6人笔试参考试题及答案解析
- 2026年龙岩市新闻系统事业单位人员招聘考试备考试题及答案详解
- 2026年甘肃省庆阳市宁县第二人民医院招聘专业技术人员笔试参考题库及答案解析
- 2026安徽宿州萧县实验高级中学教师招聘26人笔试参考试题及答案解析
- 2026福建省建筑材料设备有限责任公司招聘1人笔试参考题库及答案解析
- 2026四川资阳市乐至县至弘发展集团有限公司员工招聘5人备考题库及答案详解(考点梳理)
- 期中考试分析会上校长不晒分数不排名只跟老师算三笔账句句戳中教师心
- 武胜县2026年公开招聘社区工作者(62人)笔试参考题库及答案解析
- 2026版临床护理文书书写规范
- DB43-T 2777-2023 沥青路面水泥稳定就地冷再生应用技术规范
- 人形机器人新纪元:具身智能的科技探索
- 【医卫类】2021年湖南省普通高等学校对口招生考试医卫类专业综合知识试题
- 电压电流串并流规律课件
- 2025年物业维修服务与客户满意度提升手册
- 2026年聊城幼儿师范学校第二批公开招聘工作人员9人备考题库及1套完整答案详解
- 2026保安员(初级)考试题模拟考试题库及答案(必刷)
评论
0/150
提交评论