mikrocontroller.net

Forum: Compiler & IDEs AVR32 eine Struktur mit switch identifizieren?


Autor: Billy __ (slowflyer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verwende als Vorlage für ein Menü: 
Beitrag "LCD - Menu".

Meine Frage ist folgende: gibt es einen eleganteren Weg in der exec-Fkt 
die Menüpunkte zu unterscheiden, als in der Struktur eine eindeutiges 
int Feld mittels enum anzulegen und später in der exec per switch case 
Aktionen zu starten?

Meine ursprügnliche Idee war: die Strukturen liegen im RAM und haben 
versch. Adressen. Der Compiler meckert aber wenn ich die Adresse der 
Struktur als switch Element verwenden möchte. Gibt evtl. eine Mögl. in 
der Richtung?

Autor: Marius Wensing (mw1987)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du uns keinen Sourcecode zeigst, dann können wir schlecht sagen, 
was falsch ist.

MfG
Marius

Autor: Billy __ (slowflyer)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Im Anhang die main.c. Schaut euch da die exec_menu an, es gibt da 2. 
Varianten eine mit einer extra ID (die nehm ich zur Not) und eine 
andere, die der Compiler nicht zulässt. Vielleicht kennt jemand eine 
elegantere Lösung.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zitat aus dem Code:

>  //hier war meine Idee über switch(current) zu unterscheiden

Autor: fbi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Zur Not kann man den Pointer auch nach int casten.
Du könntest statt Deiner extra ID aber auch einen Funktionspointer in 
Deine Struktur mit einbauen und darüber in exec_menu direkt die passende 
Funktion aufrufen. Dann sparst Du Dir das komplette Switch-Statement. 
(siehe Anhang)

CU

Autor: Billy __ (slowflyer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
fbi wrote:
> Zur Not kann man den Pointer auch nach int casten.
> Du könntest statt Deiner extra ID aber auch einen Funktionspointer in
> Deine Struktur mit einbauen und darüber in exec_menu direkt die passende
> Funktion aufrufen. Dann sparst Du Dir das komplette Switch-Statement.
> (siehe Anhang)
>
> CU

Ah, das ist ne gute Idee, THX

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal ne Frage: Warum initialisierst du die Tabelle erst zu Laufzeit?

Das ist doch extrem codehungrig.

Autor: Willi K (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na weil ich die evtl. zur Laufzeit ändern möchte. Je nachdem ob die 
Menüpunkte benötigt werden oder nicht.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist aber kein Grund. Wenn ein Menüpunkt nicht benötigt wird, dann 
wird der Code erstens dennoch gebraucht, und zweitests könntest du es 
nicht dynamisch nachladen (woher auch).

Ergo: Alle Menüpunkte werden initialisiert und die aktiv geschaltet, die 
gebraucht werden bzw. ein Menue verweist nur auf die Menüpunkte, die 
gerade aktiv sind.

Die Initialisierung macht man statisch.

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.