2013-06-27 60 views
0

我已經寫了代碼下的ATmega128和AVR程序存儲器

我想知道怎麼樣,我的代碼影響的程序存儲器做的修改。

更具體,讓我們考慮代碼是類似於之一:

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上構建解決方案,我看到程序存儲器中的更改。

有沒有辦法預見,如果沒有建立解決方案,代碼中的chages如何影響程序內存?

謝謝!

+0

您是否在問預測程序將佔用多少程序內存空間?這通常很困難,取決於編譯器的(優化)設置。 – damage

+0

是損壞。這正是我所要求的。 謝謝 – Herc11

回答

0

一般來說,這是幾乎不可能使用C/C++(這意味着努力沒有得到回報)。

在您的簡單情況下(呼叫數量增加),您可以確定每個呼叫的指令數量,然後乘以數字。這隻會是正確的,如果編譯器沒有在所有情況下內聯,並且不在更高級別應用優化。

如果升級到更新版本的gcc版本,這些計算可能是錯誤的。

因此,通常情況下,只有在比較兩個版本(相同的編譯器版本,相同的優化版本)時才能得到確切的數字。 avr-sizeavr-nm爲您提供所有信息,例如按大小比較功能。您可以自動執行此任務(將輸出轉換爲.csv文件),然後使用電子表格或diff查找更改。

這種方法通常只會帶來好處,如果你不得不把程序壓縮到一個較小的設備中(例如從4k閃存到2k--你已經有128k閃存,這是相當多的)。

這個過程令人沮喪,因爲如果你在C中應用相同的設計模式並且差異很小,它可能會導致不同的大小:因此從C/C++中,你無法真正預測將會發生什麼。