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.

[FAQ] [参考译文] [常见问题解答]如何将应用程序从 RAM 正确迁移到闪存

Guru**** 1133960 points
Other Parts Discussed in Thread: C2000WARE, UNIFLASH
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1323905/faq-how-to-correctly-migrate-an-application-from-ram-to-flash

主题中讨论的其他器件:C2000WAREUNIFLASH

我想将我当前从 RAM 运行的应用程序移动到闪存、但我遇到了问题。 如何正确地从闪存运行我的应用程序?

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

    要将配置为从 RAM 运行的现有应用迁移到基于闪存的链接器配置、请执行以下步骤:

    1. 用闪存连接器命令文件替换 RAM 连接器命令文件。 有关基于闪存的连接器命令文件的示例、请参阅device_support\<device>\common\cmd目录。
    2. 修改基于闪存的链接器命令文件时、请确保将任何已初始化的段映射到闪存区域。
    3. 确保为闪存引导配置引导模式引脚。 这就告诉引导 ROM 在引导代码执行完成后将执行重定向到编程到闪存存储器中的应用程序。 有关引导模式配置的更多信息、请参阅器件数据表中的详细说明⏵器件引导模式。
    4. 当器件配置为闪存引导BEGIN时、引导 ROM 在引导代码执行结束时将执行重定向到闪存入口点位置(在 TI 提供的闪存链接器命令文件中定义)。 确保在到代码初始化(例如_c_int00)函数的闪存入口点有一个分支指令。 在 C2000Ware 示例中、在codestartbranch.asm文件中指定了应用起点代码。
    5. 为了实现闪存执行的最佳性能、请根据器件数据表中指定的器件工作时钟频率配置闪存等待状态。 此外、启用预取模式和数据缓存模式。 调用Flash_initModule() driverlib 函数可实现这些步骤。 请注意、初始化闪存模块的代码必须从一个 RAM 位置执行。 这通过将闪存初始化函数分配到.TI.ramfunc部分来完成。 在链接器命令文件中、将此部分映射到闪存进行加载、并将 RAM 映射到执行。 C2000Ware 中提供的示例 cmd 文件展示了如何正确执行此操作。
    6. 对于任何需要0或1等待状态性能的函数、请确保映射到 RAM 以在链接器命令文件中执行、类似于闪存初始化函数。 .TI.ramfuncTI 提供的闪存链接器命令文件中的部分可以实现这一目的。
    7. 使用ALIGN链接器命令文件中的指令、在映射到闪存时将所有代码和数据段对齐到128位地址边界。
    8. 对于 EABI 可执行格式、请type=NOINIT在链接器命令文件中将映射到 RAM 的所有未初始化部分定义为 NOINIT 段(使用""指令)。
    9. 请确保为闪存应用程序映像正确地对 ECC 位进行编程。 将 Code Composer Studio 闪存插件或 UniFlash GUI 中的 AutoEccGeneration 选项保持启用状态。