Menübibliothek in ASM

Gast #1474719
Hallo zusammen,
ich muss eine größere Menüstruktur auf einen Atmega in
Assembler abbilden.
Habe dabei statische Menüeinträge, teilweise aber auch
dynamische Einträge ( weitere Punkte können angefügt oder
gelöscht werden ). Dummerweise haben genau diese dynamischen
Einträge auch nochmal 2 Ebenen Untermenüs...

Mein erster Gedanke war eine "Case"-Lösung. Da tippe ich mir
aber die Finger wund bei der vorgegebenen Struktur.

Habe schon einiges durchsucht. Bin aber bisher noch nicht
auf eine "universelle Bibliothek" gestossen.

Kann mir hier vielleicht jemand helfen ?

Danke,
Pepe.
Gast
in ASM nicht ...

aber ein array von strukturen  die menüpunkte darstellen und bei 
aktionen auf eine funktion zeigen
man kann dann einträge ins das array schreiben und schon fertig
Gast
mein Problem ist, dass wir mittlerweile
ca. 30 verschiedene Schaltungen mit den unterschiedlichsten
Anwendung auf Atmega's haben.
Wir haben mittlerweile richtig viele einzelne "Teillösungen"
für unsere täglichen Programmieraufgaben, aber alles in Assembler.

Somit kann ich aus der Ecke nicht wirklich raus...
Pepe schrieb:
> Wir haben mittlerweile richtig viele einzelne "Teillösungen"
> für unsere täglichen Programmieraufgaben, aber alles in Assembler.

Es ist gar nicht sooo unüblich, Teile des Codes in Assembler zu haben 
und andere Teile in C. Gerade wenn C für den entsprechenden Zweck besser 
geeignet ist, sehe ich eher wenig Sinn darin, hart auf Assembler zu 
bestehen?

Siehe auch: Tinykon
Gast
Geb ich Dir vollkommen recht. Da wäre C sicherlich der bessere
Ansatz.
Nur haben wir in dem aktuellen Projekt knappe
17000 Zeilen in Assembler.

Wie kann ich eigentlich außer als inline ASM Assembler in ein
C Projekt einbinden ?
In C ganz einfach. Du lässt die Assembler-Dateien ganz normal in 
Objektcode übersetzen, erzeugst eine Headerdatei mit den 
Funktionsdeklarationen und gibst die Objektdatei als Quelle beim Linken 
mit an.

Bei C++ packst du den Header in ein 'extern "C" {}' ein.
(Damit der Linker die Funktionen findet und nicht nach den verkleideten 
C++ Namen sucht)


So kannst du aber auch andersherum C Code in ein Object-File compilieren 
und anschliessend in ein Assemblerprojekt beim Linken als weiteres 
Objekt angeben um die darin enthaltenen Funktionen aus dem Assemblercode 
nutzen zu können.
Gast
Hi!
>Habe dabei statische Menüeinträge, teilweise aber auch
>dynamische Einträge ( weitere Punkte können angefügt oder
>gelöscht werden ). Dummerweise haben genau diese dynamischen
>Einträge auch nochmal 2 Ebenen Untermenüs...
Ich denke das ist kein Problem der Prog.sprache sondern ein 
Konzeptproblem.
Statische Menüs sind ja kein Probl., dynamische schon. Wenn die max. 
Anzahl
dyn. feststeht geht das Ganze auch noch über einfache Statusbits und 
Adresszeiger(Menueintrag) die zum jeweiligen Menue gehören.
Wenn aber absolut dynamisch, dann ist richtig Hirnschmalz gefragt, weil 
du
ja alle möglichen Grenzen austesten musst. Ich will jetzt nicht 
ketzerisch
sein, aber es könnte durchaus sein das das in C sogar sehr
speicherfressend wird. Du kommst aber aus der ASM-Ecke und kannst
vermutlich gut beurteilen wie das von dir gewollte umgesetzt wird.

Viel Erfolg, Uwe

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.