ZHCU803B August   2020  – September 2022 TMS320F280033 , TMS320F280034 , TMS320F280034-Q1 , TMS320F280036-Q1 , TMS320F280036C-Q1 , TMS320F280037 , TMS320F280037-Q1 , TMS320F280037C , TMS320F280037C-Q1 , TMS320F280038-Q1 , TMS320F280038C-Q1 , TMS320F280039 , TMS320F280039-Q1 , TMS320F280039C , TMS320F280039C-Q1 , TMS320F280040-Q1 , TMS320F280040C-Q1 , TMS320F280041 , TMS320F280041-Q1 , TMS320F280041C , TMS320F280041C-Q1 , TMS320F280045 , TMS320F280048-Q1 , TMS320F280048C-Q1 , TMS320F280049 , TMS320F280049-Q1 , TMS320F280049C , TMS320F280049C-Q1

 

  1.   C2000 MCU 在无器件复位时的实时固件更新
  2.   商标
  3. 1引言
  4. 2关键创新
  5. 3LFU 的构建块
  6. 4建议解决方案的详细信息
    1. 4.1 闪存组组织
    2. 4.2 影响性能的 LFU 概念和因素
    3. 4.3 LFU 的硬件支持
      1. 4.3.1 独立闪存组
      2. 4.3.2 中断向量表交换
      3. 4.3.3 RAM 块交换
      4. 4.3.4 硬件寄存器标志
    4. 4.4 LFU 编译器支持
    5. 4.5 应用程序 LFU 流程
  7. 5结果和结论
  8. 6修订历史记录

LFU 编译器支持

编译器为 LFU 提供以下支持:

  1. LFU 初始化例程,名为 __TI_auto_init_warm
  2. 变量的 LFU 属性
  3. LFU 模式

编译器要求在构建新的固件可执行文件时将旧固件可执行文件作为参考映像提供。这允许编译器识别公用变量及其位置,以及识别新变量和删除的变量。

编译器为变量定义了 2 个新 LFU 属性,分别称为 preserveupdate。“Preserve”用于在固件升级期间维持公用变量的地址。“Update”用于指示编译器可以无约束地为其分配地址的新变量,还在编译器的 LFU 初始化例程(名为 __TI_auto_init_warm())期间进行初始化。下面列出了如何使用这些属性的示例:

float32_t __attribute__((preserve)) BUCK_update_test_variable1_cpu;

float32_t __attribute__((update)) BUCK_update_test_variable2_cpu;

使用上述分配,生成的存储器映射文件包含与 preserve 变量对应的“.TI.bound”部分和一个收集所有更新变量的“.TI.update”部分。

为了让应用开发人员处理起来更轻松,可以使用不同的 LFU 模式。默认模式称为 preserve(不要与上面描述的相应变量属性混淆),它具有以下属性:

  • 如果提供了参考()映像,甚至不需要将公用变量指定为 preserve。这将是常用变量的默认属性,并且它们不会在编译器的 LFU 初始化例程中进行初始化。因此,它会保持该状态。
  • 未指定任何属性的所有新变量都将被分配地址,但这些变量不会在编译器的 LFU 初始化例程中初始化。编译器的 LFU 初始化例程仅在使用 update 属性声明时才初始化变量。