|
程序没有开中断,其实MDK也不会识别你有没有开中断(其实我是在开中断的时候试出来的)下面的语句while里面翻译错了~,声明我用的是D版
typedef unsigned long ulong;
volatile ulong *Pt;
int main(void)
{
volatile ulong i;
Pt = &i;
while(1)
{
*(volatile ulong *)0x50004000 = i;
}
}
void SysTick_Handler(void)
{
++*Pt;
}
上面的volatile变量翻译的不对,汇编如下:
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]
0x00000176 E7FD B 0x00000174 这里一直这样循环,也没有加载过程,郁闷ing,优化级别调到最低没事~
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]
0x00000182 4770 BX lr
大家看看,是不是用D版都会这样?还是我的表达有问题~希望是我哪里写错了。我用的是MDK V4.03 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|