Chinaunix首页 | 论坛 | 博客
  • 博客访问: 295371
  • 博文数量: 47
  • 博客积分: 1411
  • 博客等级: 上尉
  • 技术积分: 500
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-23 09:10
文章分类

全部博文(47)

文章存档

2009年(3)

2008年(4)

2007年(14)

2006年(26)

我的朋友

分类: LINUX

2006-12-19 21:35:56

以前用MontaVista的toolchian编译的好好的bootloader, 用DevTek带的arm-linux就有问题, 而且是莫名其妙。出问题的代码如下:
register int i;
for (i = 0; i < j; i++) ; // j 是运行期变量
这 段代码本意是自循环,达到delay效果。但是用arm-linux编译后, 这段代码死活不能delay(优化选项打开 -O2 -Os, 都试过)。当时就觉得相当奇怪,在尝试延长循环次数和其他方法无效后,只能-S 直接汇编。汇编的结果是这段loop被编译器直接remove掉了。当然不打开优化选项一点问题都没有,但bootloader哪能不优化呀。第一反应是 从编译选项上找问题, 但后来对比DevTek的bootloader, 发现i的声明被volatile修饰而非register后,一切ok。后来去GCC去找原因,至今没什么发现。
结合以前BSP 里的driver bug和如今toolchian的异常,给人一启发:千万别过于依赖别人的东西,需要一些怀疑精神。
阅读(1801) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~