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.

[参考译文] MSP430FR5969:使用-mcode-region=或来编译 CTPL

Guru**** 2538930 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/995645/msp430fr5969-compiling-ctpl-using--mcode-region-either

器件型号:MSP430FR5969

您好!

我有一个需要放置在 HIFRAM 中的大型应用程序(与 CTPL 结合使用)。 我使用了-mlarge 和-mcode-region=。 代码会编译但不运行。

我将问题与 CTPL 隔离。  使用-mslarge 和-mcode-region=编译的 CTPL 代码不会执行、只会在开头挂起。 在与带和不带 mcode-region 的汇编文件进行比较时、在编译后将诸如 ctpl_init 的 ctpl 函数放置在0x0000中、以便将代码放置在更高的 fram 中。 这是否会影响执行? 如何使用这些设置正确执行 CTPL?

我已在以下链接中共享了装配体列表。

常规 ctpl 的汇编列表: https://drive.google.com/file/d/1OFOcCro5Iup-1d6Z9dlP0LmsdokRhVHt/view?usp=sharing
对于 使用-mcode-region=进行编译的 ctpl: https://drive.google.com/file/d/1-Gc-NJ2Wok1airfU3VzcA-0LKSsnvk9B/view?usp=sharing

此致、
Archie S

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

    我怀疑命令行选项有问题。 链接时是否包含"任一"选项? 我怀疑不是这样、因为您的反汇编代码显示 ctpl_init 代码位于.ote.text 段中。 链接器应该已将其更改为.lower 或.upper、因为链接器脚本中没有任何一个.text 段。

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

    David、谢谢! 我向链接器添加了"任一"选项。 ctpl_
    init 代码不再位于.ox.text 段中(使用最新的汇编列表更新了链接)。 但编译的代码仍不会执行

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

    抱歉。 即使向链接器添加任一选项后、ctpl_init 代码仍位于.ote.text 中。

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

    嗯、经过进一步的思考、这可能是因为该段名称。 附加到.text 的":ctpl_low_level"可能是问题所在。  尝试删除它。

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

    如何在汇编列表中删除:ctpl_low_level 删除相同的二进制文件?

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

    此外、对于任一代码区域、ctpl 函数都位于存储器0x00000中。 可以吗?

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

    特殊功能寄存器在0x0000附近活跃、因此不能尝试输入代码。 (编程当然会失败。)

    当 gcc 修改诸如-ffunion-sections 的段名时、它使用句点"。" 以分隔名称。 使用冒号可能会导致链接器不会将".text:ctpl_low_level"视为.text 段。 删除所有这些内容或将":"更改为"."。

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

    我了解用句点替换冒号可能会有什么帮助。 但是、在汇编列表(.lst)文件中更改此项如何在二进制可执行文件中更改?

    从0x0000放置的 ctpl_init 和其他函数在汇编文件中定义。 这可能会影响编译器在两个存储器中放置.text 的方式吗? 汇编器还启用了"任一"选项
    此外、在反汇编过程中、在没有任何一个选项的情况下进行编译时、这些 ctpl_init 函数位于.text 中。 而当使用这些 ctpl_init 函数进行编译时、这些函数位于新段.ote.text:ctpl_low_level"中

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

    按相反顺序:

    1) code-region=在任 一选项告诉链接器将".py"添加到".text"段名。

    2) 2)汇编器不理解 mcode-region=任一选项、因此对段名没有任何影响。 汇编器的所有代码输出默认从0x0000开始。 这些地址在下一步中由链接器修复。

    3) 3)汇编器源代码中的段名是.text:ctpl_low_level。 这似乎使链接器感到困惑。 虽然它会按预期添加".OW"、但不会尝试将其放入.lower .text 或.upper .text 中。 相反、它无法找到该名称并将其视为孤立段。 无提示。 使用"-孤立 处理=warn"启用警告。 或者、如果通过 gcc 传递选项、则为"-wl、--alonuse-handling = warn"。

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

    谢谢你。 在启用警告的情况下(使用 gcc)、我在代码中遇到了其他几个孤立的函数段、从.NOT.TEXT.main 到许多(所有?) ctpl 相关函数、如.ote.text.ctpl_WDT_A_收尾 程序。 这些函数在.c 文件中定义、而不是汇编文件。 这些孤立段是否会以任何方式影响执行?

    此外、如何使用段名 text.ctpl_low_level 而不是.text:ctpl_low_level 来编译代码

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

    编辑源代码并使用".section .text:ctpl_low_level"更改行。 我本以为这是显而易见的。

    我尝试了这种孤立警告、并从 C 库中获得了大量无用的代码警告。 需要注意的是、它说它正在输入代码。 您需要.lower.text 或.upper.text。

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

    David、谢谢! 我在 ctpl_low_level.S 中找到.section .text:ctpl_low_level 但在某种程度上、它并未出现在 grep 结果中。 替换:。 在汇编文件中、ctpl 正常工作。 ctpl_init 函数不再位于0x0000中。