Forum: Compiler & IDEs Definieren von Stings in Assembler


von Hue \. (hue)


Lesenswert?

Hallo,

ich möchte Strings auf dem Drucker ausgeben. Das funktioniert prima, bis 
ich einen weiteren String definiere. Aber dann geht nichts mehr. Ich 
benutze den GNU-AS Assembler. Hier der funktionierende Code:
1
  2 #define ASSEMBLER 1
2
  3 #include <avr/io.h>
3
  4 .text
4
  5 temp:       .ascii  "Temperaturen der Solaranlage:\0"
5
  6 ;
6
  7 
7
  8 .equ        TWI_BIT_RATE,255
8
  9 .equ        TWI_PRESCALER,3
9
 10 main:
10
 11             rjmp     reset              ; RESET         0x0000
Dann füge ich eine neue Zeile ein, und dann kommen keine Zeichen mehr 
aus dem Drucker:
1
  2 #define ASSEMBLER 1
2
  3 #include <avr/io.h>
3
  4 .text
4
  5 temp:       .ascii  "Temperaturen der Solaranlage:\0"
5
  6 einheit:    .ascii  "Grad Celsius\0"
6
  7 
7
  8 .equ        TWI_BIT_RATE,255
8
  9 .equ        TWI_PRESCALER,3
9
 10 main:
10
 11             rjmp     reset              ; RESET         0x0000

Der auszugebende String soll auf der Adresse von "einheit" liegen.

Ich denke ich habe hier eine falsche Syntax benutzt, ich kenne mich mit 
dem GNU-AS Assembler noch nicht so gut aus.

Kann mir jemand helfen?

MfG

HUE

von Flo (Gast)


Lesenswert?

Erstmal wäre n bischen mehr info zur Schaltung / zum Programm ganz nett, 
kann mir grad nicht vorstellen, wie du nen Drucker an den avr hingehängt 
hast.

von holger (Gast)


Lesenswert?

>Hier der funktionierende Code:

 10 main:
 11             rjmp     reset              ; RESET         0x0000

Buhahahahahaahaha;)

von Hc Z. (mizch)


Lesenswert?

Die Syntax ist richtig.  Du hast 2 Strings mit 2 Labels definiert.  Das 
abschließende explizite \0 kannst Du Dir sparen, wenn Du .asciz 
verwendest.
Der Fehler muss also woanders liegen.

Wozu ist das #define ASSEMBLER 1 vor <avr/io.h> da?  io.h benötigt das 
nicht und für's Assembler-Programm ist
1
__ASSEMBLER__
 vordefiniert.  Der #define erscheint mir also recht überflüssig.

von Hue \. (hue)


Lesenswert?

Hallo,

zu sehen ist natürlich nur ein Codeausschnitt und nicht die vollen 200 
Zeilen. Da wird der i2c Bus gelesen, BCD Wandlung und so weiter. Das 
Problem liegt in der Definition der Strings. Soweit habe ich das ganze 
im Griff. Mir fehlt nur noch die Ausgabe von "Grad Celsius".

Zur Schaltung kann ich nur sagen, das ich sie aus dem Kopf gebaut habe, 
ich habe keinen Schaltplan zur Hand.

MfG

HUE

von Peter D. (peda)


Lesenswert?

Der Text steht doch im Codesegment.
Also entweder drüber weg springen oder hinter das Main setzen.
Warscheinlich ist der erste String zufällig durchlaufbar.


Peter

von Stefan E. (sternst)


Lesenswert?

Außerdem fehlt auch noch ein Aligning. Der zweite String hat eine 
ungerade Länge, und der GCC-AS hat keine "natürliche" Wortgrenze für das 
Flash. Der legt die 16-Bit-Opcodes des AVRs auch gnadenlos auf ungerade 
Adressen.

von Hue \. (hue)


Lesenswert?

Stefan Ernst schrieb:
> Außerdem fehlt auch noch ein Aligning. Der zweite String hat eine
> ungerade Länge, und der GCC-AS hat keine "natürliche" Wortgrenze für das
> Flash. Der legt die 16-Bit-Opcodes des AVRs auch gnadenlos auf ungerade
> Adressen.

Hallo,

leider kann ich diesen Ratschlag nicht umsetzen, hier muß man mir mit 
einem Beispiel helfen. Ich bin noch ein ziemlicher Anfänger um die Sache 
voll zu verstehen.

Habt vielen Dank für freundliche Hilfe!

MfG

HUE

von Stefan E. (sternst)


Lesenswert?

Volker Wolfram schrieb:
> leider kann ich diesen Ratschlag nicht umsetzen, hier muß man mir mit
> einem Beispiel helfen.

Hinter den Strings (oder halt da, wo wieder "richtiger" Code anfängt):
1
.balign 2

http://sourceware.org/binutils/docs/as/Balign.html

von Hue \. (hue)


Lesenswert?

