Forum: Mikrocontroller und Digitale Elektronik AVR - Fehlermeldung beim Übersetzen von Assembler für ATmega644


von nougad (Gast)


Lesenswert?

Hallo zusammen,

ich müsste unter Linux Assembler für einen ATmega644 übersetzen. Bisher 
habe ich für andere Controller avra verwendet. Allerdings bekomme ich 
mit ATmega644 einige Fehler:
1
AVRA: advanced AVR macro assembler Version 1.2.3 Build 1 (15. November 2007)
2
3
...
4
5
Pass 1...
6
m644def.inc(40) : Error   : Unknown mnemonic/macro: #ifndef
7
m644def.inc(41) : Error   : Unknown mnemonic/macro: #define
8
m644def.inc(44) : Error   : Unknown mnemonic/macro: #pragma
9
m644def.inc(47) : Error   : Unknown device: ATmega644
10
m644def.inc(48) : Error   : Unknown mnemonic/macro: #pragma
11
m644def.inc(53) : Error   : Unknown mnemonic/macro: #pragma
12
m644def.inc(1042) : Error   : Unknown mnemonic/macro: #pragma
13
m644def.inc(1043) : Error   : Unknown mnemonic/macro: #pragma
14
m644def.inc(1044) : Error   : Unknown mnemonic/macro: #pragma
15
m644def.inc(1045) : Error   : Unknown mnemonic/macro: #pragma
16
m644def.inc(1045) : Maximum error count reached. Exiting...


Verwendet habe ich dabei eine Include Datei welche ich hier im Forum 
gefunden habe[1]. Wenn ich mir die Devices auflisten lasse (avra 
--devices) dann wird dort auch der m644 nicht gelistet und somit wohl 
auch nicht von avra unterstützt. Das würde auch die Fehler erklären.

Ich habe noch tavrasm verwendet allerdings beschwert der sich ebenfalls 
über den unbekannten m644. Allerdings bekomme ich hier ein HEX File 
welches allerdings nicht so ganz stimmt (Checksumme passt nicht ganz: 
z.B. :020000020000FC).

Kennt jemand noch ein anders Programm mit dem ich vielleicht mehr Erfolg 
habe? Oder habe ich nur was falsch gemacht?

Vielen Dank schon mal im voraus!

Grüße
nougad

[1] Beitrag "woher Registerdefinitionen für mega644?"

von Bernhard M. (boregard)


Angehängte Dateien:

Lesenswert?

Hi,

der AVRA kann die C-Präprozessoranweisungen nicht, kommentier doch mal 
alle Zeilen in m644.inc, die mit # anfangen aus, und probiers nochmal 
(so wie im Anhang...)

Gruß,
Boregard

von Oliver (Gast)


Lesenswert?

>Kennt jemand noch ein anders Programm mit dem ich vielleicht mehr Erfolg
>habe?

Windows?

Mag jetzt unschön klingen, aber AVRStudio funktioniert dort einfach.

Oliver

von Hannes L. (hannes)


Lesenswert?

> Verwendet habe ich dabei eine Include Datei welche ich hier im Forum
> gefunden habe

Die Include-Datei gehört zum Lieferumfang von AVRASM2 (AVR-Studio, 
Windows) und funktioniert damit bestens. Wie kommst Du auf die Idee, 
dass Fremdprogramme auf Fremd-Betriebssystemen damit zurecht kommen 
müssen? Ich denke, dass Dein Windows-Boykott lächerlich ist.

...

von Bernhard M. (boregard)


Lesenswert?

Hannes Lux schrieb:
>> Verwendet habe ich dabei eine Include Datei welche ich hier im Forum
>> gefunden habe
>
> Die Include-Datei gehört zum Lieferumfang von AVRASM2 (AVR-Studio,
> Windows) und funktioniert damit bestens. Wie kommst Du auf die Idee,
> dass Fremdprogramme auf Fremd-Betriebssystemen damit zurecht kommen
> müssen? Ich denke, dass Dein Windows-Boykott lächerlich ist.
>
> ...

Na ja, nicht jeder mag sich ein Windows kaufen und installieren und sich 
darin einarbeiten um AVR Programmierung zu machen ;-)

von Oliver (Gast)


Lesenswert?

>Na ja, nicht jeder mag sich ein Windows kaufen und installieren und sich
>darin einarbeiten um AVR Programmierung zu machen ;-)

Für ein einmaliges Übersetzen einer Sourcedatei ist das auch nicht 
erforderlich. Irgendwo kennt man immer einen, der einen kennt, der mal 
von einem gehört hat, der einen Windows-PC besitzt. So ganz selten 
sollen die ja nicht sein.

Wenns ums regelmäßige Entwickeln von Software geht, darf sich jeder 
gerne selber die richtigen Werkzeuge aussuchen.

Oliver

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

nougad schrieb:

> ich müsste unter Linux Assembler für einen ATmega644 übersetzen. Bisher

