Hallo,

ich bin neu hier und möchte mich kurz vorstellen. Ich bin mit dem Abi fertig und möchte jetz ein Studium in Elektro- und Informationstechnik beginnen. Ich habe als ich 10 Jahre alt war begonnen mit QBasic zu programmieren. Ich hatte damals ein Interface von meinem Vater bekommen und über QBasic verschiedene Dinge gesteuert. (Weichen für die Modelleisenbahn, einen Roboterarm und verschiedene kleine Erfindungen). Dannach habe ich mit Blitz Basic weiter gemacht und als ich 14 war mit C++ angefangen. (Dannach folgten noch zig andere Sprachen) Inzwischen habe ich viel Zeit mit dem Schreiben von Anwendungsprogrammen, meist für Freunde aber auch für eine Firma, verbracht. Nun bin ich zu einem riesigen Metallgehäuse gekommen, was früher einen Endpunkt für den Betriebsfunk beinhaltete und möchte nun ein Computersystem aus AVRs hinein basteln. Das gehäuse funktioniert mit Einschubteilen, ist also sehr praktisch. Es soll einen Haupt(AVR)prozessor, eine Soundkarte, eine Grafikkarte und ein riesiges Interface mit möglichst vielen digitalen und analogen, bidirektionalen Ports geben. Mal sehen, was mir sonst noch so einfällt. Es ist noch viel platz.

Aber bis sahin muss ich erstmal viel Erfahrung auf dem Gebiet des AVR-Assemblers sammeln und deshalb hier schon das erste Problem:


Ich möchte eine Menüführung mit einem ATmega16 machen, die über 4 Tasten gesteuert wird und deren Ausgabe über ein LCD erfolgt.

Da der AVR nebenbei noch viele andere Aufgaben erledigen soll muss das Programm sehr effizient sein und nach jeder Tastenbedienung wieder in die Hauptschleife zurück kehren.

Ich habe mir eine schöne Menüstruktur überlegt und im prinzip bekommen ja die vier Tasten in jedem Menü andere Bedeutungen.

Nun habe ich eine Variante begonnen, bei der das Vorher aufgerufene Menü eine Nummer in den SRAM schreibt und dann beim nächsten mal eine riesige Liste von Comparebefehlen für jede Menünummer und jede Taste für die als nächstes anzuspringende Marke abgearbeitet wird. Ich glaube schlimmer gehts fast nich mehr...

Ich habe noch eine andere Idee, die mir günstiger erscheint. Bisher habe jedoch noch keinen Weg gefunden das umzusetzten.
Ist es möglich die Adressen der vom aktuellen Menü führenden Sprungmarken für jede der tasten in den SRAM zu schreiben? Kann ich also dem Assembler sagen, dass er den Wert von z.B. der Marke "Menue3:" in ein Register laden soll und dann bei der Tatsenbetätigung den Wert zum Anspringen der Programmzeile verwenden?

z.B.:
Ich bin in Menü 2 und sage ihm in dessen Routine er soll in R16 die Adresse für "Menue3:" und in R17 die für "Menue1:" schreiben. Dann schiebe ich die in den SRAM und bei drücken der OK Taste geht es in Menü 3 und bei Cancel wieder in Menü 1.

Im Prinzip sind Sprungmarken ja Konstanten, die sich nur bei Änderungen im Quelltext ändern.
Würde das so funktionieren? Wenn nicht, wie kann man sowas noch umsetzen? Muss man die Werte für die Sprungmarken selbst heraussuchen und bei jeder Programmänderung neu definieren?

Vielen herzlichen Dank im Vorraus
Steffne