ZHCU755D August 2022 – December 2022
为 LFU 准备固件时的关键注意事项是运行连续性和 LFU 切换时间,运行连续性是通过状态的持续性来实现的,这意味着在固件升级期间将 RAM 中公用的静态变量和全局变量保存在相同的地址,并避免在新固件生效时重新初始化这些变量。对 LFU 的编译器支持用于实现状态的持续性。
激活新固件涉及从旧固件分支到新固件的 LFU 入口点、执行编译器的 LFU 初始化例程、到达新映像的 main() 内部以及执行任何其他初始化。此时会短暂禁用中断,执行需要禁用中断的初始化(例如中断向量更新、函数指针更新),然后再重新启用中断。这个最后的时间间隔被定义为 LFU 切换时间。
当有硬件支持交换闪存组 [2] 时,LFU 会被简化,其中任一闪存组都可以映射到固定地址空间,被视为运行的 闪存组。未运行的 闪存组映射到不同的地址空间,并且是更新的组。C2000™ MCU 当前不支持闪存组交换,因此,用户需要跟踪应用程序固件将驻留的闪存组,并在链接器命令文件中进行必要的分配和调整。
函数指针和中断向量需要在 main() 内重新初始化,因为它们在闪存组之间的位置不同。C2000™ MCU 支持大量中断向量(通常为 192 个),因此重新初始化所有中断向量不太现实。通常,只使用其中一小部分,其余的分配给默认向量。F28003x 器件包含 LFU 特定的硬件特性(中断向量交换、RAM 块交换),可缩短 LFU 切换时间。
如果阵列大小发生变化或向结构中添加了变量,则用户需进行适当管理,即在开发周期的早期使用 pragma 指令将阵列和结构放置在固定位置,但要有足够的余量来满足它们在将来固件中的潜在增长。如果采用这种方法,则只需要初始化新增字段。