先上程序如下:
#include "NUC.h"
volatile ulong *Pt;
void InstallData(volatile ulong *Point)
{
Pt = Point;
}
int main(void)
{
volatile ulong i = 0;
volatile ulong j;
InstallData(&i);
while(1)
{
j = i;
j -= 10;
*(volatile ulong *)0x50004000 = j;
j -= 10;
*(volatile ulong *)0x50004000 = j;
}
}
void SysTick_Handler(void)
{
*Pt++;
}
上述程序先不管功能,那个中断也没开(编译器也不知道我开没开),注意那两个volatile变量,没想到编译器竟然给优化掉了,不知是什么问题,哪位大侠指点一下,谢谢。反汇编程序如下:
0x0000017C 610A STR r2,[r1,#0x10]
0x0000017E 4A07 LDR r2,[pc,#28] ; @0x0000019C
0x00000180 4669 MOV r1,sp
0x00000182 6011 STR r1,[r2,#0x00]
0x00000184 4A08 LDR r2,[pc,#32] ; @0x000001A8
0x00000186 380A SUBS r0,r0,#0x0A
0x00000188 1801 ADDS r1,r0,r0
0x0000018A 6010 STR r0,[r2,#0x00]
0x0000018C 6011 STR r1,[r2,#0x00]
0x0000018E E7FC B 0x0000018A 就一直这样跑loop了,也不执行任何运算
声明:我用的是D版的MDK :L
。
SysTick_Handler: |