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.
工具/软件:TI C/C++编译器
我在 Code Composer 中将 LCF 文件与 TI 的编译器一起使用、以生成 CRC 值、从而与安全库的"SL_CRC_Calculation"函数生成的值进行比较。 由于上下两个字被交换、这两个值不匹配。 文档"spna235"指出这是 TMS570_CRC64_ISO 算法的预期特性。 是否有我可以使用的算法没有此功能、或者有其他方法来纠正问题(除了在比较值之前交换代码中的字节顺序?)
谢谢你
问题代码...
LCF 段指令
.text :{}palign =8、crc_table (_my_crc_table、algoriter=TMS570_CRC64_ISO)> FLASH0 | FLASH1
运行时检查
RetVal =(_my_crc_table.recs[i]。crc_value == sl_crc_Calculate ((uint64*)_my_crc_table.recs[i]。addr、_my_crc_table.recs[i]。size / 8u)));
您好!
我认为您不需要为 RM57这个小端字节序器件换字。 对于 RM57、低32位字被存储在地址的低部分:
uint64值= 0x0123456789abcdef;假设这个64位字的地址为0x08001500
0x89abcdef 存储在0x08001500中
0x01234567存储在0x08001504中
从 sl_Calc_CRC()函数返回的值按照链接器生成的表的相反顺序返回。 在下图中、您可以看到(a)存储返回值的 RO 和 R1寄存器、(b)链接器表的存储器存储位置、以及(c)使用%llx 对两个值进行 printf 输出。 再搜索一下论坛之后、我发现了几个多年前的帖子、似乎提到了这一点、但没有列出使用标准链接文件指令的解决方案。
https://e2e.ti.com/support/microcontrollers/hercules/f/312/t/339833?TMS570-CRC64-ISO
http://e2e.ti.com/support/microcontrollers/hercules/f/312/p/104764/785765.aspx#785765
(a)
(b)
(c)
谢谢 Matt。
我知道 TMS570需要交换字、但这不适用于 RM57器件。
无论如何、我稍后将进行测试。
我认为这条说明... http://downloads.ti.com/docs/esd/SPNU118/a-note-on-the-tms570-crc64-iso-algorithm-stdz0756196.html 指出器件寄存器是小端字节序、但它期望将编译器设置为大端字节序。 根据我使用的初始代码示例、我将编译器设置为小端字节序。 这不是 RM57的典型情况吗?
谢谢、
Matt
Matt、您好!
我使用 LCF、全 CPU 模式下的 HW CRC 模块和 SDL 函数计算 CRC。 我注意到、LCF 在计算 CRC 之前交换了这些字。
在全 CPU 模式下使用硬件 CRC 的 CRC 值与 SDL 相同。
要比较 LCF 和 SDL 的 CRC 值、需要交换 LCF 的 CRC 值的高字和低字。
TMS570LC43x:
使用 LCF 的 CRC:
CRC 值= 0x1EB13F2C CA3C37CE、请交换高字和低字
2.使用 SDL 的 CRC
CRC 值= 0xCA3C37CE 1EB13F2C
RM57Lx
使用 LCF 的 CRC:0xCA3C38F2是低位字、0x1EBA8F97是高位字
CRC VALEE= 0x1EBA8F97 CA3C38F2 请交换上部字和下部字
2.使用 SDL 的 CRC
CRC VALEE= 0xCA3C38F2 1EBA8F97