ucos-ii学习笔记——消息邮箱的原理及使用
来源:互联网 发布:淘宝同款排除工具 编辑:程序博客网 时间:2024/05/29 03:58
ucos-ii学习笔记——消息邮箱的原理及使用
Created
学习笔记
for
redesigned
2012-10-7
versions:V-0.1
All
#include
#define
char
char
INT8U
INT8U
INT32U
OS_EVENT
//比较和上例中定义信号量的区别
//其实没有什么区别,定义的类型都是OS_EVENT的指针,都是事件控制块的指针
OS_STK
OS_STK
OS_STK
void
void
void
void
{
}
void
{
#if
#endif
OSTaskCreate(YouTask,(void
for
}
void
{
#if
#endif
}
void
{
#if
#endif
pdata=pdata;
for
{
ss=OSMboxPend(Str_Box,10,&err);
//err表示错误信息,返回值ss是邮箱中的消息指针
PC_DispStr(10,++y,ss,DISP_BGND_BLACK+DISP_FGND_WHITE);
}
//本程序实现的功能就是MyTask把自己的运行次数作为消息发送到消息邮箱中,任务YouTask请求消息邮箱,得到消息并显示出来
//因为MyTask和YouTask的等待时间相等,都是1s,所以Mytask和YouTask交替运行,运行次数相同,所以显示出的数字是从
//0开始,1
//我试过了,(1)当MyTask的延迟时间短时,即YouTask运行一次,MyTask运行多次,这样显示的数字就是MyTask的运行次数,会不连续
//这是正常的。
//但是,(2)当MyTask运行一次,YouTask运行多次时,这样会好几次显示同样的数字,这也就表示在YouTask调用
//ss=OSMboxPend(Str_Box,10,&err);函数后,取得了消息,并每有把消息邮箱中的消息给清除,而是消息一直在邮箱中存在,
//所以下次再取消息的时候,消息还没有来得及更新,还是原来的消息。
//不知道当调用ss=OSMboxPend(Str_Box,10,&err);取得消息后,邮箱中的消息是否应该清除,从上面的现象来看,好像是没有清除
//这要分析该函数的代码才能搞清楚
//清楚了,情况是这样的:函数ss=OSMboxPend(Str_Box,10,&err);得到了邮箱中的消息后,确实是将邮箱清除了,将NULL指针存入了
//邮箱中,当出现上面(2)情况时,邮箱为空,YouTask是处于等待状态,但是由于在调用OSMboxPend时指定等待时间为10,所以当
//等待时间到了,即使邮箱中还是无消息,YouTask也会进入就绪态的,然后继续往下运行,但是,由于ss没有再取得新的消息,还
//是原来的值,所以还会显示原来的值。这种情况可以用改变OSMboxPend的等待时间来验证。OSMboxPend的详细代码说明,参见P235
//但是不知道为什么当OSMboxPend的等待时间我设为0时,表示无限等待,知道邮箱中有消息,
//当等待时间设为很大,大于1s对应的等待时间,显示的时间间隔就由等待时间来确定了,不知道为什么会这样??
//这个要搞清楚
博文出处:http://blog.sina.com.cn/s/blog_6cd2030b010192kw.html
- ucos-ii学习笔记——消息邮箱的原理及使用
- ucos-ii学习笔记——消息邮箱的原理及使用
- ucos-ii学习笔记——消息队列的原理及使用
- ucos-ii学习笔记——消息队列的原理及使用
- ucos ii学习笔记2 邮箱&&信息量
- uCOS-II中的消息邮箱
- ucos-II消息队列学习笔记
- uC/OS-II 学习笔记之:信号量、消息邮箱、消息队列之间的使用区别
- uCOS-II邮箱和消息队列
- uCOS-II邮箱和消息队列
- uCOS-II邮箱和消息队列
- uC/OS-II 学习笔记:消息邮箱
- ucos II 学习笔记
- UCOS-II学习笔记
- ucos ii学习笔记3 消息队列、信号量集
- Ucos学习之邮箱与消息队列
- ucOS学习笔记(3)——ucOS的数据结构
- ucos-ii学习笔记——首个多任务程序的创建
- 条款10:令operator=返回一个reference to * this
- Java获取数据库表列信息、索引信息、存储过程等信息 .
- 多备份:带领站长冲上“云端”
- 下推栈的数组实现
- hdu 2159 FATE
- ucos-ii学习笔记——消息邮箱的原理及使用
- UVa10527 - Persistent Numbers(数论)
- Mysql 批量更新操作的时候出错 “Multi-statement transaction required more than 'max_binlog_cache_size' bytes of s
- 为什么Java byte 类型的…
- 短信远程开机
- sizeof用法总结(个人感觉非常好的…
- 逻辑运算符<<和>>的详细分析
- C符号之逻辑运算符、左移与右移、…
- 利用union判断系统的大小端