Frage

Kann jemand erklären, die mechanik des Sprungs Tabelle, und warum ist erforderlich wäre, in embedded-Systemen?

War es hilfreich?

Lösung

Ein Sprung-Tabelle können entweder ein array von Zeigern auf Funktionen oder ein array von Maschinencode-Sprung-Anweisungen.Wenn Sie haben eine relativ statische Menge von Funktionen (wie system-calls oder virtuelle Funktionen für eine Klasse), dann können Sie diese Tabelle erstellen Sie einmal und rufen Sie die Funktionen mit einem einfachen index in das array.Dies würde bedeuten, abrufen der Zeiger und das aufrufen einer Funktion oder springen um den Maschinen-code, abhängig vom Typ der verwendeten Tabelle.

Die Vorteile, dies zu tun, in embedded-Programmierung sind:

  1. Indizes sind mehr Speicher effizienter als Maschinen-code oder Zeiger, so gibt es ein potential für Speicher-Einsparungen in eingeschränkten Umgebungen.
  2. Für eine bestimmte Funktion der index stabil bleiben wird, und die änderung der Funktion erfordert lediglich den Austausch der Funktion Zeiger.

Wenn nicht, kostet Sie ein klein wenig Leistung für den Zugriff auf die Tabelle, aber das ist nicht schlechter als jede andere virtuelle Funktion aufrufen.

Andere Tipps

Ein jump table), auch bekannt als ein Zweig Tisch, ist eine Reihe von Anweisungen, die alle bedingungslos Verzweigung zu einer anderen Stelle im code.

Sie können von Ihnen denken, als einen Schalter (oder wählen Sie) Erklärung, wo all die Fälle sind gefüllt:

MyJump(int c)
{
   switch(state)
   {
      case 0:
         goto func0label;
      case 1:
         goto func1label;
      case 2:
         goto func2label;
   }
}

Beachten Sie, dass es kein zurück mehr - der code, springt Sie auf ausführen wird die Rückkehr, und springt es zurück um dort, wo myjump aufgerufen wurde.

Dies ist nützlich für die Zustandsautomaten, wo Sie ausführen bestimmter code auf der Basis von state-variable.Es gibt viele, viele andere verwendet, aber dies ist eine der wichtigsten Verwendungen.

Es ist verwendet, wo Sie nicht wollen, um Zeit zu verschwenden und das hantieren mit dem stack, und speichern wollen die code-Raum.Es ist vor allem der Einsatz in interrupt-Handler, wo Geschwindigkeit ist extrem wichtig, und das Peripheriegerät, das den interrupt ausgelöst, ist nur bekannt durch eine einzelne variable.Dies ist ähnlich wie die vector Tabelle in die Prozessoren mit dem interrupt-Controller.

Ein Einsatz wäre unter einem $0.60 mikrocontroller und erzeugen ein composite (TV) signal für video-Anwendungen.die micro ist nicht mächtig - in der Tat, es ist gerade noch schnell genug, um zu schreiben, jede scan-Linie bietet.Eine Sprung-Tabelle verwendet werden, zum zeichnen, Charaktere, denn es würde zu lange zum laden einer bitmap aus dem Speicher, und verwenden Sie eine for () - Schleife schieben Sie die bitmap aus.Stattdessen gibt es eine separate springen zu den Brief-und scan-Linie, und dann 8 oder so Anweisungen, die tatsächlich schreiben der Daten direkt an den Hafen.

-Adam

Ein Sprung Tabelle beschrieben hier, aber kurz gesagt, es ist ein array von Adressen sollte die CPU springen, um basierend auf bestimmten Bedingungen.Als ein Beispiel, ein C switch-Anweisung ist oft implementiert als eine Sprung-Tabelle, wo jede springen Eintrag gehen Sie zu einem bestimmten "Fall" - label.

In embedded-Systemen, in denen die Speichernutzung ist an einer Prämie ist, viele Konstrukte sind besser gedient werden, durch die Verwendung einer Sprung-Tabelle anstelle der mehr Speicher-intensive Methoden (wie eine riesige if-else-if).

Wikipedia fasst es ganz gut zusammen:

