总结归纳一下,关于IAR的程序优化设置,大家一起来讨论
IAR AVR 的程序优化,大家都有什么心得呢?看论坛里的帖子,大部分说到的都只是两点:
1、中断里面修改到的变量需要用volatile
2、类似
while(m)
;
的结构需要更改为
while(m)
__delay_cycles(1);
那么除了以上两点以外,还需要注意哪些方面呢?
我现在手头上的一个东西,用了上面的两个办法都还是不行,程序会跑飞
此外,在使用volatile的时候,有很多细节
比如,两个volatile变量不能同时在赋值号的两边
比如
volatile unsigned char i, j;
void test(void)
{
i = j;
}
这样是不行的
那么就需要用
volatile unsigned char i, j;
void test(void)
{
unsigned char temp;
temp = i;
j = temp;
}
这一类的细节大家也讨论一下啊,这一类的资料好像比较少,大部分谈volatile的资料都是说概念,具体实施细节很少人谈到 恩,这个太需要了。 怎么大家现在都不用优化了吗??都来讨论讨论呀 用了IAR最高级别优化,代码和速度分别测试了一下,结果速度方式下代码更小.没有碰到过问题.
注意局部便量多时要改变堆栈设置. 要怎么改变堆栈设置呢??Oliver能不能说清楚一些? 顶起来,大家一起来讨论讨论~~ 我是改了CSTACK,默认是32个,用来存临时变量,堆栈数据的.好象是太小,后来改成0x32了.
RSTACK是保存返回地址的,默认16,可以8级中断/函数调用.我改成24了. 学习. mark 这贴子要顶起来啊,有经验的朋友进来说说呀!~~~~`
个人觉得用编译器中的优化只是其一,其二就程序自身的编写方式,尽可能编写出简单高效的代码,个人在网上找过一点点资料,找个时间总结一下放上来; ding mark 大家探讨一下。我正转向IAR。打算放弃keil。 mark IRA学习者顶起来~ 顶一个 编译器优化问题 是个大问题 代码优化程度过高也是有风险的,选择中等级的好些吧 细节确实很头疼!
页:
[1]