TIのDSP:インターフェースにC++および組立
質問
掲載 このためには、TIの28xx DSPフォーラム なのことを聞き対応やっかいられるように知らない。
しか機能の組み立てをいたC-呼び出し可能オブジェクト;の場合はC-呼び出し可能オブジェクト名 foo()
その後、組み立て可能 _foo()
.
になっているのでしょうか?利用したいC++、最適なクラスメソッドに組み立て?そうい?そして大きな課題:
- ネーミング
- アクセスする"こと"ポインタ
- アクセスのクラスにより会員に何らかの知るオフセット
ればならないようにしたいの心配もに、そのような静的機能とい:
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
};
解決
this
ポインタは、ご使用のプラットフォーム上での標準的な呼び出し規約を使用して、関数に追加の引数として渡されます。私はそれに慣れてるすべてのプラットフォームでは、最初の引数として渡されますが、私はC ++のコードの多くをしないので、私はこれが標準で保証されているかはわかりません。あなたは常に確認するため、ご使用のプラットフォーム上でいくつかのC ++コードを逆アセンブルすることができます。
C ++シンボルの命名は、Cではなく、より痛みがあり、コンパイラにコンパイラによって異なります。私は、あなたが、ちょうどことを確認してコンパイルされた関数の定義を分解して使用する権利シンボル名を見つけ出すことができたとします。関数は、右のクラスのメンバーであり、引数の正しい数と種類があります。
あなたが本当にその場でC ++の機能を再現する必要がある場合を除き、、私はおそらくちょうど、標準C関数を作成し、その宣言の周りにいつものextern "C" { ... }
を行うだろう。
他のヒント
あなたのコンパイラは、インラインアセンブリ構文を持っていますか?あなたがいることを持っている場合は、それが最も簡単な選択肢であり、そしてあなたは、コンパイラは、関数の命名を処理させると構文片を呼び出すことができます。
別の方法として、「単純な」C関数呼び出しの周りにインラインラッパーとしてC ++メソッドを書くのシュテファン提案は良いものです。 (おそらくそれまでの単純なCインターフェイスを取得するには、あなたのポストのようにそれを単なる機能ではなく、静的メンバ関数を作りたい。)
私は、コンパイラに依存フラグを見つけるとC ++関数内のアセンブリを記述します。通常、アセンブリセクション内からのローカル変数を参照する方法があります。