近日在韦东山的LEDS时,发现
发现循环点亮LED,烧写程序后,上电发现 LED全部点亮;
苦思不得原因:最后把延时 程序延时 改了好长时间还是不行,利用嵌套,循环实现延时,还是间歇点亮不完全。
最后查看Makefile文件:
CFLAGS := -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -ffreestanding
leds.bin : crt0.S leds.c
arm-linux-gcc $(CFLAGS) -c -o crt0.o crt0.S
arm-linux-gcc $(CFLAGS) -c -o leds.o leds.c
arm-linux-ld -Ttext 0x0000000 crt0.o leds.o -o leds_elf
# arm-linux-ld -Tleds.lds crt0.o leds.o -o leds_elf
arm-linux-objcopy -O binary -S leds_elf leds.bin
arm-linux-objdump -D -m arm leds_elf > leds.dis
clean:
rm -f leds.dis leds.bin leds_elf *.o
注意: Makefile文件中的 -O2选项使用了二级优化,除了空间和速度交换的优化选项,这样几乎实现所有的优化,可能把 所有的空循环程序都优化掉了,这样 延时的空循环肯定被优化掉了,延时不起作用,这样LED几乎通过被点亮。
解决措施:
我们只需把 -O2的优化选项去掉即可。
完成之后OK!
阅读(1012) | 评论(0) | 转发(0) |