Zuerst solltest du mal darüber klar werden, daß Assembler nicht 
Assembler ist (auch wenn's um dne gleichen µC geht)!

Es gibt GNU-Assembler für AVR, einen Assembler von Atmel und diverse 
andere. Jeder dieser Assembler kennt andere Direktiven und Funktionen 
(wie lo8() etc) und teilweise auch Mnemonics.

Das von dir gescilderte Problem bruhr darauf, daß vor dem Assemblieren 
ein Präprozessor über die Quelle laufen soll. Wenn dein Assembler das 
nicht automatisch veranstaltet, dann musst du es eben von Hand machen, 
indem du dir den Präprozessor besorgst und im Makefile oder wo auch 
immer das Präprozessing machst.

Allerdings gilt selbst danach das Gesagte über die unterschiedlichen 
Assembler. Du musst also den richtigen Assenbler besorgen, und wenn's 
den für dein OS nicht gibt die Quelle auf einen verfügbaren Assembler 
portieren oder anderen Code hernehmen.

Johann

von Stefan E. (sternst)


Lesenswert?

Du kannst auch problemlos den original Atmel Assembler mit Wine 
benutzen.
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=74685

von Hannes L. (hannes)


Lesenswert?

> Na ja, nicht jeder mag sich ein Windows kaufen

Hier gilt eigentlich das Gleiche wie bei der Bastelei: Entweder man 
kommt mit den kostenlos verfügbaren Informationen (und dem eigenen 
Wissen) zurecht, oder man muss die entsprechenden Dinge (Geräte, 
Windoof) eben kaufen.

> und installieren und sich
> darin einarbeiten um AVR Programmierung zu machen ;-)

Naja, Windoof gibt es auch als "Abfall" (z. B. mit einem älteren 
gebrauchten Rechner), es muss ja nicht gleich die neueste Version sein.

Ich habe ja nichts gegen Linux, auch nicht gegen deren Macher und 
Benutzer, ich finde es aber lächerlich, wenn man es auf Biegen und 
Kotzen (äähh Brechen) auch da benutzen will, wo es (noch) 
kontraproduktiv ist, ohne in der Lage zu sein, sich die 
(Open-Source-)Software an die eigenen Bedürfnisse anzupassen. 
Open-Source soll ja vom "Geben und Nehmen" leben, da passen die (meist 
laut schreienden) hilflosen "nur Benutzer" (die halt nur nehmen ohne zu 
geben) nicht so recht ins Konzept. Also nix gegen Linux und deren echte 
Freaks...

...

von Bernhard M. (boregard)


Lesenswert?

Ich denke mal, das Problem ist der AVRA.

AVRA soll, so wird behaupted, ein unter Linux laufender AVR Assembler zu 
sein der vollständig zum AVR Assembler von ATMEL kompatibel ist.
Das ist er aber nicht, einerseits müsste dazu noch einiges 
hineinprogrammiert werden, andererseits ist er an anderen Stellen (z.B. 
.EQU, .SET Direktiven) viel strikter als das "Original".
Andererseits ist er offensichltich nicht mehr gepflegt, da kein Bugs 
mehr gefixed werden. Dafür ist er so trivial, daß man ihn sich selbst 
zurechtbiegen kann.

Dadurch, daß er kompatibel sein soll wird man verführt, ihn zu nutzen 
(vor allem, da nicht viel zu installieren ist). Dies kann der Grund 
sein, warum nougad ihn nutzen wollte. Wenn man kein Windows hat, dann 
ist das offensichtlich erst mal der einfachste Weg.
Von daher ist:
>>Ich habe ja nichts gegen Linux, auch nicht gegen deren Macher und
>>Benutzer, ich finde es aber lächerlich, wenn man es auf Biegen und
>>Kotzen (äähh Brechen) auch da benutzen will, wo es (noch)
>>kontraproduktiv ist, ohne in der Lage zu sein, sich die
>>(Open-Source-)Software an die eigenen Bedürfnisse anzupassen.
ziemlich kurzsichtig. Im übrigen kann man sich den ziemlich einfach 
selbst anpassen. Nur nutzt hier geben nichts (ich habe einige 
Anpassungen als Bugfix in Bugzilla eingetragen), wenn der Maintainer das 
nicht mehr einpflegt.
Versuche mal, bei den ent. Windows Programmen die Anpassungen zu 
machen....

So, jetzt habe ich mich genug aufgeregt, ich empfehle der Vorgehensweise 
von Stefan Ernst zu folgen...

von Joerg W. (joergwolfram)


Lesenswert?

Ich habe mir mittlerweile auch beholfen, indem ich den AVRA etwas 
angepasst habe. Leider wird bei den Projektverantwortlichen der Code 
wahrscheinlich nicht mehr gepflegt und auch nicht auf Anfragen reagiert.
Allerdings möchte ich die Makro-Fähigkeiten nicht mehr missen, auch wenn 
die Quelltexte für den "original" AVR Assembler dadurch unverdaulich 
werden.

Eigentlich sind es nur zwei Dateien, die man angreifen muß:

avra.h : in Zeile 54 die Raute als zusätzliches Zeilenende-Zeichen 
definieren

device.c : einfach einen ähnlichen Typen kopieren und die Parameter 
anpassen

Jörg

von nougad (Gast)


Lesenswert?

Hallo,

also das auskommentieren hat schon mal soweit geholfen. Es wurde korrekt 
eine Hex Datei erstellt und im Disassembler siehts ganz gut aus. Das 
reicht mir erstmal, mehr brauche ich gerade nicht.

Für die Info, dass avra nicht mehr aktiv weiterentwickelt wird bin recht 
dankbar. Hatte schon bisschen in die sourcen geschaut und wollte schon 
Patches erstellen.

Evtl lohnt es sich die Patches, die jeder für sich macht zu sammeln und 
das Projekt zu forken?

Bezüglich falscher Assembler: Avra sollte ka korrekt für die AVR 
Plattform übersetzen. Das einzige was nicht passt, ist das Headerfile 
für die Ersetzung der Bezeichner. Oder habe ich da was falsch 
verstanden?

Danke für den Tipp mit WINE, aber das ist mir aktuell noch zu viel des 
guten. Ich brauche nur ein paar HEX Files zum Testen.

Danke für die Hilfestellung!

PS: Auf die Windows Diskussion lass ich mich mal nicht ein. Ich kann den 
entsprechenden Leuten mal empfehlen bei heise.de vorbei zu schaun. Da 
finden sich viele gleichgesinnte Trolle.

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.