【问题标题】:Inline assembly in C code using TI code composer studio (for ARM)使用 TI 代码编写器工作室(适用于 ARM)在 C 代码中进行内联汇编
【发布时间】:2015-07-04 09:34:19
【问题描述】:

谁能告诉我如何使用 TI 代码编写器工作室(用于 ARM)在 C 代码中执行内联汇编代码?

我搜索并尝试过,但没有任何效果。

例如,当我尝试这个非常简单的代码时:

asm("push r0\n");

或者这个

__asm("push r0\n");

我总是得到:

[E0002]非法助记符指定push r0

1 个装配错误,没有装配警告

我读到一些东西说我以前的代码是 GCC 风格的,而 TI 编译器不接受它!。那么如何执行我自己的内联汇编代码呢?

【问题讨论】:

  • 内联汇编在很大程度上是特定于编译器的,因此不期望内联汇编会从一个编译器版本或品牌移植到另一个。

标签: assembly arm code-composer


【解决方案1】:

终于找到解决办法了!!

主要问题将通过在汇编指令前添加空格或制表符来解决,如下所示:

asm(" MOVS R0, #5\n");

这行不通:

asm("MOVS R0, #5\n");

在 push 中,我们必须将寄存器放在大括号 {R0}

asm(" PUSH {R0}\n");

希望对您有所帮助。

【讨论】:

  • 那个(空间)很奇怪,但是好的,吸取了教训。感谢您告诉我们您的解决方案。紫外线
  • 需要空格以便汇编器不会将指令解释为标签。与普通程序集文件相同。
【解决方案2】:

我不知道 ARM Code Composer Studio。但我知道一个 TI Code Composer Studio,如果是这个意思,我可以给你一些提示。使用asm volatile ("...") 可能会有所帮助。但是使用该方法,您无法访问例如 C 变量。使用所谓的内在函数/方法要好得多,它们是将 C 链接到汇编程序的函数。以下是 TI 文档的链接:http://www.ti.com/lit/ug/spru187o/spru187o.pdf 第 7.5.4 节。这是我得到这个想法的链接:https://e2e.ti.com/support/development_tools/code_composer_studio/f/81/t/3660

【讨论】:

  • 我的意思是 TI ccs(我编辑了名称)。不幸的是, volatile 方法不起作用,我仍然得到同样的错误。我会读你寄给我的东西,然后告诉你我得到了什么。谢谢。
  • 也许就像写大写PUSH并使用{}作为寄存器列表一样简单。但这只是一个猜测。 asm ("PUSH {r0}\n")
  • 我真的应该读过你的最后一句话。 ;-) TI 编译器应该知道 ARM 助记符,但如果不知道,那么 PUSH 是 STMDB sp!, reglist 的别名,您可以在此处阅读 infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489e/…
  • ("PUSH {r0}\n") 不起作用 :( 。我正在阅读您发送给我的链接(它们有点复杂,但我正在尝试)。跨度>
  • 链接的文件是他们的 DSP 编译器而不是 arm
猜你喜欢
  • 1970-01-01
  • 2010-12-07
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
  • 2019-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多