www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Switch-Case


Autor: Guest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab mal ne Frage ...

ich habe in meinem 8051 eine relativ große Switch-Case Anweisung (ca. 
100 Werte). Ich bekomme also einen Befehl (1 Byte) und den vergleiche 
ich in der Switch-Case anweisung und haue dann 3 Byte raus ....

switch(befehl)
{
 case 1: ...
   break;
 case 2: ...
   break;
   .
   .
 case 100: ...
   break;
}

das ist sehr unübersichtlich. Gibt es eine möglichkeit das 
Eleganter/Übersichtilcher zu lösen? Wie sieht es mit der Geschwindigkeit 
aus? Ist es da egal wie viele Case-Bedingungen man hat (z.B. in c# aufm 
pc ist es egal)

Danke!

Autor: Ernst Heiter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Gibt es eine möglichkeit das
>Eleganter/Übersichtilcher zu lösen?

Tabelle, indiziert mit "befehl"?

>Wie sieht es mit der Geschwindigkeit
>aus? Ist es da egal wie viele Case-Bedingungen man hat (z.B. in c# aufm
>pc ist es egal)

In der Regel ja. Wird von Compiler in eine Sprungtabelle umgesetzt.

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der switch selektiert für jeden Entscheidungswert ein separates Stück 
Code.

Wenn sich dieser Codeschnipsel nur durch ein paar Parameter 
unterscheiden, dann brauchst Du keinen switch, sondern Du schreibst den 
Ausgabecode nur einmal und besorgst Dir die Werte aus einem Array, in 
das Du mit befehl indizierst:

struct {
   char   w1;
   char   w2;
   char   w3;
   ...
} AusgabeArray[100] = {
  { 1, 5, 3 },  // befehl 0
  { ........},  // befehl 1
   ...
  { ........}   // befehl 100
};

  Ausgabe(AusgabeArray[befehl].w1);
  Ausgabe(AusgabeArray[befehl].w2);
  Ausgabe(AusgabeArray[befehl].w3);

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.