www.mikrocontroller.net

Forum: Compiler & IDEs Definieren von Stings in Assembler


Autor: Hue \a (hue)
Datum:

Bewertung
0 lesenswert
nicht 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:
  2 #define ASSEMBLER 1
  3 #include <avr/io.h>
  4 .text
  5 temp:       .ascii  "Temperaturen der Solaranlage:\0"
  6 ;
  7 
  8 .equ        TWI_BIT_RATE,255
  9 .equ        TWI_PRESCALER,3
 10 main:
 11             rjmp     reset              ; RESET         0x0000
Dann füge ich eine neue Zeile ein, und dann kommen keine Zeichen mehr 
aus dem Drucker:
  2 #define ASSEMBLER 1
  3 #include <avr/io.h>
  4 .text
  5 temp:       .ascii  "Temperaturen der Solaranlage:\0"
  6 einheit:    .ascii  "Grad Celsius\0"
  7 
  8 .equ        TWI_BIT_RATE,255
  9 .equ        TWI_PRESCALER,3
 10 main:
 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

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Hier der funktionierende Code:

 10 main:
 11             rjmp     reset              ; RESET         0x0000

Buhahahahahaahaha;)

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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
__ASSEMBLER__
 vordefiniert.  Der #define erscheint mir also recht überflüssig.

Autor: Hue \a (hue)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hue \a (hue)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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):
.balign 2

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

Autor: Hue \a (hue)
Datum:

Bewertung
0 lesenswert
nicht 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):
>
.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

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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. ;-)

Autor: Hue \a (hue)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hue \a (hue)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Magnus (Gast)
Datum:

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

http://avra.sourceforge.net/

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.