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.

[参考译文] TMS320F280039:未通过程序存储器的 CRC 校验

Guru**** 2393265 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1490979/tms320f280039-failing-crc-check-on-program-memory

器件型号:TMS320F280039

工具与软件:

我将链接器配置为在几个段上生成存储器 CRC、如 附录 C 中的《TMS320C28x 汇编语言工具》手册中所述
代码(如所附最小项目中的代码)主要是手册的副本、但有一些更改

没有问题、直到被测部分包含了测试代码 应用 、生成错误的 CRC。
我考虑了对原始代码的(小的)更改是否具有破坏性。 但是、其他存储器区中的结果始终是正确的、并且在 PC 版本上处理同一组二进制数据时也是如此。

测试方法:

  • 构建和加载示例项目
  • ref_check_CRC()gen_crc()调用之前/之后添加断点、该断点用于链接器生成的每个 CRC:出错时、生成的 CRC 与预期的 CRC 不同

注意:

  • 故障段是只读的、执行过程中不会发生任何变化
  • 为了确保:我将故障部分保存到磁盘为二进制文件、并在其上运行为 PC 重新编译的相同 CRC 代码、结果正确
  • 我的代码没有活动的 printf()。 然而、启用它们的代码也会产生一些段 CRC 错误-还不知道原因
  • 在随附的测试代码中添加了一条指令#pragma SET_CODE_SECTION(".crc_code")、当启用后会在另一个段中移动 CRC 计算:这会使.text该段的 CRC 正常工作

有人发现了我在示例中忽略的巨大错误吗?

e2e.ti.com/.../fcrc.zip

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

    我假设添加的断点是一个软件断点。 您可以尝试使用硬件断点吗? SW 断点将交换出  包含 ESTOP 指令的指令。 CCS 都是在幕后完成这些操作、但如果您直接读取存储器、则可以将其用作 ESTOP。  HW 断点会监视程序总线、而不是交换指令。

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

    Lori、你绝对是对的:这是我的巨大错误!

    谢谢

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

    太棒了——我不得不考虑一下 感谢您的更新。