Forum: Mikrocontroller und Digitale Elektronik Switch-Case


von Guest (Gast)


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!

von Ernst Heiter (Gast)


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.

von Uhu U. (uhu)


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);

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.