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.

[参考译文] CCS/MSP430FR6043:获取固件地址开始/结束、不包括持久性变量?

Guru**** 2541030 points
Other Parts Discussed in Thread: MSP430FR6043

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/863611/ccs-msp430fr6043-get-firmware-address-start-end-excluding-persistent-variables

器件型号:MSP430FR6043

工具/软件:Code Composer Studio

你(们)好

我需要计算 MSP430上固件版本的 CRC 校验和、该校验和应在固件更新前保持恒定(出于安全考虑)。 我知道 FRAM 的起始地址和结束地址、但问题是我在 FRAM 中有一些在运行时不断变化的持久性变量、这会影响 CRC 结果。  

是否有办法查找固件的起始/结束地址并排除持久性变量? (无需手动检查存储器、因为它会在代码更改时发生变化)。

提前感谢  

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

    链接器将(如果询问)为文本生成 CRC 表。 这是在每个段基础上完成的(因此对于中断矢量来说有点有问题)。 我非常确定、将持久变量放在与代码分开的段中。

    CCS 汇编器[SiC]用户指南(SLAU131R)第8.9节介绍了该过程。 您需要提供实际的 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 运算符不能与空输出段关联"

     

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

    第一行是对已经存在的行的修改。 添加了第二个。

    你的描述让我很痒,所以我试了一下。 我怀疑警告是说"我使用了前一个语句中的所有.text、因此没有剩余的时间来做这个语句。"

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

    我使其正常工作、但不确定它是否正确。

    testInput1: {*obj (.text)}> FRAM2 | FRAM、CRC_TABLE (linkerCrcTable、algoriter=CRC32_PRIME)

    .TI.crctab:{}> FRAM

    令人烦恼的是、当我这么做时、我的代码的大小增加了超过10K 字节、为什么会这样做?

    提前感谢  

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

    当我执行我所描述的操作时、我看不到这种行为。 (免责声明:我在这里没有相关资料、所以我正在破解一个相对简单的项目。)

    testInput1段的用途是什么? 这是要与.text 分开吗?

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

    (testInput1只是一个示例、因此未使用它。)

    当我将示例移到 SECTION 指令中.cmd 文件的顶部时、它不会发出任何警告/错误。  

    但是、只要我在 程序代码中使用_text_CRC 结构、它就会增加超过10KB。 您是否尝试使用该变量、以便优化器不会将其删除?  

    再次感谢!

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

    噢,我的错,我使用 printf()来调试它,这需要10KB……  

    那么、它似乎起作用了!

    我只需要添加.cinit、.const 和._isr

    谢谢

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

    上次我执行此操作(几个月前)是在 G2553上、因此我知道它没有向加载映像添加10K、因为它不适合。 增长发生在哪里?

    我不确定我是否理解您的移动位置。 我更改了.cmd 文件中的".text"行(相当于 lnk_msp430fr6043.cmd 副本中的第186行)以插入 "crc_table (_text_crc")。 我在它后面添加了.TI.crctab 行。 我没有在任何地方移动任何东西。

    我粘贴了示例 CRC 校验函数[SLAU131R 示例8-29],并在 main()中添加了对它的调用。 (我必须更正一个拼写错误、并添加一个小检查以支持 CRC 计算。) 它可能总共为程序添加了100个字节。  

    我不确定你和我的表现有何不同。 我没有 FR6043可供使用。

    [编辑:啊、我看到你们在这段时间里回答了。 我将假定您已设置好。]

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

    正如我写的,它是 printf()。

    首先、它位于第{}节底部、在其余的默认指令之后、但这不起作用。 相反、我将其移至其余部分之前的第{}部分的顶部、该部分删除了错误。