Hi Leute,
ich besitze mehrere Asemblerprogramme, geschrieben für den AVR-GCC im
Assembler-Modus.
Ich versuchte den AVR-GCC zu installieren, aber bei meinem PC
funktioniert es einfach nicht - im Gegesatz zum WAVRASM, der einwandfrei
auf meinem PC läuft.
Da ich kein begeisterter Assemblerfreund bin, meine Frage: Gibt es eine
Möglichkeit, automatisch meine Programme vom AVR-GCC (Assembler-Modus)
zum WAVRASM zu konvertieren
ohne aber Zeile für Zeile bearbeiten zu müssen?
Für Infos wäre ich dankbar,
bis
hähh du bist kein freund von assembler und willst gcc code nach
assembler umwandeln?....
wenn ich das so verstehe wie ich meine schau mal hier:
http://www.mikrocontroller.net/avr-gcc-faq.htm
Also ich bin ja keiner von diesen Assembler-Freaks, aber meines Wissens
gibt es kein Tool, das eine automatische Umsetzung vom Format des
GNU-Assemblers (avr-as.exe) auf das Format des Atmel-Assemblers (avrasm
bzw. wavrasm) durchführt. Ich habe auch extra nochmal im Internet
nachgeschaut.
Andererseits sollte es aber auch kein Problem sein, den avrgcc zu
installieren. Sehrwahrscheinlich sind diese Assembler-Dateien auch nicht
vollständig, d.h. sie benötigen sehrwahrscheinlich mindestens noch den
zusätzlichen Initialisierungscode, der sich beim avrgcc in der Datei
gcrt1.S befindet.
@harry
Du kannst ja mal die Probleme genau beschreiben, die du bei der
Installation hast, vielleicht können wir dir ja helfen.
Notker
Hi Leute,
ich war mal eben beim Weihnachtsmann und konnte Euch vorher nicht
antworten!
Wenn ich den installierten GNU-Assembler mit "avr-as.exe" aufrufe,
erscheint ein DOS-Fenster, und das war alles. Wenn ich was ins Fenster
reinschreibe, egal was, und dann mit "enter" bestätige, verschwindet
mein DOS-Fenster und alles kehrt wieder
zurück zum Windows XP.
So wie ich's verstanden habe, arbeitet "avrgcc" nur im DOS-Modus. Nun,
ich finde zwar DOS hervorragend und habe auch speziell einen älteren PC
damit eingerichtet. Mein "wavrasm" läuft aber auf einem anderen PC,
unter Windows XP und in diesem Modus hätte ich eigentlich gerne
gearbeitet.
Einer der Programme die ich assemblieren wollte, ist das Programm
"minidds.asm" von den Jasper's AVR pages
"http://www.myplace.nu/avr/index.htm".
Ich denke aber mir bleibt nichts anderes übrig, als jede Assemblerzeile
dem wavrasm anzupassen.
Auf jeden Fall, danke für Eure Bemühungen.
bis
Du musst auf der Kommandozeile (cmd.exe) folgendes eingeben:
avr-gcc -mmcu=at90s2313 -x assembler-with-cpp minidds.asm
Mit DOS hat das übrigens nichts zu tun, auch wenn's so aussieht.
Hi Andreas,
jetzt bin ich aber stutzig geworden! Die "cmd.exe" existiert überhaupt
nicht auf meinem PC. Ich habe den AVRGCC aus der Datei
"avrgcc20011121a.exe" entpackt und installiert. Das ist doch die
richtige Datei, oder?
bis
Hi Leute,
diese Feiertage sind Schwerstarbeit...
Also bei mir funkt der AVR-GCC einfach nicht, und das ist gut so:
weniger Müll auf meinem PC!
Ich habe die Beispielsdatei (minidds.asm) für den WAVRASM angepasst. Es
war einfacher als ich dachte und läuft prima!
Ich danke euch für alles,
bis
Nun ja, wie wäre es, das Problem stattdessen mal zu
analysieren? Insbesondere wäre statt ,,ich habe ein
Problem'' eine aktuelle Beschreibung des Problems (welche
Fehlermeldungen gibt es, was genau hast Du versucht
auszuführen) sehr viel angebrachter. Warum muß ich das
eigentlich jetzt höchstpersönlich für Euch nachvollziehen,
obwohl ich doch eigentlich das Problem gar nicht selbst
habe? Ich denke, hier seid Ihr einfach Eurer Mitwirkungspflicht
nicht so recht nachgekommen...
Dieses Teil ist offenbar für eine alte Version des avr-gcc
geschrieben. In der aktuellen Version muß man dafür:
. #include <io2313.h> in #include <avr/io.h> umbenennen
. Eigentlich müßte man alle IO-Register-Zugriffe umschreiben
auf die Benutzung von __SFR_IO8() etc. umschreiben, wie in
http://savannah.nongnu.org/download/avr-libc/doc/avr-libc-user-manual/group__avr__sfr__notes.html
beschrieben. Alternativ der Kompatibilitäts-Hack, der dort
auch steht:
#define __SFR_OFFSET 0
vor obiges #include schreiben. Dann compiliert es.
. Die Bemerkung mit dem preprocessed assembler ist nicht
sonderlich anfängerfreundlich. Klar muß man es durch
den Präprozessor schicken, bevor man es dem Assembler
füttert, damit die C-Präprozessor-Anweisungen (#include
sowie all die Registernamen) aufgelöst werden. Dafür
genü?t es übrigens, wenn man die Datei nicht auf .asm,
sondern auf .S (großes S) enden läßt und den Compiler
auch so (mit dem großen .S) aufruft. Aber: das Progrämmchen
benutzt keinerlei C-Laufzeitsystem, sondern schreibt all
seine Interruptvektoren selbst. Damit knallt es dann mit
einer undefinierten Referenz auf main(), die das
C-Laufzeitsystem haben möchte. (Wenn man RESET in main
umbenennt, wird man die zwar los, aber funktionieren wird
es trotzdem nicht, weil ja der Interruptvektor für die
UART noch nicht hinhaut). Folglich muß man zwar den
Compiler mit Präprozessor zum Assemblieren nehmen, aber
das Linken dann mit der Hand anwerfen:
avr-gcc -mmcu=at90s2313 -c minidds.S
avr-ld -mavr2 -o minidds.out minidds.o
Danach dann mit avr-objcopy in gewohnter Weise ein
Hexfile draus machen.
Ist gewissermaßen vom Autoren ein bißchen zum Mitdenken
geschrieben worden, so wie das bei Jesper da auf der Seite
geschrieben steht... Vielleicht war das ja Absicht? ;-)