1、当前程序代码是否有误?或者设置不合理的地方?
延时程序错误. 编译器认为里面的循环是无效代码,直接kill掉. 达不到楼主想要的延时效果
void Main_DealyTime(unsigned int iTmpDlyTime) //延时 { for(;iTmpDlyTime>0;iTmpDlyTime--);//空循环,视为无效代码 } GCC编译出来的汇编: 000000ae <Main_DealyTime>: ae: 08 95 ret
应该: void Main_DealyTime(volatile unsigned int iTmpDlyTime) { for(;iTmpDlyTime>0;iTmpDlyTime--); //必须用volatile }
建议延时用编译器自带的延时函数,在avr/delay.h.
3、在HEX文件内,箭头向上的代码是如何产生的? 这是中断向量,没有使用的中断跳转到默认的__bad_interrupt
00000000 <__vectors>: 0: 0c 94 38 00 jmp 0x70 ; 0x70 <__ctors_end> 4: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 8: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> c: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 10: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 14: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 18: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 1c: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 20: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 24: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 28: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 2c: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 30: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 34: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 38: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 3c: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 40: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 44: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 48: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 4c: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 50: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 54: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 58: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 5c: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 60: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 64: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 68: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt> 6c: 0c 94 55 00 jmp 0xaa ; 0xaa <__bad_interrupt>
|