ZHCU755D August   2022  – December 2022

 

  1.   说明
  2.   资源
  3.   特性
  4.   应用
  5.   5
  6. 1系统说明
    1. 1.1 关键系统规格
  7. 2系统概览
    1. 2.1 方框图
    2. 2.2 设计注意事项
      1. 2.2.1 构建块
      2. 2.2.2 闪存分区
      3. 2.2.3 LFU 切换概念
      4. 2.2.4 应用程序 LFU 流程
  8. 3硬件、软件、测试要求和测试结果
    1. 3.1 硬件要求
    2. 3.2 软件要求
      1. 3.2.1 软件包内容
      2. 3.2.2 软件结构
    3. 3.3 TIDM-DC-DC-BUCK 简介
    4. 3.4 测试设置
      1. 3.4.1 使用 CCS 将自定义引导加载程序和应用程序加载到闪存
    5. 3.5 测试结果
      1. 3.5.1 在 CPU 上运行控制循环时运行 LFU 演示
      2. 3.5.2 在 CLA 上运行控制循环时运行 LFU 演示
      3. 3.5.3 CPU 上的 LFU 流程
      4. 3.5.4 CLA 上的 LFU 流程
      5. 3.5.5 假设
      6. 3.5.6 为 LFU 准备固件
      7. 3.5.7 LFU 编译器支持
      8. 3.5.8 稳健性
      9. 3.5.9 LFU 用例
  9. 4FOTA 示例
    1. 4.1 摘要
    2. 4.2 引言
    3. 4.3 硬件要求
    4. 4.4 软件要求
    5. 4.5 运行示例
  10. 5设计和文档支持
    1. 5.1 软件文件
    2. 5.2 文档支持
    3. 5.3 支持资源
    4. 5.4 商标
  11. 6术语
  12. 7关于作者
  13. 8修订历史记录

LFU 编译器支持

本节介绍了如何利用编译器支持实现 LFU。

  1. LFU 支持所需的编译器版本为 21.6.0.LTS 或更高版本。
  2. 假设 BANK0_FLASH 构建配置是旧固件,则需要提供指向其输出可执行文件的路径,作为 BANK1_FLASH 构建配置的参考映像。这将允许编译器识别公用变量及其位置,以及识别新变量。这在 BANK1_FLASH 构建配置工程规格中按如下方式实现(对于 F28004x):
    --lfu_reference_elf=${CWD}\..\BANK0_FLASH\buck_F28004x_lfu.out

    同样,对于 F28003x,--lfu_reference_elf=${CWD}\..\BANK0_FLASH\buck_F28003x_lfu.out

  3. 编译器为变量定义了 2 个新属性,分别称为 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;
  4. 如果用户如上所述将 BANK0_FLASH 映像作为参考映像来编译 BANK1_FLASH 配置,则生成的 .map 文件将包含与“preserve”变量对应的 .TI.bound 段。此外,如果用户使用“update”属性指定变量(C28x 端或 CLA 端),则 .map 文件将包含单个 .TI.update 段(其中集合了所有“update”变量)。它们将不会放在 .bss 或 .data 或 .bss_cla 段中。用户需要在链接器命令文件中定义和分配 .TI.update 段。
  5. 为了让应用程序开发人员处理起来更轻松,可以使用不同的 LFU 模式。默认模式称为 preserve不要与上述相应的变量属性混淆),在 BANK1_FLASH 构建配置工程规格中明确指定如下:
    --lfu_default=preserve

    此模式具有以下属性:

    1. 如果提供了参考()映像,则不需要将公用变量指定为 preserve。这将是公用变量的默认属性,RTS 库将会在 LFU 初始化例程中初始化它们。这有助于保持状态。
    2. 没有指定任何属性的任何新变量将会得到分配地址,但这些变量也会在热启动 LFU 例程中初始化。如果用户希望 LFU 初始化例程初始化新变量,则需要使用 update 属性声明新变量。
  6. 本版本编译器支持的 LFU 模式的完整列表称为“none”和“preserve”。它们具有以下属性:
    1. none:默认情况下,不保留任何全局变量和静态变量地址,也不在热启动期间初始化任何变量。
      1. 如果明确指定了“preserve”属性,则保留变量的地址。
      2. 如果明确指定了“update”属性,则在热启动期间初始化变量的值。地址可以在内存中移动。
    2. preserve:保留在参考 ELF 中找到的所有全局变量和静态变量地址,除非为变量指定了“update”属性。
      1. 无需为公用变量指定“preserve”属性。如果为参考 ELF 中的变量明确指定了“preserve”属性,则其行为与未指定此属性时的行为相同。
      2. 如果明确指定了“update”属性,则在热启动期间初始化变量的值。否则,不会在热启动期间初始化。在这两种情况下,地址都可以在内存中移动。
  7. RTS 库提供了一个 LFU 初始化例程 (__TI_auto_init_warm())。它根据上述规则初始化任何新变量。
    1. 该例程执行 C28x CPU 端全局变量和静态变量的初始化,包括零初始化(默认)和非零初始化(如果指定了非零值)。
    2. 该例程只执行 CLA 端全局变量和静态变量的零初始化,不支持 CLA 端全局变量和静态变量的非零初始化。即使编译器不支持在启动 C 初始化例程中进行 CLA 端全局变量和静态变量的初始化(零或非零),它的确也支持在 __TI_auto_init_warm() 中进行零初始化
    3. 如前所述,该例程不受 NOINIT pragma(应用于链接器命令文件中的一个或多个段)的影响。

有关更多信息,请参阅 TMS320C28x 优化 C/C++ 编译器用户指南的 LFU 部分。