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



第二次升级:



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



第二次升级:



您好:
第二次升级后、变量 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