ZHCU876Z July 2001 – October 2023 SM320F28335-EP
可能需要设计高可用性系统,以便可以在系统脱机的情况下升级固件。示例包括为数据中心、医院和军事应用的系统。在系统运行期间更新系统固件并开始使用新固件的功能称为实时固件更新 (LFU),也称为“热”启动。有关创建和调用自定义入口点来执行热启动的信息,请参阅采用 C2000 MCU 的实时固件更新参考设计 (TIDUEY4)。
C28x 和 CLA 编译器为使用 EABI 且基于 ELF 的固件映像提供 LFU 支持。该支持允许您可以切换到新的 LFU 映像,同时选择是保留、更新(重新初始化)还是添加从参考 ELF 二进制文件中读取的单个全局和静态符号。
为了支持 LFU,代码生成工具需要确保更新过程中不会发生系统复位,不会错过实时中断,并可以维持系统状态(全局和静态变量)。固件映像的程序和数据内存都可能需要更新。在热启动期间可以通过以下方式处理全局和静态变量:
.TI.bound
段。如果 .TI.bound 段在存储器中是连续的,链接器可以将这些段合并到单个输出段中,从而减少初始化这些段所需的 CINIT 记录数量。
(如果没有使用 --lfu_default 和任何属性来指定其他值,这将是默认值。但是,此默认值不适用于常量数据,常量数据需要显式使用 preserve 属性。).TI.update
输出段中。此段默认进行复制压缩(即,在热启动期间无需解压缩),这减少了 LFU 映像切换时间。--lfu_default=none
选项并且全局或静态变量既没有“preserve”属性也没有“update”属性时,才会发生这种行为。使用 LFU 支持时存在以下限制:
为支持 LFU 功能而提供的特征包括:
--lfu_reference_elf
编译器选项,它指向先前的 ELF 可执行二进制文件,用作获取全局和静态符号的内存地址列表的参考。请参阅节 2.3。--lfu_default
编译器选项,可用于设置在热启动期间如何处理全局和静态符号的默认值。请参阅节 2.3。preserve
属性,可在 C 代码中用于指定应保留的单个符号的地址。请参阅节 6.15.4。update
属性,可在 C 代码中用于指定在热启动期间应重新初始化的单个符号。请参阅节 6.15.4。