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.

[参考译文] CCS/UCD3138:能否在 UCD3138中使用汇编语言而不是 C 语言?

Guru**** 2496645 points
Other Parts Discussed in Thread: UCD3138

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/727223/ccs-ucd3138-can-we-use-assembly-language-in-ucd3138-instead-of-c-language

器件型号:UCD3138

工具/软件:Code Composer Studio

我是否可以在 UCD3138?中使用汇编语言,因为我希望在逻辑决策指令中获得更快的处理速度。

您是否有客户在 UCD3138中使用汇编语言、并且他们使用 GCC 或指令 ARM?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以根据需要使用汇编语言。 如果您知道一些提示、通常可以编写 c 代码、这样可以提供与汇编一样快的逻辑决策类型代码。 您可以集成 C 和汇编语言、但这是有风险的、因为优化器有时会更改内容、使汇编代码不再匹配。 执行函数的最佳方法是先用 C 语言编写函数、然后查看生成的汇编代码、了解如何传递任何参数以及压入栈的内容。 通常、CCS 会坚持 ARM 函数调用惯例。

    我们使用 CCS 汇编器。 当然、您可以使用 ARM 或 Thumb 模式。 如果您需要更快的代码、请使用 ARM 模式。 将处理器状态设置为32位、并设置速度优化的优化。

    我们在 EVM 中使用汇编代码、仅用于无法在 C 中完成的操作、例如修改处理器状态寄存器。 为了在 ARM 内核上实现高效的 C 代码、我们执行上述操作。 我们通常为32位 ARM 模式设置中断、CCS 6无论如何都需要这种模式。 EVM 并非始终如一地设置为进行优化、但如果您需要速度、请将其设置为进行优化。 最好将中断频繁调用的所有函数放入同一个文件中、并使它们内联、尤其是当它们只被调用一次时。 内联意味着该函数只是与调用代码内联、而不是作为函数进行实际调用。 这样、您就可以在编写函数时获得内联代码的效率。

    将变量放入结构中也非常有用。 我们的一些代码在单个结构中具有中断使用的许多变量。 这非常有用、因为 ARM 指令集处理地址的方式。 无法立即使用 ARM 加载32位地址、因此每当您访问新的独立变量时、它都需要多个额外的指令周期。 但指令具有大地址偏移、而不会增加开销、尤其是在 ARM 模式下。 因此、如果新变量处于已在使用的结构中、则无需花费任何额外的时间来加载地址。 它只是通过嵌入在指令中的偏移处理。

    ARM 在位设置和清除方面也没有那么高效。 如果您要写入外设寄存器中的某个位、通常您实际上知道所有其他位的状态。 只写入.all 比设置位快得多。

    除此之外、当我需要真正的加速时、我发现了解逻辑并了解每个函数的速度有多慢、因此我可以通过改变逻辑和调时来找到更多的实时。 但这需要很长时间才能解决。

    我建议首先研究 ARM 汇编语言、然后查看 C 编译器生成的汇编代码。 它已经过很好的优化。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回答。