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左移8位后等于16位,右边8位会自动补0,这时再与buff相或,得到一个完整的16 ...

如果在51单片机里,BUFF左移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只是内存上的变量,要进行其它操作,比如移位,相加,相减等都是先要放到内核寄存器才能操作,内核寄存器都是32位的,不会有问题。这种方法不太好,用指针的方法会好很多

samhong 发表于 2017-5-24 21:15:50

签到签到

NNXia 发表于 2017-5-24 22:17:52

蓝凌风 发表于 2017-5-24 16:48
没问题的,buf只是内存上的变量,要进行其它操作,比如移位,相加,相减等都是先要放到内核寄存器才能 ...

恩恩,是的

Tcreat 发表于 2017-5-24 22:40:58

涨姿势了:lol

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来分别装结果,看看是否是有区别
页: 1 2 [3] 4
查看完整版本: 这种【合并两个8位数据】的方式是否正确?