[uCOS/RTOS] ucos_III传递参数的注意事项

[复制链接]
 楼主| 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保证了,不会发生错乱的情况。
 楼主| liuchang890811 发表于 2015-9-8 12:59 | 显示全部楼层
john_lee 发表于 2015-9-8 11:02
是的,如果这个数据的宽度大于CPU寄存器的宽度,那么任务一次访问这个数据就需要CPU分多次访问各部分,注意 ...

一直蒙受大神指点,不胜感激~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

87

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部