上面那个不够明显,再发一个
volatile ulong *Pt;
int main(void)
{
volatile ulong i;
Pt = &i;
while(1)
{
*(volatile ulong *)0x50004000 = i;
}
}
void SysTick_Handler(void)
{
++*Pt;
}
main:
0x00000168 B508 PUSH {r3,lr}
0x0000016A 4906 LDR r1,[pc,#24] ; @0x00000184
0x0000016C 4668 MOV r0,sp
0x0000016E 6008 STR r0,[r1,#0x00]
0x00000170 4905 LDR r1,[pc,#20] ; @0x00000188
0x00000172 9800 LDR r0,[sp,#0x00]
0x00000174 6008 STR r0,[r1,#0x00] //从下面的程序可以看出R0的值是定值
0x00000176 E7FD B 0x00000174
SysTick_Handler:
0x00000178 4802 LDR r0,[pc,#8] ; @0x00000184
0x0000017A 6800 LDR r0,[r0,#0x00]
0x0000017C 6801 LDR r1,[r0,#0x00]
0x0000017E 1C49 ADDS r1,r1,#1
0x00000180 6001 STR r1,[r0,#0x00] //更新[R0]值,R0值不变!!
0x00000182 4770 BX lr
我真的无奈了
|