Chinaunix首页 | 论坛 | 博客
  • 博客访问: 332303
  • 博文数量: 72
  • 博客积分: 1730
  • 博客等级: 上尉
  • 技术积分: 743
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-27 18:49
文章分类

全部博文(72)

文章存档

2012年(72)

我的朋友

分类: LINUX

2012-04-04 14:46:13

近日在韦东山的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!    
    
阅读(7892) | 评论(0) | 转发(3) |
给主人留下些什么吧!~~