This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/TM4C1294NCPDT:为什么引导加载程序设置为在加载时初始化全局变量?

Guru**** 2468610 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/673121/compiler-tm4c1294ncpdt-why-are-boot-loaders-set-to-initialize-global-variables-at-load-time

器件型号:TM4C1294NCPDT

工具/软件:TI C/C++编译器

在 USB 串行器件固件升级教程/指南中、您需要设置引导加载程序链接器设置、以便 在加载时初始化全局变量(-ram_model、-cr)。

但是、阅读《Arm 编译器用户指南 6.10.3.3》会说明替代运行时初始化(-rom_model)"在 应用程序从刻录到 ROM 的代码运行的任何系统中使用此方法"。

DFU 教程中的项目设置似乎与此语句相矛盾。 正在升级的项目获得用于应用程序"烧写到 ROM"的设置。 永久引导加载程序不会获得此设置。

为什么 DFU 教程具有这些设置? 为什么这些设置看起来与编译器指南中的语句相矛盾?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    虽然我和"宠物摇滚"一样乐于助人(在这里)-您的发帖证明"出色!"     (即使是这个岩石上的人)

    非常详细-通过(可选/可识别)来源证明合理-并在其目标中"清晰"...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Peter:
    通常、闪存引导加载程序存在于闪存中、但随后会复制到 RAM 中执行。 (否则、它不能擦除或重新编程它所在的闪存组。) 因此、引导加载程序从 RAM 中"运行"、并且适合使用--ram_model 进行变量初始化。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Peter、

    通过 USB 串行器件固件升级教程、您是否参考了用于 USB 引导加载程序的 TivaWare 示例、如 boot_serial?

    对于闪存引导加载程序、 我的理解是、使用 ram_model 功能是因为 Flash 引导加载程序应如何在加载时初始化所有变量、因为"在加载时初始化变量可通过减少引导时间并保存初始化表使用的存储器来提高性能"这是我的理解 阅读 ARM 编译器指南中详述 ram_model 特性的第6.10.3.5节后了解。

    请注意、闪存引导加载程序与 ROM 引导加载程序不等效、ROM 引导加载程序在 TM4C 闪存中没有数据时执行。 因此、它不仅仅是从刻录到 ROM 中的代码运行(尽管它确实利用了 ROM API)。

    关于通过引导加载程序加载项目的原因、请使用 ROM_MODEL 设置、 这些项目不需要快速初始化、并且应该在运行时加载变量、在运行时最好使用 ROM_MODEL 选项、正如我们所有非引导加载程序示例中所做的那样。

    顺便说一下、未来的读者可以参考 ARM 编译器用户指南、该指南是 TI 的特定指南、位于 www.ti.com/.../spnu151m.pdf

    另一个有用的资源可能是 ARM 汇编语言工具用户指南: www.ti.com/.../spnu118u.pdf 、其中第3.3.2节提供了一些有关 RAM 与 ROM 模型的更多信息。

    希望这有助于解决您的问题、如果您有任何疑问或后续问题、请告诉我。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗯,我想我的答案就是背景比 Bob 的非常精确的回答过于详细。 )
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    赦免-但同意。   "有空间"和"岩石住宅"。   (尽管正在... 快速)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我使用的是从 wiki 上的教程 processors.wiki.ti.com/.../TI-RTOS_USB_DFU 下载的引导加载程序

    它可与 RTOS 示例项目"USB 串行器件"配合使用。

    最终目标是拥有基于以太网的固件更新程序。 中间的目标是了解本指南中设置的内容。

    安装了 TivaWare、其中包含一个名为 boot_EMAC_FLASH 的示例。 我希望它的配置遵循相同的指令。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为什么引导加载程序从 SRAM 运行?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您不能对正在执行的闪存组中的任何扇区进行编程。 从 RAM 运行允许引导加载程序对闪存的任何扇区进行重新编程。