Frage

I posted diese Q 28xx DSP Forum TI hat aber jemand wissen, hier könnte eine Antwort und dachte, vielleicht nicht gehört.


Ich weiß, wie Funktionen zu schreiben, in der Montage, so dass sie C-aufrufbar sind; wenn der C-aufrufbar Name ist foo() dann die Montage-Funktion namens _foo().

Was passiert, wenn ich will C ++ verwenden und eine Klassenmethode in der Montage optimieren? Wie mache ich das? Ich nehme an, die nur wichtige Fragen sind:

  • Namensgebung
  • Zugriff auf den "diesen" Zeiger
  • Zugriff auf die Teilnehmer, durch irgendwie zu wissen, Offsets

und wenn ich über die letzten beiden zu kümmern wollen, nicht dann würde ich vielleicht eine statische Member-Funktion schreiben und dies tun:

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
};
War es hilfreich?

Lösung

Der this Zeiger wird als zusätzliches Argument an die Funktion übergeben, auf der Plattform, um die Standard-Aufrufkonvention. Auf allen Plattformen Ich bin vertraut mit ihm als erstes Argument übergeben wird, aber ich weiß nicht viel von C ++ Codierung, so dass ich nicht sicher bin, ob diese von der Norm gewährleistet ist. Sie können immer einige C ++ Code auf Ihrer Plattform zu bestätigen zerlegen.

Die C ++ Symbol Namensgebung ist ziemlich schmerzhafter als in C und variiert von Compiler zu Compiler. Ich nehme an, Sie durch Zerlegen eine kompilierten Funktionsdefinition der richtigen Symbolnamen zu verwenden herausfinden können, so stellen Sie sicher, dass. Die Funktion Mitglied der richtigen Klasse ist, und hat die richtige Anzahl und Art des Arguments

Wenn Sie wirklich eine C ++ Funktion in situ müssen reproduzieren, würde ich wahrscheinlich nur eine Standard-C-Funktion machen und tun das übliche extern "C" { ... } um seine Erklärung.

Andere Tipps

Hat Ihr Compiler eine Inline-Assembler-Syntax? Falls Sie Fragen haben, kann es die einfachste Möglichkeit sein, und Sie können den Compiler Griff, um die Funktion Namensgebung und Call-Syntax Stücke lassen.

Alternativ-Stephans-Vorschlag, die C ++ Methode als inlined Wrapper um einen „einfachen“ C-Funktionsaufruf des Schreibens ist ein guter. (Sie wollen es wahrscheinlich nur eine einfache Funktion zu machen, nicht eine statische Member-Funktion wie in Ihrem Beitrag, eine einfache C-Schnittstelle, um es zu erhalten.)

würde ich die Compiler-abhängige Flag finden und schreiben Sie die Baugruppe in der C ++ Funktion. Normalerweise gibt es Möglichkeiten, lokale Variablen aus dem Montageabschnitt zu verweisen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top