|
程序没有开中断,其实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周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|