打印
[AVR单片机]

IAR AVR 4.20A 编译器的Optimization level设置问题

[复制链接]
4790|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qks5201314|  楼主 | 2009-3-31 09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在用如标题所示的编译器进行AVR atmega8软件编写调试的时候遇到了一些问题,因为atmega8的
flash只有8K,现在要用此单片机实现的功能比较多,做到后面功能的时候发现flash的空间已经不足了,查看编译设置option知道可以通过设置Optimization level来解决此问题,原来设置的是None (Best debug support),编译后的代码比较大,接近8K了,后来索性直接设置为High (Maximum optimization),这样设置后发现编译后的代码变为5K了,非常开心,结果把可执行文件写到单片机中运行的时候发现程序运行不正常了,数码管乱跳,设置为Low的时候代码大小和NONE差不多,单片机运行无恙;

请朋友们帮忙分析下可能是什么原因引起的,
注:High (Maximum optimization) 
下面包含的6个选项都被我选上了

相关帖子

沙发
stm32f100| | 2009-3-31 12:46 | 只看该作者

代码编写不规范,经不起优化

代码编写不规范,经不起优化。

典型例子:
for(uint8 i=0;i<100;i++);

本意是作一小段延时,实际上根本达不到延时效果。
此段代码是空循环,对后面代码执行没有任何影响,会被编译器直接KILL掉。

正确写法是for(volatile uint8 i=0;i<100;i++);

或者使用编译器自带延时函数。

使用特权

评论回复
板凳
qks5201314|  楼主 | 2009-3-31 22:02 | 只看该作者

IAR AVR 4.20A 编译器的Optimization level设置问题

现在测试的时候发现去掉下面6个选项中的"clustering of variables"编译后的文件运行就没有问题了,另外我之前的程序中的所有全局变量都用volatile 定义的,结果是一样的,请朋友们再帮忙看下,3Q

使用特权

评论回复
地板
qks5201314|  楼主 | 2009-4-1 14:19 | 只看该作者

IAR AVR 4.20A 编译器的Optimization level设置问题

问题绕开了,现在把最高优先级时候的6个选项全部打开了,发现程序的异常主要会影响定时器的精度,现在把定时器的预置值加了个固定的经验偏差值,这样测试下来没有发现有什么异常了,不知道是否会有什么隐患,朋友们指教。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

7

帖子

0

粉丝