你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

这种【合并两个8位数据】的方式是否正确?

[复制链接]
NNXia 提问时间:2017-5-23 18:32 /
阅读主题, 点击返回1楼
收藏 评论30 发布时间:2017-5-23 18:32
30个回答
NNXia 回答时间:2017-5-24 15:40:55
す疯Ⅱ恒す 发表于 2017-5-24 10:41
看汇编代码吧,移位的数据并没有保存在原来的数组,保存在RO R1寄存器上,所以并没有任何问题。 ...

恩恩,是的
NNXia 回答时间:2017-5-24 15:41:41
hjl2832 发表于 2017-5-24 09:08
这样写有什么问题?BUFF[0]左移8位后等于16位,右边8位会自动补0,这时再与buff[1]相或,得到一个完整的16 ...

如果在51单片机里,BUFF[0]左移8位后还等于16位吗?
NNXia 回答时间:2017-5-24 15:42:11
潇潇雨歇pku 发表于 2017-5-24 09:06
这种还是以事实为准,写代码跑一遍是最简单的获取答案的途径

事实是对32单片机来说,数据不会丢失
蓝凌风 回答时间:2017-5-24 16:48:18
NNXia 发表于 2017-5-23 22:33
看到4楼那位大哥的调试图了吗?请问为什么会出现那种情况?

没问题的,buf[0]只是内存上的变量,要进行其它操作,比如移位,相加,相减等都是先要放到内核寄存器才能操作,内核寄存器都是32位的,不会有问题。这种方法不太好,用指针的方法会好很多
samhong 回答时间:2017-5-24 21:15:50
签到签到
NNXia 回答时间:2017-5-24 22:17:52
蓝凌风 发表于 2017-5-24 16:48
没问题的,buf[0]只是内存上的变量,要进行其它操作,比如移位,相加,相减等都是先要放到内核寄存器才能 ...

恩恩,是的
Tcreat 回答时间:2017-5-24 22:40:58
涨姿势了  
jcx0324 回答时间:2017-5-26 08:38:52
有问题              
zhao.zhao 回答时间:2017-5-26 09:33:55
看了楼上大哥的汇编,知道这个结果的原因了。原因是r0 r1 寄存器是32位的,但是如果移植到16位机或8位机上,就不会是这个结果了。结论是写程序要规范,要先类型转换好了,再移位,否则的话,程序的移植性会很差。
钊钊 回答时间:2017-5-26 09:42:10
应该是可以的吧,32位的计算能力,把8位数据装进去,然后还有24位其实是未知的,左移后,占用了未知的8位,赋值的时候只要是能装下都应该是可以的,你可以这样,拿两个不同大小的,uint16 和uint32来分别装结果,看看是否是有区别

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版