TI DSP:连接C ++和汇编

时间:2010-01-11 14:33:19

标签: c++ assembly embedded ti-dsp

我发布了this Q to TI's 28xx DSP forum,但没有听到回复,并认为这里可能有人知道。


我知道如何在程序集中编写函数,以便它们是C可调用的;如果C可调用名称为foo(),则汇编函数名为_foo()

如果我想在汇编中使用C ++并优化类方法怎么办?我怎么做?我假设唯一的主要问题是:

  • 命名
  • 访问“this”指针
  • 通过某种方式了解偏移来访问班级成员

如果我不想担心最后两个,那么也许我会写一个静态成员函数并执行此操作:

class MyClass
{
  int x;
  static int _doSomething(int u); // implement this in assembly
public:
  inline void doSomething() { x = _doSomething(x); } 
  // lightweight C++ wrapper to handle the class member / "this" pointer stuff
};

3 个答案:

答案 0 :(得分:5)

使用平台上的标准调用约定,this指针作为函数的附加参数传递。在我熟悉的所有平台上,它都作为第一个参数传递,但我没有做很多C ++编码,所以我不确定这是否由标准保证。您始终可以在平台上反汇编某些C ++代码以进行确认。

C ++符号命名比C语言更痛苦,并且因编译器而异。我想你可以通过反汇编编译的函数定义找出正确的符号名称,只需确保:函数是正确类的成员,并且具有正确的参数数量和类型。

除非你真的需要在原地复制一个C ++函数,否则我可能只是制作一个标准的C函数并在其声明中执行通常的extern "C" { ... }

答案 1 :(得分:1)

您的编译器是否具有内联汇编语法?如果你有,那么它可能是最简单的选项,你可以让编译器处理函数命名和调用语法部分。

或者,Stephen建议将C ++方法编写为围绕“简单”C函数调用的内联包装器,这是一个很好的建议。 (你可能想让它只是一个简单的函数,而不是你帖子中的静态成员函数,以获得一个简单的C接口。)

答案 2 :(得分:0)

我会找到编译器相关的标志并在C ++函数中编写程序集。通常有一些方法可以在汇编部分中引用局部变量。