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.

[参考译文] TMS320F28P550SG:在多个 LFU 期间添加变量

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1641757/tms320f28p550sg-adding-variables-during-multiple-lfu

器件型号: TMS320F28P550SG

您好、专家。

在多个 LFU 过程中、我遇到了这个问题:首先、添加了变量 g_u32Bank1NEW12;然后、在第二次升级期间添加了变量 g_u32Bank1NEW10。 第二次升级后、变量 g_u32Bank1NEW12 的地址被错误地发送出去。 我们应该如何设计来解决这个问题。

第一次升级:

1.png

3.png

5.png

第二次升级:

2.png

4.png

6.png

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

    您好:

    第二次升级后、变量 g_u32Bank1NEW12 的地址被错误地发送出去。 我们应该如何设计来解决这个问题。

    您是否打算让 g_u32Bank1NEW12 保留其先前的地址? 您需要使用“preserve“属性。  “Preserve“用于在固件升级期间维持公用变量的地址。 “update“用于指示编译器可以无约束地为其分配地址的新变量、还在编译器的 LFU 初始化例程(名为_TI_auto_init_warm ()) 期间进行初始化。

    此致、
    马特

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

    您好、Zhang、

    我想在这里强调几个要点:

    1. 能否指定您正在使用的编译器版本? 编译器版本 22.6.2.LTS 修复了许多 LFU 错误、强烈建议实现 LFU 的客户使用。 此外、25.11.LTS 不仅实现了上述错误、还实现了一个名为“all“的新 LFU 模式、该模式可通过设置--lfu_default=all 来启用(如果未分配--lfu_default,也是默认设置)。 在此模式下、用户无需显式设置变量即可保留或更新。 编译器会为用户进行处理。  有关详细信息、请参阅 https://www.ti.com/lit/spru514 用户指南中的表 2-1 --lfu_default=all 的说明

    但是、如果使用较旧版本的编译器、并且由于某种原因用户无法切换、则建议的模式为--lfu_default=preserve。 在该模式下、无需将现有变量标记为“preserve“。 但是、需要将新变量标记为“更新“。 在您的特定示例中、 g_u32Bank1NEW12 需要标记为第一个 LFU 的“update“、但对于第二个 LFU 不应将该变量标记为“update“(应直接删除该属性)。 对于  添加 g_u32Bank1NEW10 的第二个 LFU、应将其标记为“update“、但对于第三个 LFU、不应将其标记为“update“。  

    使用“update“变量、编译器的 _TI_auto_init_warm () 将在 LFU 期间管理这些变量的初始化、而无需在用户代码的 LFU 期间进行初始化。

    将 25.11.0.LTS 与--lfu_default=all 配合使用、可省去指定变量属性的额外麻烦。

    2.以上所有内容都适用于 C28 端变量。 对于 CLA 端变量(即在.cla 文件中定义和使用的变量)、存在一些限制。 目前、这些并未记录在编译器用户指南 (spru514) 中、但这将在修订版中解决。 限制是对于 LFU 和 CLA 端变量、仅支持“preserve“、不支持“update“。 换句话说、对于 CLA 端变量、编译器可以处理在 LFU 期间将现有变量保留在相同的地址、而无需重新初始化它们。 然而、对于 LFU 期间引入的新 CLA 变量(即“更新“变量)、编译器不会在_TI_auto_init_warm () 中执行初始化。 必须在用户代码中处理该问题。

    因此、对于 CLA“更新“变量、不应应用“更新“属性。

    3.另请注意、通常需要仔细处理将 DATA_SECTION 与 LFU 结合使用的情况。 根据特定用例、编译器可能会发出警告/错误、有许多情况可供选择。 作为一个简单的示例、您不能为变量指定 DATA_SECTION、也不能使用“update“属性指定它。

    同样 — 所有这些都在 22.6.2.LTS(及更高版本)中正确处理、因此如果您尚未执行、请移动。

    谢谢、

    Sira