小学生
最后登录1970-1-1
在线时间 小时
注册时间2022-1-21
|
近日楼主在一个项目中用到了一个二位数组,定义的格式是__IO u32 Speed[4][6],但是程序在执行的时候一直有问题,进入调试中找了两天,发现这段汇编很奇怪
其中0x08000E14和0x08000E18地址的数据放在了后面这张图里,可以看出来这两个地址存放的数据分别是Stage数组的首地址和Speed数组的首地址,前两句汇编和第三局汇编的意思分别是将Stage[0]的数据放到r0和将speed[0][0]的地址放到r1
但是接下来的这句汇编把楼主整蒙了 LDRH r0, [r1,r0,LSL #1] 这句汇编得意思是将r1加上r0向左偏移两位后的数值作为地址,从这个地址开启取两个字节放到r0里面,也就是从Speed[0]这个地址往后偏移Stage[0]*2个字节,这个Stage[0]会随着程序的运行逐渐自加,但是也是有急有偶,,这样取出来的数据
经常会影响if判断,导致调试的时候自己看着if里面的条件是真的但是就是不能进入到if里面执行
其实我一开始发这个贴子是想问问大家怎么回事,但是这个问题在写这个帖子的时候已经被解决了,我把经验分享出来记录一下,希望有和我一样困扰的同学在以后面对这种问题的时候有些头绪,不是什么很厉害的技术,高手轻喷
|
|