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.

[参考译文] MSP430F2619S-HT:在执行 post-build 步骤之后、自动加载不同文件中的程序和符号以计算 CRC。

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1260670/msp430f2619s-ht-automatic-loading-of-program-and-symbols-from-different-files-after-post-build-step-for-crc-calcualtion

器件型号:MSP430F2619S-HT

大家好!

我正在尝试找到一种方法将一个简单的 CRC16添加 到我的程序中。 链接器似乎不提供正确的选项(它仅提供会向输出文件中添加过多无用内容的 CRC 表-此处涉及每个字节)、 我现在继续进行编译后处理、通过第三方工具计算 CRC 并将其注入到十六进制文件中。 (我使用的是 Intel hex。) 这一切都可以正常工作、尽管提供一个选项告诉链接器我真的只需要 CRC、其他什么都不会更容易 (所需的 CRC 最终以可执行文件形式实现、而根本无需生成十六进制)。

问题是、我没有找到从更新后的十六进制文件自动加载程序的方法、在尝试调试程序时仅使用 OUT 可执行文件中的符号。 手动加载时一切都正常、但必须按下一个按钮比查看下拉菜单和查找文件等更有意义。 此外、在调试会话期间从源代码重建程序也应该重新加载所有内容。

我使用的是 CCS 12.4、其中大多数是 MCU 的默认值。

谢谢。

米哈尔

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

    要使 CCS 添加 CRC、您似乎可以将  

    https://software-dl.ti.com/codegen/docs/tiarmclang/compiler_tools_user_guide/compiler_manual/linker_description/09_linker_generated_crc_tables/the-crc-table-operator-stdz0756966.html#stdz0752409 

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

    要使 CCS 添加 CRC、您似乎可以将  

    https://software-dl.ti.com/codegen/docs/tiarmclang/compiler_tools_user_guide/compiler_manual/linker_description/09_linker_generated_crc_tables/the-crc-table-operator-stdz0756966.html#stdz0752409 

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

    谢谢 Gary ,我读了所有这些-这正是我的意思是"太多垃圾"。 我不需要整个表、只需要给定存储器区域的 CRC16值。 我要尝试做的是将 CRC16保存到专用位置、而不保存任何其他内容。

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

    好的、我会将该主题转给我们的工具团队、看看他们是否需要帮助

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

    谢谢 Gary。

    相关问题-是否有办法将由链接器分配的符号(例如使用 last()运算符)插入输出段? 我不想使用符号名称从应用程序访问它、而是通过存储器中的特定位置访问它。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我没有找到方法从更新的十六进制文件自动加载程序

    就目前而言、请忽略它的自动部分。    现在如何加载 hex 文件?  是否使用 此加载存储器功能?  我非常确信、只要您加载程序、命令就会自动执行。

    是否有方法可以将由链接器分配的符号(例如使用 last()运算符)插入输出段?

    如何访问由链接器创建的符号、例如由 最后一个 运算符、 请在 MSP430汇编工具手册  中搜索标题为"在 C/C++应用中使用链接器符号"的子章节。 我怀疑你已经知道这个方法,它不适合你。  请说明您要解决的总体问题、同时忽略它的实施方式。   

    谢谢。此致、

    -乔治

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

    您好、George、

    为了加载十六进制映像和符号(从.out 文件)、我目前使用 CCS Debug 透视图中"Run/Load"菜单中的命令:

    Re 对于链接器符号、我需要将其值放入特定地址的映像中、以便能够从固件的不同部分访问该映像。 我有一个引导加载程序、它不会知道链接器符号的值(该值在重建主应用程序时会改变)、但它可以在映像加载到闪存中后从固定地址读取它。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Re 链接器符号,我需要将其值放入特定地址的映像中,才能从固件的不同部分访问该映像。 我有一个引导加载程序、它不知道链接器符号的值(该值在重建主应用程序时会改变)、但它可以在映像加载到闪存中后从固定地址读取它。

    假设 内存 链接器命令文件中的指令有一条类似于...的行。

        MEM              : origin = 0x0200, length = 0xFDE0, LAST(last_symbol)

    那么你可以有类似的 C 代码...

    #define HCA 0xe000      /* Hard Coded Address */
    extern int last_symbol;
    __attribute__((location(HCA)))
    const int boot_loader_symbol = (int) &last_symbol;

    这会创建一个名为 引导加载程序符号 。  它位于由预处理器符号给出的地址 HCA 。  这些内容是电池组的 最后一个符号

    关于如何自动加载 hex 文件、我要将该线程的职责更改为 CCS 专家。

    谢谢。此致、

    -乔治

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

    谢谢 George,好主意!

    稍微修改了、以便使用链接器脚本中定义的部分、而不是 C 源代码中的 HCA;还有 保留  如果未引用该常量、则需要属性:

    extern uint32_t last_symbol; /* The type here is irrelevant. */
    __attribute__((retain, section(".last_address")))
    const uint32_t app_last_addr = (uint32_t) &last_symbol;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    问题是我没有找到从更新的十六进制文件自动加载程序的方法、并且在尝试调试程序时仅使用 Out 可执行文件中的符号。 手动加载时一切都正常、但必须按下一个按钮比查看下拉菜单和查找文件等更有意义。 [/报价]

    我假设 CRC 计算和十六进制生成是在项目的编译后处理步骤中完成的。 很遗憾、您无法将十六进制文件加载添加为编译后处理步骤。

    一个想法是使用脚本控制台并创建一个控制台命令文件、以构建项目并加载 hex 文件。 有适用于这两者的命令、您可以将其添加到只需加载一次的控制台命令文件中。

    https://dev.ti.com/tirex/explore/node?node=A__AFIA626.qAI-NZsf7I56mg__ccs_devtools__FUz-xrs__LATEST

    希望这对您有所帮助。

    小