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


von Uli H. (ulihuber)


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

von marc (Gast)


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

von Uli H. (ulihuber)


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

von Peter D. (peda)


Lesenswert?

Definiere für nicht implementierte Schalter nen Leerstring:
1
#define M1      "Hallo"
2
#define M2      "x"
3
#define M3      ""              ; leer
4
#define M4      "z"
5
6
        .db     M1 \
7
                M2 \
8
                M3 \
9
                M4 \
10
                , 0


Peter

von Uli H. (ulihuber)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.