AVR的程序存储器

时间:2013-06-27 07:16:07

标签: avr atmel

我在C中为ATmega128和

编写了一个代码

我想知道我在代码中所做的更改如何影响程序存储器。

更具体地说,让我们考虑代码与那个代码类似:

   d=fun1(a,b);
   c=fun2(c,d);

我在代码中所做的更改是我更多次调用相同的函数,例如:

   d=fun1(a,b);
   c=fun2(c,d);
   h=fun1(k,l);
   n=fun2(p,m);
   etc...

我在AtmelStudio 6.1上构建了解决方案,并且我看到了程序存储器中的更改。

在没有构建解决方案的情况下,是否可以预见代码中的字符将如何影响程序存储器?

谢谢!

1 个答案:

答案 0 :(得分:0)

一般来说,使用C / C ++几乎不可能(这意味着努力不会得到回报)。

在您的简单情况下(呼叫数量增加),您可以确定每个呼叫的指令数量,并乘以数字。如果编译器没有在所有情况下内联 ,并且不在更高级别应用优化,那么这只是正确的。

如果您升级到较新的gcc版本,这些计算可能会出错。

通常,在比较两个版本(相同的编译器版本,相同的优化)时,您只能得到确切的数字。 avr-sizeavr-nm为您提供所有信息,例如按大小比较函数。您可以自动完成此任务(通过将输出转换为.csv文件),并使用电子表格或diff查找更改。

这种方法通常只会付出代价,如果你必须将一个程序压缩到一个较小的设备(例如从4k闪存到2k - 你已经有128k闪存,这是非常多的。)

这个过程令人沮丧,因为如果你在C中应用相同的设计模式并且差异很小,那么它可能导致不同的大小:所以从C / C ++开始,你无法真正预测会发生什么。