2017-01-02 101 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文件确切地说明了它写入的代码的地址。