工具/软件:Code Composer Studio
你(们)好
我需要计算 MSP430上固件版本的 CRC 校验和、该校验和应在固件更新前保持恒定(出于安全考虑)。 我知道 FRAM 的起始地址和结束地址、但问题是我在 FRAM 中有一些在运行时不断变化的持久性变量、这会影响 CRC 结果。
是否有办法查找固件的起始/结束地址并排除持久性变量? (无需手动检查存储器、因为它会在代码更改时发生变化)。
提前感谢
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.
工具/软件:Code Composer Studio
你(们)好
我需要计算 MSP430上固件版本的 CRC 校验和、该校验和应在固件更新前保持恒定(出于安全考虑)。 我知道 FRAM 的起始地址和结束地址、但问题是我在 FRAM 中有一些在运行时不断变化的持久性变量、这会影响 CRC 结果。
是否有办法查找固件的起始/结束地址并排除持久性变量? (无需手动检查存储器、因为它会在代码更改时发生变化)。
提前感谢
[引用用户="Bruce McKenney47378"]
链接器将(如果询问)为文本生成 CRC 表。 这是在每个段基础上完成的(因此对于中断矢量来说有点有问题)。 我非常确定、将持久变量放在与代码分开的段中。
CCS 汇编器[SiC]用户指南(SLAU131R)第8.9节介绍了该过程。 您需要提供实际的 CRC 校验代码。
[/报价]
o 那么、链接器应该只检查".text"、而不是".data"? 从示例中、您似乎需要单独检查每个.obj 文件、能否以更简单的方式为所有这些文件完成该操作?
再次感谢
例如、您可以使用以下内容执行所有.text:
> .text :{}crc_table (_text_crc)>> FRAM2 | FRAM
并(在某处)添加:
> .TI.crctab :{}> FRAM
(离开第二个警告可能会也可能不会受到伤害。)
由于每个中断矢量都是其自己的部分、因此执行这些矢量会更加麻烦。
此外、浏览我的.cmd 文件中的一个、似乎有比我记忆中更多的"oddlbo"段。 例如、我怀疑您还需要执行.cinit (.data 初始化程序)和.text:_ISR (低存储器 ISR 片段)。
如果在所有 crc_table()中使用相同的名称,则表条目会以数组的形式构造,因此检查代码可能有点盲。
[引用用户="Bruce McKenney47378"]
例如、您可以使用以下内容执行所有.text:
> .text :{}crc_table (_text_crc)>> FRAM2 | FRAM
并(在某处)添加:
> .TI.crctab :{}> FRAM
(离开第二个警告可能会也可能不会受到伤害。)
由于每个中断矢量都是其自己的部分、因此执行这些矢量会更加麻烦。
此外、浏览我的.cmd 文件中的一个、似乎有比我记忆中更多的"oddlbo"段。 例如、我怀疑您还需要执行.cinit (.data 初始化程序)和.text:_ISR (低存储器 ISR 片段)。
如果在所有 crc_table()中使用相同的名称,则表条目会以数组的形式构造,因此检查代码可能有点盲。
[/报价]
感谢您的示例! 有一个问题:
第一行收到此警告、但不允许我运行代码:"crc table 运算符(_text_crc) ignored for ".text": crc table 运算符不能与空输出段关联"
上次我执行此操作(几个月前)是在 G2553上、因此我知道它没有向加载映像添加10K、因为它不适合。 增长发生在哪里?
我不确定我是否理解您的移动位置。 我更改了.cmd 文件中的".text"行(相当于 lnk_msp430fr6043.cmd 副本中的第186行)以插入 "crc_table (_text_crc")。 我在它后面添加了.TI.crctab 行。 我没有在任何地方移动任何东西。
我粘贴了示例 CRC 校验函数[SLAU131R 示例8-29],并在 main()中添加了对它的调用。 (我必须更正一个拼写错误、并添加一个小检查以支持 CRC 计算。) 它可能总共为程序添加了100个字节。
我不确定你和我的表现有何不同。 我没有 FR6043可供使用。
[编辑:啊、我看到你们在这段时间里回答了。 我将假定您已设置好。]