www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Versionskennzeichnung mit AVR Studio Assembler 2


Autor: Uli Huber (ulihuber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe einen Assemblercode, den ich mit verschiedenen Optionen 
assemblieren kann. Diese stecken in Defines, im Beispiel:
#define Version "12.34 "
.set  Schalter1 = 'e'
.set Schalter2 = 'x'

Nun möchte ich einen Startup-Prompt haben, der diese Optionen anzeigt.
Wenn beide Schalter gesetzt sind ist das ja kein Problem:

PromptMessage: .db "SoftwareXY ",Version,Schalter1, Schalter2," (c)"

Habe ich aber nun einen Schalter nicht aktiv, stolpert der Assembler 
über den fehlenden Wert.
Hat einer eine Idee wie man das behebt ?

Danke und Gruß
Uli

Autor: marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So:
#if (Debug != 0)
  #message "*** Debug eingeschaltet"
#endif
Einfach mehrere .db Strings mit if-Abfragen aneinanderformatieren.
Sieht allerdings extrem Sch.. aus!

Grüße
marc

Autor: Uli Huber (ulihuber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...ich will ja nicht undankbar sein, aber mit verschiedenen Zeilen und 
#if's kann ich es auch....
Aber wenn das nicht zwei sondern fünf Schalter mit beliebigen 
Kombinationen sind, wird's ein bisserl länglich.

Ich suche also eine Möglichkeit, im Präprozessor einzelne Character zu 
einem String zusammenzubauen.

Gruß
Uli

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Definiere für nicht implementierte Schalter nen Leerstring:
#define M1      "Hallo"
#define M2      "x"
#define M3      ""              ; leer
#define M4      "z"

        .db     M1 \
                M2 \
                M3 \
                M4 \
                , 0


Peter

Autor: Uli Huber (ulihuber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

vielen Dank, das hat mich ein bisserl weiter gebracht.

Aber gleich darauf folgte das zweite Problem:

Wenn ich die Optionen als Strings definiere, kann ich sie nicht mehr mit 
#if-Statements  für die bedingte Assemblierung nutzen.

Mit Assemblerdirektiven würde das gehen, da dort auch ein Typ Char 
erlaubt ist:
.set Schalter = 'A'
.if Schalter == 'A'
  ----code----
.endif

Nun kann ich nicht in eine Schachtel mit  Assemblerdirektiven etwas für 
den Präprozessor packen, da dieser immer zuerst läuft und somit die 
#defines unabhängig von den Bedingungen der Assembler-Direktiven alle 
sequenziell abgearbeitet werden.

Ich helfe mir im Moment mit einem numerischen Schalter im Präprozessor, 
aber so richtig elegant ist das irgendwie nicht.

Gruß
Uli

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.