打印
[开发工具]

关于IAR的最高级别优化

[复制链接]
8010|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
colaring|  楼主 | 2008-9-4 17:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    用的IAR 4.42A 开发STM32F103 开始是调试模式没有优化,代码长度104k 开了最高级别代码大小优化后,一下子变成了84k,开机运行挺正常,但是运行一会TFT就花屏。。死机。。。
    怎么回事?除了不优化,有什么好办法解决,这种优化产生的错误是不是我代码写的不规范造成的?或者其他什么原因,知道的大侠说一声
沙发
香水城| | 2008-9-4 17:04 | 只看该作者

这种事情可能IAR的人也说不清

你最好一个模块一个模块地进行优化,或者找代码最大的模块逐步优化,然后看结果,慢慢来,不能急。

使用特权

评论回复
板凳
aes_sea| | 2008-9-4 17:07 | 只看该作者

re:

查一下你的延时之类的函数,如果是靠循环体来实现的,循环变量是volatile 吗?

使用特权

评论回复
地板
colaring|  楼主 | 2008-9-4 19:05 | 只看该作者

基本没用循环延时

除了液晶初始化,其他程序没有靠循环延时的,开机正常说明液晶初始化ok,剩下的主体程序是菜单,菜单状态机没用volatile....

使用特权

评论回复
5
colaring|  楼主 | 2008-9-4 19:08 | 只看该作者

请问香主

如何一个模块一个模块优化?(指的用iar)

使用特权

评论回复
6
香水城| | 2008-9-4 22:28 | 只看该作者

请查看IAR EWARM手册

记得有一个#pragma可以打开或关闭优化。

使用特权

评论回复
7
Again_gyf| | 2008-9-5 08:39 | 只看该作者

RE

只有几种固有的选项!
#pragma optimize=param[ param...]
Parameters
balanced|size|speed Optimizes balanced between speed and size,
optimizes for size, or optimizes for speed
none|low|medium|high Specifies the level of optimization
no_code_motion Turns off code motion
no_cse Turns off common subexpression elimination
no_inline Turns off function inlining
no_tbaa Turns off type-based alias analysis
no_unroll Turns off loop unrolling
no_scheduling Turns off instruction scheduling

也可以用编译选项里的优化选项

使用特权

评论回复
8
pheavecn| | 2008-9-5 09:13 | 只看该作者

能打开最高优化,仍按预期稳定运行的代码,才是好代码。

使用特权

评论回复
9
wlq_9| | 2008-9-5 09:43 | 只看该作者

嘿嘿

还是检查代码吧,最高优化等级的时候,要求代码写得相当OK.一些该volatile的地方该加上.
我一般都是随便用,觉得程序大了就提高优化等级,最高优化从来没出过问题.

使用特权

评论回复
10
colaring|  楼主 | 2008-9-5 10:33 | 只看该作者

...

刚毕业,第一次编这么大项目,没经验啊.....

使用特权

评论回复
11
kgp0213| | 2008-11-21 15:50 | 只看该作者

应该是LCD初始化的时候延时靠循环体来实现的,

循环变量没有volatile 造成高级优化是那些延时被忽略掉,从而lcd工作不稳定造成的。
请问lz如何解决的?

使用特权

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

本版积分规则

44

主题

156

帖子

1

粉丝