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.

[参考译文] 编译器/MSP430F2013:查找__mspabi_srli_3的 MSP430链接器

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/838793/compiler-msp430f2013-msp430-linker-looking-for-__mspabi_srli_3

器件型号:MSP430F2013

工具/软件:TI C/C++编译器

我有一个在没有任何运行时库支持的情况下编译的工程(需要节省一些闪存空间)。 编译时出现以下错误:

未定义的首次引用
符号
------ --------
_mspabi_srli_3 ./app.obj

错误#10234-D:未解析的符号仍然存在

浏览 ASM 文件后、源 C 文件中的以下行会产生错误:

  返回(new_value >> 3);

添加 ABI 运行时库后、程序会编译、但代价是添加74字节代码来支持右移。 这看起来像是一个超频、尤其是在 ISR 中使用时、对于在我的情况下只需要6字节闪存来具有三个 RRA.W 汇编命令的器件。 相反、编译后的决定调用一个只需要6个字节用于调用和 RET 的运行时库。

是否有办法告诉 MSP430编译器不要依赖任何运行时库函数并就地实施正确的移位?

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

    我无法再现这一结果。  对于包含问题右移的源文件、请按照文章 如何提交编译器测试用例中的说明进行操作。

    谢谢、此致、

    乔治

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

    我使用虚拟 TEST1项目重现了错误。 zip 文件已附加。

    e2e.ti.com/.../0654.test1.zip

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

    上面附加的工程无法编译、导致出现未解析的符号  __mspabi_srli_3错误。

    但是、如果注释掉了"val >=3;"行、则工程编译就可以了。

    项目被配置为不使用运行时库。 但是、编译器仍会生成对运行时函数的调用。

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

    感谢您的测试案例。  我可以重现相同的行为。

    我未能找到更改内容的方法、以便编译器不会发出对 RTS 函数的右移 _mspabi_srli_3调用。  由于变量 val 是易失性的、因此会禁用编译器可能应用的所有优化。  但是、移除易失性显然会导致其他问题。

    遗憾的是、我被强制建议您将整个中断例程写入手动编码的汇编代码中。

    谢谢、此致、

    乔治

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

    这就是我最终所做的事情。 我使用"shift-by 2"生成的汇编代码并将其放入函数内部__asm()中,添加额外的 shift 使其成为"shift-by 3"。 这是一种糟糕的方法,不幸的是,这是解决问题的唯一方法。

    在上载的项目中、我取出了易失性文件并设置了速度优化、它仍然会进行 RTL 调用。 我希望 TI 能解决这个问题。