uint16 readRegister(unsigned char address) <br />{ <br /> uint16 temp;<br /> uint32 addr;<br /> addr=(uint32)(c_rtl_address+address);<br /> temp=(*((volatile unsigned short *) addr));<br /> //temp=(*((volatile unsigned short *) c_rtl_address+address));//0x83400000<br /> return (temp);<br /> }<br /><br />[0xe28004c0] * add r0,r0,#0xc0000000<br />[0xe24005f3] sub r0,r0,#0x3cc00000<br />[0xe1d000b0] ldrh r0,[r0,#0]<br />[0xe1a0f00e] mov pc,r14<br /><br />uint16 readRegister(unsigned char address) <br />{ <br /> uint16 temp;<br /> temp=(*((volatile unsigned short *) c_rtl_address+address));//0x83400000<br /> return (temp);<br /> }<br /> <br />[0xe59f17d8] * ldr r1,0x80002654 ; = #0x83400000<br />[0xe1a0c080] mov r12,r0,lsl #1<br />[0xe19100bc] ldrh r0,[r1,r12]<br />[0xe1a0f00e] mov pc,r14<br /><br />我是用AXD单步设置断点,考下汇编<br />c_rtl_address是个常数值:OX83400000;在汇编中看不出,可以肯定的说下面运行的结果是对的,上面是错的,我用串口监控了数据;<br />很感谢各位的回复,谢谢
|