In computer programming, a branch Tabelle (manchmal bekannt als ein Sprung Tabelle) ist ein Begriff verwendet zu beschreiben eine eine effiziente Methode der übertragung Programm control (Verzweigungen) zu anderen Teil eines Programms (oder einer anderen Programm gewesen sein kann dynamisch geladen) mit einer Tabelle der Filiale Anweisungen.Der Zweig Tisch die Konstruktion wird Häufig verwendet, wenn Programmierung in Assemblersprache, sondern kann auch vom compiler erzeugt.

...Verwenden Sie Zweig, Tabellen und andere roh - Codierung von Daten wurde Häufig in den frühen Tage Rechenzeit, wenn der Speicher war teuer, wurden die CPUs langsamer und kompakte Darstellung der Daten-und effiziente Wahl zwischen alternativen waren wichtig.Heutzutage sind Sie Häufig die Verwendung in embedded-Programmierung und Betriebssystem Entwicklung.

Mit anderen Worten, es ist ein nützliches Konstrukt zu verwenden, wenn Ihr system ist sehr Speicher-und/oder CPU-begrenzt, wie es oft der Fall in einer embedded-Plattform.

Aus Wikipedia:

In computer programming, a branch Tabelle (manchmal bekannt als ein Sprung Tabelle) ist ein Begriff verwendet zu beschreiben eine eine effiziente Methode der übertragung Programm control (Verzweigungen) zu anderen Teil eines Programms (oder einer anderen Programm gewesen sein kann dynamisch geladen) mit einer Tabelle der Filiale Anweisungen.Der Zweig Tisch die Konstruktion wird Häufig verwendet, wenn Programmierung in Assemblersprache, sondern kann auch vom compiler erzeugt.

Ein Zweig Tisch besteht aus einem seriellen Liste der bedingungslosen Zweig Anweisungen, die in verzweigten über einen offset erzeugt durch die Multiplikation eine fortlaufende index mit der Anweisung Länge (Anzahl von bytes im Speicher besetzt von jedem Sprungbefehl).Es macht Gebrauch von der Tatsache, dass die Maschine code-Anleitung für die Verzweigung ein Feste Länge und ausgeführt werden kann extrem effizient von den meisten hardware, und ist besonders nützlich, wenn Umgang mit raw-Daten Werte einfach umgerüstet werden, um sequentiell index-Werte.Angesichts solcher Daten ein Zweig Tisch kann sehr effiziente;es besteht in der Regel aus der folgenden Schritte aus:Optional Validierung die input-Daten, um sicherzustellen, dass es ist akzeptabel;die Umwandlung der Daten in ein Versatz in den Zweig Tisch in der Regel beinhaltet die Multiplikation bzw. schalten Sie zu berücksichtigen, die instruction length;und die Verzweigung zu eine Adresse aus der Basis des Tabelle und das generierte offset:diese oft mit einem Zusatz von offset auf der Programm-Zähler registrieren.

Springen Tabellen, häufiger bekannt als ein Zweig Tisch, sind in der Regel nur verwendet, der von der Maschine.

Der compiler erstellt eine Liste aller Etiketten, die in ein Assembler-Programm und verknüpft alle Etiketten auf eine memory location.Eine Sprung-Tabelle ziemlich viel ist eine Referenz Karte, wo, eine Funktion oder eine variable oder was auch immer das label vielleicht, ist im Speicher gespeichert.

So wie eine Funktion ausgeführt wird, am Ende springt er zurück zu seiner vorherigen Position im Speicher oder springt zur nächsten Funktion, etc.

Und Wenn Sie sprechen, was ich denke, Sie werden Sie nicht nur benötigen Sie in embedded-Systemen, sondern in jeder Art von kompiliert/interpretiert Umgebung.

Brian Gianforcaro

Springen Tabellen sind Häufig (aber nicht ausschließlich) verwendet finite-state Maschinen machen Sie data driven.

Anstelle von verschachtelten switch/case

  switch (state)
     case A:
       switch (event):
         case e1: ....
         case e2: ....
     case B:
       switch (event):
         case e3: ....
         case e1: ....

Sie können ein 2d-array oder Funktionszeiger und einfach anrufen handleEvent[state][event]

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