Zeichenketten (Strings) stellen eine wichtige Datenstruktur in
Mikrocontroller-Programmen dar. Oft geht es um deren Ausgabe
auf ein Display oder die serielle Schnittstelle.
Daher folgen Hinweise fĂĽr einen effektiven Umgang damit.
Ein C-Compiler ermöglicht auch die Ablage konstanter Zeichenketten
im Datensegment, erzeugt dafĂĽr allerdings unsinnigen Startup-Code!
Wie man esordentlich hinbekommt steht in der Beschreibung des
C-Compilers, die deswegen unbedingt durchgelesen werden muss.
Oft stehen dazu Nicht-ANSI-Schlüsselwörter wie
code zur VerfĂĽgung:
static const code str[]="String";
Oder aber Ihr C-Compiler wirft static const
automatisch ins Kodesegment, dann haben Sie weniger Arbeit.
Oder es existiert ein Kommandozeilenschalter dafĂĽr usw. usf.: RTFM!
FĂĽr die Zeiger-Ăśbergabe gelten ebenfalls gesonderte Regeln.
Nur bei Von-Neumann-Prozessoren (bspw. C166) entfällt dieser Ärger.
puts: ;R8=Str mov rl4,[r8+]
or rl4,rl4
jz puts_e
call putchar ;R4=Zeichen jmp puts
puts_e:
ret
void puts(constchar*str) {
while (*str) putchar(*str++);
}
ostr:
pop dph
pop dpl
call puts
jmp @a+dptr ;ZurĂĽck (a=0)
unmöglich
ostr:
pop zh
pop zl
add zl,zl
adc zh,zh ;BYTEadressercall puts
adiw zl,1;aufrundenlsr zh
ror zl ;WORTadresseijmp
nicht möglich
Die dritte Zeile dieser Tabelle enthält Beispielkode für das bequeme Notieren
der Zeichenkette hinter dem Funktionsaufruf(!), man braucht durch diese
implizite Adressierung keine Marke setzen und Adresse laden.