打印
[uCOS/RTOS]

ucos_III传递参数的注意事项

[复制链接]
1198|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liuchang890811|  楼主 | 2015-9-7 14:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟最近写一个ucos小实验,实验的思路是通过ADC采样数据,然后将这个数据发送给TFT屏显示
1>假设我采样的数据是ADC_Value,这个ADC_Value数据我从中断中就可以得到
2>显示任务为Show_Task
请问大神:我是应该使用全局变量将这个数据传递到Show_Task中去,还是应该使用消息队列(不知道为什么,ucos_III没有邮箱了~~~)???
2者各有什么优缺点呢?我觉得使用全局变量最直接,易懂,恳请大神指教~

相关帖子

沙发
john_lee| | 2015-9-8 09:45 | 只看该作者
如果 CPU 的一个寄存器能够完全容纳这个数据,那么建议用静态变量(全局等),通过一个信号量去同步。
如果不能容纳,建议使用邮箱或消息队列。

使用特权

评论回复
板凳
liuchang890811|  楼主 | 2015-9-8 10:19 | 只看该作者
@john_lee 如果 CPU 的一个寄存器能够完全容纳这个数据是什么意思啊?
我使用的是stm32f103vet6,那我可以理解为我的数据只要小于等于32个bit就可以吗?

使用特权

评论回复
地板
john_lee| | 2015-9-8 11:02 | 只看该作者
是的,如果这个数据的宽度大于CPU寄存器的宽度,那么任务一次访问这个数据就需要CPU分多次访问各部分,注意,这里说的“访问”就是单纯的读或者写,不是“读-修改-写”。如果多次访问的操作没有“原子操作”的机制保障,那么数据就可能错乱。
而当数据的宽度小于CPU寄存器的宽度,这个“原子操作”是由CPU保证了,不会发生错乱的情况。

使用特权

评论回复
5
liuchang890811|  楼主 | 2015-9-8 12:59 | 只看该作者
john_lee 发表于 2015-9-8 11:02
是的,如果这个数据的宽度大于CPU寄存器的宽度,那么任务一次访问这个数据就需要CPU分多次访问各部分,注意 ...

一直蒙受大神指点,不胜感激~~~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

87

帖子

0

粉丝