【问题标题】:BootLoader and Application memory size in AVRAVR 中的 BootLoader 和应用程序内存大小
【发布时间】:2017-01-02 12:33:43
【问题描述】:

我搜索了很多关于这个问题,但我还没有找到任何明确的答案。 如您所知,AVR 微控制器,例如Atmega128 有一个 Flash 存储器,可分为 Bootloader 和 Application memory。我已经调整了每个参数并加载了我的启动和应用程序负载。有没有办法(使用代码或从终端)知道每个内存的确切大小和可用字节????

有些人可能会提到 avr-size 命令。这个命令给了我整个闪存的大小。我想区分启动内存和应用内存。

提前致谢

【问题讨论】:

  • 您保留和保护哪些块可能与您使用哪些块一样重要,但要确定后者,请花一些时间了解 objdump 可以告诉您什么。

标签: c embedded microcontroller avr avrdude


【解决方案1】:

您有两个固件,引导加载程序和应用程序,每个都有自己的大小。

对于每个构建,将链接器标志添加到链接命令行 -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 块(通常为 2 kib)对齐。根据您的操作方式,应用程序的可用闪存会更小。

【讨论】:

    【解决方案2】:

    只需阅读手册:

    Boot Flash 部分的实际起始地址是确定的 由 BOOTSZ 保险丝开采

    你会找到答案的。

    【讨论】:

    • 是的,我知道。我在问如何在加载一些代码后知道可用的空闲字节。例如我的启动内存现在是 4KB,而且我已经在里面加载了一些函数,没有明确的方法知道内存的空闲部分有多大。
    • 您可以从软件中读取保险丝位,如第 281 页的“从软件中读取保险丝和锁定位”部分所述。
    【解决方案3】:

    如果您已经构建了引导加载程序,那么您应该能够通过仔细查看为构建它执行的步骤或检查引导加载程序的HEX file 来判断它有多大。 HEX 文件准确地说明了其中的代码写入的地址。

    【讨论】:

      猜你喜欢
      • 2012-01-28
      • 1970-01-01
      • 2018-06-16
      • 2011-09-27
      • 2012-05-06
      • 1970-01-01
      • 2020-08-30
      • 2017-12-15
      • 1970-01-01
      相关资源
      最近更新 更多