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
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.
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.
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
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
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.
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
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):
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
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
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.
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