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.

[参考译文] MSP432P401R:混合 C 和 ASM 并使用内联汇编

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/566700/msp432p401r-mixing-c-and-asm-and-using-inline-assembly

器件型号:MSP432P401R

大家好、

我发现我的代码在某个段上很慢、并想用汇编语言编写它、因为我知道如何执行它、它会更快。
重要的是、我找不到任何有关 MSP432上的 ASM 的教程。

我找到了一个有关 MSP430的 ASM 和 C 混用的教程、但它使用不同的处理器架构(RISK)、而这个是 ARM。
我还找到了 ARM 的指令集、并在 CCS 中生成了 asm 文件、以便我能够分析代码。

以下是困扰我的问题:
1) 1)在哪里可以找到有关如何使用内联 ASM 的良好说明? 如何定义内联等的输入和输出?

2) 2)是否有任何人或任何有关混合 asm 和 C 的教程。例如、在 asm 中编写一个函数并从 C 调用它
有人能否花一点时间来做一个示例、然后制作一个添加2个数字的程序、以及一个通过参数获取2个数字并返回结果的 asm 函数?

这样的示例对我来说意味着世界、因为这就是我开始编写自己的函数所需的全部。 我在 ASM 方面有很多经验、但在 C 和 ASM 混合方面没有太多经验。

3) 3)在 CCS 生成的 ASM 中、有一些 A1-A4寄存器、我猜它们是累加器、但为什么我在 ARM Cortex M4的文件中找不到任何内容。 我想我只找到寄存器 r0-R12。

什么是 A1-A4、为什么找不到它们?

非常感谢您的参与。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我认为最好的起点是 SPNU151 (www.ti.com/.../spnu151n.pdf )。

    (1)我建议转到 ARM 社区了解具体的汇编示例。 如今、TI 没有或计划为 MSP432提供汇编。
    (2)您可以参阅上述文档。
    (3)A1 (虽然 A4)与 r0-R3 (infocenter.arm.com/.../index.jsp )具有相同的含义。

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

    如 Chris 建议的那样、ARM InfoCenter 页面是 IMHO 的最佳位置、用于提供与内核相关的文档、包括机器指令。

    然而、试图击败效率适中的现代编译器的努力大多是徒劳的("野生鹅之路")。 只需打开适当的优化。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可能需要考虑将汇编代码设置为一个 c 可调用函数、除非它是一个独立的代码块、如中断服务例程。 几年前、我写了一份应用手册、该手册可能仍然有用:

    www.ti.com/.../spra806.pdf
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将逐一介绍:

    Chris Sterzik:谢谢您提供的信息、尽管您无法为我提供示例、但您对我提供了很多帮助。 我阅读了有关惯例的所有内容和我需要了解的其他内容,我还发现__asm()实际上是无用的,因为我不能在其中使用局部变量。 非常感谢。

    f. m:你是99%的正确,但我看了生成的.asm 文件,我找到了一些地方,我可以更好地编码它. 这部分代码对于我的速度非常重要、因此我需要对其进行更多优化。

    Todd Anderson78572:哦,我的神。 您的教程就是这样。 我不敢相信这是如此简单。 问题是、我可以在 asm 中编写代码、但我讨厌为编译而需要编写的所有其他代码。 您的方法实际上完成了所有工作。 现在、我可以专注于编码、而不是一些文件惯例。 我遵循函数调用惯例、只是提及这一点、这样人们就不会认为我讨厌使用所有惯例。

    感谢大家给出了快速而出色的答案。 我在不同的时区工作(当你睡觉时)、当我回家时、你都可以工作。 我在下一个工作日看到了答案。

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

    只需添加一些注释:

    这里有几个很好的 ARM 汇编器参考和教程、只需尝试您最喜欢的搜索引擎即可。

    我不熟悉 MSP432的复杂性、但将时间关键型例程迁移到 RAM 可能会有所帮助。 一些供应商的闪存实现速度众所周知很慢(在这里命名 ST ...),因此从 RAM 执行例程可能会加快速度。 如果我记得正确的话、MSP432支持它、但我不确定。 和最大值 48MHz、它可能不会真正起作用。

    [引用 user="jasaleja"]我在不同的时区工作(当您睡眠时),当我回家时,您都可以工作。

    这是您的猜测。 我也有几个小时不同步。