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.

[参考译文] 编译器/AWR1843:访问内联汇编中的外部地址

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/943713/compiler-awr1843-access-external-address-in-inline-assembly

器件型号:AWR1843

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

您好!

首先、请在汇编器文件中考虑此工作示例(工具版本为 TLS16.9.x)、当然只有一个片段:

在*。c 文件中定义和实现 some _c_variable
local_var .word some _c_variable
;在同一文件的汇编代码中的某个位置,我现在可以使用,例如:
LDR R0、LOCAL_var

这个宏可被无问题地使用。

现在、我想在内联汇编函数中获得相同的功能、但我无法访问 se_c_variable 或 local_var (如果我通过.global 导出和导入了它)。

仅供参考,这是我想开始工作的东西(这将返回[E0001]未定义符号)
_asm (" LDR R0、some _c_variable ");

有人能向正确的方向指出我吗?
此致、
Christoph

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

    您未以其典型和预期的方式使用 asm 语句。  在这种情况下、您可能会产生比您解决的问题更多的问题。   请在 TI ARM 编译器手册中搜索 标题 为_asm 语句的子章节。  说了...

    您的 C 代码需要有一个类似于...的语句

    extern int some _c_variable; 

    下一位比较棘手。  它使用 asm 语句的方式不是规定的。  添加一条与类似的 asm 语句...

    _asm ("unique 标签:.word some _c_variable); 

    此 asm 语句的输出需要与引用此条目的函数出现在同一段中。  但它不能出现在函数本身内部。  这里是您需要进行实验的地方。  此外、编译器在这一细节中的行为不能得到保证。  不同版本之间可能会有所不同。  这种行为差异不太可能发生、但可以随时发生、无需通知。

    所有这些都就绪后,您可以发布此 asm 语句...

    _asm (" LDR R0、UNIQUE 标签"); 

    最后、我非常不喜欢这种建议的解决方案。  我认为这是避免 asm 语句的好理由。

    谢谢、此致、

    乔治

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

    谢谢、George、这起作用了(一旦我禁用了-gen_func_subsections=on"选项)。

    您能否告诉我您为何不推荐标签(以及编译器、因为这会显示警告)? 编译器指南中甚至提到了标签(TLS16.5.1、第5.9章:__asm ("STR:.byte……

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

    在汇编代码中、一行相对于其他行的位置非常重要。  但是、您无法精确控制  asm 语句的位置。

    谢谢、此致、

    乔治