2017-01-02 47 views
-1

我搜索了很多關於這個問題,我還沒有找到任何明確的答案。如您所知,AVR微控制器例如Atmega128有一個Flash存儲器,可分爲Bootloader和Application存儲器。我調整了每個參數並加載了我的啓動和應用程序加載。有什麼方法(使用代碼或從終端)知道每個內存的確切大小和可用的字節?在AVR中的引導加載程序和應用程序內存大小

有些人可能會提到avr大小的命令。這個命令給了我整個閃存的大小。我想區分引導和應用程序內存。

由於提前

+0

您保留和保護的塊可能與您使用的塊一樣重要,但要確定後者花了一些時間來了解objdump可以告訴您什麼。 –

回答

0

你有兩個固件,引導程序和應用程序,每次都會有自己的大小。

對於每個版本,請將連接器標誌添加到鏈接命令行-print-memory-usage以使其打印使用多少閃存和RAM。 (該標誌不會被每一個工具鏈支持,但AVR可能會支持它)

更多信息:https://stackoverflow.com/a/41389481/2002198

或者,你可以用avr-size獲得內存使用情況:

avr-size -C --mcu=atmega168 project.elf 

參考:http://www.avrfreaks.net/forum/know-code-size-and-data-size

還有其他一些細節需要注意:根據您加載應用程序的方式(flash寫入vs引導加載),您將使應用程序與FLASH塊(通常2 kibs)。根據您的工作方式,您的應用程序將擁有較小的可用閃存。

0

只是閱讀手冊:

Boot區的起始的實際地址是阻止 - 由BOOTSZ開採融合

,你會找到答案。

+0

是的,我知道。我正在詢問如何在加載一些代碼後知道可用的空閒字節。例如我的啓動內存現在是4KB,而且我已經加載了一些函數,沒有清楚的方法來知道內存的空閒部分有多大。 –

+0

您可以從軟件讀取熔絲位,如第281頁的「從軟件讀取熔絲位和鎖定位」部分所述。 – AterLux

0

如果您已經構建了引導加載程序,那麼您應該能夠通過仔細查看構建引導加載程序的步驟或通過檢查引導加載程序的HEX file來判斷其大小。 HEX文件確切地說明了它寫入的代碼的地址。