mikrocontroller.net

Forum: Compiler & IDEs Mal wieder: Menüsystem


Autor: Sven S. (schwerminator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo liebes Forum,
ich bin nun schon seit Wochen mit einer einfachen Menüstruktur 
beschäftigt, die folgende Features haben soll:

* Im Flash niedergelegt
* Markieren des aktuell selektierten Eintrags mit Sternchen o.ä.
* Automatisches Scrollen
* Bei Anwahl eines Eintrags wahlweise ein Submenü oder eine Funktion
* 3-Tasten-kompatibel (d.h. Hoch, Runter, Enter)
* Passend für mein Display (16x3)
* C

Alle Kriterien werden im Grunde (inkl. leichter Anpassungen) vom 
Tinymenu, geschrieben von Tymm Twillman 
(http://www.avrfreaks.net/index.php?module=Freaks%2...), 
erfüllt. Nur werden dort die Strings im RAM statt im ROM gespeichert. 
Stundenlang habe ich versucht das Ganze von Flash umzustellen, mit dem 
Resultat, dass nichts mehr ging. Schlussendlich habe ich voller Frust 
alle Files wieder verworfen. Ich komme einfach ncht mit den ganzen 
Pointern, Arrays und Strukturen zurecht.
Weitere Recherche im Forum und Netz brachte da auch nichts. Nun bin ich 
im Grunde auf der Suche nach einer Komplettlösung (sowas müsste es doch 
geben...) oder jemandem, der sich die Zeit nimmt das Tinymenu mal 
anzusehen und beurteilen würde, ob sich ein erneuter Anlauf des 
Umschreibens lohnen würde und wo genau man ansetzen müsste. Ich hoffe 
jemand kann mir helfen oder sogar mir sein eigenes funktionierendes 
System zur Verfügung stellen. Danke.

Frohe Weihnachten wünscht Sven

Autor: Stefan B. (stefan) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir das Archiv angesehen. Leider ist keine Doku dabei. Und es 
scheinen Quellen zu fehlen, jedenfalls kompiliert tinymenu_test.c nicht 
soweit, dass man mit einer Simulation des Istzustandes starten kann 
bevor man zum Wunschzustand umbaut.

Was ich sehe: In dem Tinymenu kann man die Strings (entry.name) im Flash 
ablegen. Andere Mitglieder der Menüstruktur werden im Programmablauf 
verändert, um die aktuelle Position im Menü nachzuführen. Man kann also 
in dieser Library nicht das komplette Menü im FLASH halten.

Die fehlenden Sourcen habe ich durch Dummys ersetzt und dann mit AVR 
Studio 4.121 SP2/WiNAVR 20071222 für den Modell-AVR Atmega32 ohne 
Optimierung kompiliert.

Die Simulation geht zunächst schief, weil in tinymenu_test.c die 
Menüstrukturen falsch aufgebaut sind (zig Nullpointer). Nachdem das 
korrigiert wurde, sehe ich eine vernünftig aussehende Arbeitsweise bei 
meinem Breakpoint in der Dummy/Debugfunktion lcd_putchar().

Dann das Umschreiben auf STRINGS_IN_FLASH. Diese Codeteile lassen sich 
mit diesem #define in tinymenu.h an- oder abschalten. Dort gibt es auch 
noch ein weiteres #define zu Debugzwecken. Im Prinzip bin ich streng 
nach der Anleitung in AVR-GCC-Tutorial vorgegangen.

Am besten sieht man die Änderungen beim Durchtracen im 
Einzelschrittmodus. An den wichtigen Stellen habe ich lokale Puffer 
eingerichtet, die die gerade aus dem Flash kommenden Daten aufnehmen und 
kontrollierbar machen. Meine Version von AVR Studio schafft es nicht im 
Watch-Fenster die Daten im Flash anzuzeigen, wenn man per Pointer darauf 
zugreifen will.

Leider ist es mir auch nicht gelungen, die Daten byteweise aus dem Flash 
zu holen (per pgm_read_byte()). Es interessiert mich wieso. Ich bin dann 
auf strncpy_P() bzw. strcpy_P() ausgewichen. Der dafür benötigte Puffer 
ist eine Menüzeile gross aber lokal auf dem Stack, d.h. kurzlebig.

Insgesamt ist der Platzersparnis im RAM (ohne den lokalen Puffer 
gerechnet): 9 x 16 Bytes für die Zeichen in den Strings - 9 x 2 Bytes 
für die Pointer im RAM auf die Strings im FLASH = 126 Bytes.

Die Datei im Anhang ist der komplette AVR Studio Projektordner von mir. 
Die Pfade in der Projektdatei sind auf 
e:\elektronik\sb_avr\tinymenu_test\... bezogen. Achtung: Wegen der 
Dummyfunktionen darauf achten, dass keine eigenen Dateien 
überschrieben werden. Eigenen Projektordner anlegen oder Original 
backuppen!

ADD: In der Artikelsammlung ist ein weiteres Menüsystem: Tinykon. 
Ich habe selbst aber keine Erfahrung damit.

Autor: Sven S. (schwerminator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan,
ersteinmal vielen Dank dafür, dass du dich so ausgiebig mit meinem 
Anliegen befasst hast. Ich werde mir deine Ergebnisse morgen in Ruhe mal 
anschauen. Auch vielen Dank für den Link zu Tinykon, kannte ich noch gar 
nicht.

mfG, Sven

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.