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.

[参考译文] 编译器/TMS570LS1114:重新编译时、引导加载程序代码发生变化

Guru**** 2394305 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/908364/compiler-tms570ls1114-bootloader-code-changes-with-recompile

器件型号:TMS570LS1114

工具/软件:TI C/C++编译器

我开发了用于远程软件更新的引导加载程序(Hercules LS1114)。

除了在我对主代码段进行更改(我使用 CRC 校验)时我的引导加载程序代码段正在更改外、一切都正常。 即引导加载程序代码与主代码无关。

第一个引导加载程序段中  

  闪存 API:

  {

          flash.obj (.text)

 

          crc16.obj (.text)

 

          fapi_UserDefinedFunctions.obj (.text)

 

    --library= F021_API_CortexR4_be.lib

  }

与引导加载程序关联的所有代码/库、因此在引导加载程序代码段之外没有有意引用。

我假定随附的 F021闪存库定义了一些全局变量或对 C 库的引用,当我向主代码段添加新代码时,会导致引导加载程序中的代码发生变化。

目的不是在固件更新期间更新引导加载程序、如果在闪存更新期间出现问题、我有一些智能措施来保护更新过程、 即、我首先将新固件下载到单独的闪存区域、然后在将新代码传输到主代码空间区域之前进行验证。

如何解决此问题? 欢迎提出任何建议。

Rob

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Rob:

    主代码如何更改引导加载程序段? 引导加载程序已预编程到闪存中、引导加载程序可以使用闪存中存储的数据或由主函数 FEE 提供的数据、但引导加载程序不使用主应用程序中定义的任何变量。  

    CRC16()计算包含主应用程序代码的闪存扇区(整个扇区)内容的 CRC。 返回的 CRC 值受主应用程序代码变化的影响、但不应影响 crc16()的 obj。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 QJ、
    当我对代码不同版本的两个.bin 文件进行比较时、我可以看到一些 F021_API_CortexR4_be 代码在 bootocode 段中发生了变化。  看起来它引用的库是外部函数还是 RAM 地址? 这就是为什么当我更改主代码段时、此段的 CRC 会发生变化?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bob、您好!

    我想您使用闪存 API 来擦除闪存扇区并将应用代码编程到已擦除的闪存扇区、并将状态编程到已擦除的闪存扇区或 EEPROM (组7)。  

    CRC16()是否使用 TMS570 CRC 硬件模块? CRC16()是否用于计算闪存内容的 CRC? 还是用于计算来自引导加载程序主机的消息块的 CRC?

    映射文件之间是否有差异?