Stefan Ernst schrieb:
> Volker Wolfram schrieb:
>> leider kann ich diesen Ratschlag nicht umsetzen, hier muß man mir mit
>> einem Beispiel helfen.
>
> Hinter den Strings (oder halt da, wo wieder "richtiger" Code anfängt):
>
1
.balign 2
>
> http://sourceware.org/binutils/docs/as/Balign.html

Hallo Stefan Ernst,

Hurra, Hurra, Hurra, es geht.

Hab vielen Dank nochmal, hast mir schon einmal aus der Klemme geholfen.

Bist halt ein Fuchs ;-).

MfG

HUE

von Stefan E. (sternst)


Lesenswert?

Volker Wolfram schrieb:
> hast mir schon einmal aus der Klemme geholfen.

Beitrag "Re: String aus ROM lesen mit GNU Assembler für ATmega8"

Und schon dort hatte ich dich darauf hingewiesen, dass du ein Auge auf 
das Aligning haben musst. ;-)

von Hue \. (hue)


Lesenswert?

Hallo nochmals,

es ist für einen Anfänger nicht ganz klar, was man so alles beachten 
muß. Ich habe mit dem GNU-AS für AVR noch keine Erfahrungen gemacht. 
Meine Programme waren bisher recht einfach und mit simplen Anweisungen 
zum Laufen gebracht worden.

Doch nun möchte ich ein paar Projekte realisieren, die zwar theoretisch 
funktionieren sollten, doch die Feinheiten wie Assember- Direktiven oder 
ähnliches kann ich mir NOCH nicht erklären und die ganze Doku in 
Englisch ist mehr etwas für einen Fachmann und nicht für Anfänger 
geeignet.

Ich könnte einen Tip für ein Buch oder eine PDF- Datei gebrauchen, in 
dem der GNU-AS für AVR leicht verständlich geschrieben ist, halt auch 
mit zahlreichen Beispielen.

Aber das soll für Sie nicht die Aufgabe sein, da muß ich mich schon 
selber einmal bemühen.

Einen schönen Abend noch...

MfG

HUE

von Karl H. (kbuchegg)


Lesenswert?

Volker Wolfram schrieb:

> Ich könnte einen Tip für ein Buch oder eine PDF- Datei gebrauchen, in
> dem der GNU-AS für AVR leicht verständlich geschrieben ist, halt auch
> mit zahlreichen Beispielen.

Ich will dir das nicht madig machen.

Aber warum willst du unbedingt den GNU-AS benutzen?
Du musst dich da um viele Dinge kümmern (wie zb Alignment), die dir der 
Assmebler des Herstellers alles abnimmt. Ganz abgesehen davon, dass es 
für den Assembler von Atmel zb hier im Forum wesentlich mehr 
Unterstützung gibt.

Und Portabilität (wie im Falle des GNU-C Compilers) ist auch kein 
Argument. Das was du mit GNU_AS für AVR lernst, kannst du bei einem 
Umstieg auf PIC sowieso wieder alles in die Tonne treten.

von Hue \. (hue)


Lesenswert?

Karl heinz Buchegger schrieb:
> Volker Wolfram schrieb:
>
>> Ich könnte einen Tip für ein Buch oder eine PDF- Datei gebrauchen, in
>> dem der GNU-AS für AVR leicht verständlich geschrieben ist, halt auch
>> mit zahlreichen Beispielen.
>
> Ich will dir das nicht madig machen.
>
> Aber warum willst du unbedingt den GNU-AS benutzen?
> Du musst dich da um viele Dinge kümmern (wie zb Alignment), die dir der
> Assmebler des Herstellers alles abnimmt. Ganz abgesehen davon, dass es
> für den Assembler von Atmel zb hier im Forum wesentlich mehr
> Unterstützung gibt.
>
> Und Portabilität (wie im Falle des GNU-C Compilers) ist auch kein
> Argument. Das was du mit GNU_AS für AVR lernst, kannst du bei einem
> Umstieg auf PIC sowieso wieder alles in die Tonne treten.

Hallo,

mein Betriebssystem für Netbook und Server ist eben nicht Windows oder 
Linux, sondern OpenBSD. Es ist sehr stabil und sehr sicher. Der Preis 
dafür ist eben die etwas kleinere Anzahl von Anwendungen die darauf 
laufen.

Für die Entwicklung von AVR- Systemen gibt es eben nur die AVR- GNU 
Werkzeuge und ich bin nicht mit C/C++ aufgewachsen sondern mit 
Assembler. Damals habe ich für den Z80 Programme geschrieben und so ist 
mir der Assembler lieber als die C/C++ Toolchain.

MfG

HUE

von Rolf Magnus (Gast)


Lesenswert?

> Für die Entwicklung von AVR- Systemen gibt es eben nur die AVR- GNU
> Werkzeuge

http://avra.sourceforge.net/

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.