AVR: Modulares programmieren und WinAVR/gcc Debuginformationen

OP #1509453
Hallo,

irgendwie stecke ich in einem Dilemma (oder vielleicht nicht?):

Ich möchte mit AVR Studio sowohl in Assembler als auch evtl. später in 
"C" programmieren (kann beide Sprachen bereits, würde aber ASM für 
zeitkritische Sachen bevorzugen). Sehe aber folgende Probleme nach 
kleineren Tests:

- Assembler von AVR Studio

+ Debuginformationen werden richtig generiert
- Kann nicht mehrere Objektfiles verlinken (ist das wirklich so?)
- Module können später nicht mit WinAVR C-Programmen gelinkt werden

- Assembler von WinAVR (gas)

+ Modulares Programmieren durch Linker möglich
+ Module können später mit C Objektfiles gelinkt werden
- Debuginformationen werden nicht korrekt erzuegt :-(

Habe ich etwas übersehen, oder trifft das so zu?

Die Methode mehrere Assemblerprogramme mit "include" quasi 
"zusammenzulinken" ist ja eigentlich etwas ungewöhnlich, scheint aber 
das Standardverfahren unter AVR Studio zu sein, oder?

Leider sind ja auch die Direktiven für die Assemblersteuerung vom AVR 
Assembler nicht mit denen vom gas kompatibel, so dass man nicht mal 
schnell die Sourcen dann mit einem anderen Assembler übersetzen kann.

Was wäre dnen die "best practice" für mein Anliegen?

Ciao...
Markus
> - Assembler von WinAVR (gas)
>
> + Modulares Programmieren durch Linker möglich
Ja.
> + Module können später mit C Objektfiles gelinkt werden
Ja.
> - Debuginformationen werden nicht korrekt erzuegt :-(

Das ist mir neu.  Sag' das mal nicht meinem Assembler.

Die ASFLAGS-Zeilen in meinen Makefiles lauten:
1
ASFLAGS = -Wa,-adhlns=$(<F).lst,--listing-cont-lines=100,-gstabs+ 
2
ASFLAGS += -Wundef

zum Debuggen mit avarice/avr-gdb/emacs.  Für AVR-Studio solltest Du 
stabs+ durch dwarf-2 ersetzen, dann sollte das auch gehen.  Es ist aber 
schon länger her, dass ich das mal gemacht habe.  Aufgefallen ist mir 
dabei debug-mäßig, es ging alles auch in Asm (jedenfalls nichts außer 
dass es mit Studio eine extreme Mausschubsorgie ist, und das ist 
Geschmackssache).

Für kleine Aufgaben mag der AVR-Assembler ja ganz nett sein, aber da er 
zu nichts Weiterführendem kompatibel ist (und das ideale uC-Programm 
beseht für mich aus einer Kombination von Assembler mit Hochsprache, 
wobei jeder der zwei Anteile mal bis auf 0 gehen kann), bleibt 
AVR-Assembler für so was eine Sackgasse.
OP
Stefan Ernst schrieb:
> Hazeh Zimmerer schrieb:
>> Für AVR-Studio solltest Du stabs+ durch dwarf-2 ersetzen, dann sollte das
>> auch gehen.
>
> Tja, und genau das geht eben nicht.

Ja, genau DAS ist das Problem, auf das ich bei der Nutzung gestossen 
bin. Seit März 2009 gab es ja auch kein neues Release von WinAVR.

> Oder zumindest "ging nicht". Das Problem ist bekannt und es gibt
> Patches. Kann also sein, dass es mittlerweile geht.
>
> http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=77693

Ein sehr interessanter Thread, vielen Dank! Werde mal den Patch 
ausprobieren der dort gepostet wurde (allerdings nur den Binary, habe 
keine Lust auf Selbstcompilieren unter Windows...).

Ciao...
Markus
OP
...habe den Patch von AVR Freaks mal ausprobiert, scheint soweit zu 
funktionieren.

Bei gemischtem C/Assembler-Code funktioniert es nun auch richtig!

Super, Danke für den Link! Hoffentlich gibt es bald ein neues Release 
von WinAVR wo das schon korrigiert ist.

EINE Frage habe ich aber noch: Wenn ich meine ASM-Files für (g)as 
schreibe, kann ich ja sowohl den C Präprozessor als auch noch die 
Direktiven vom as selbst verwenden.

Z.B. um eine Headerdatei einzubinden könnte man schreiben

.include "bla.h" (as-style)
#include "bla.h" (c-style)

Kann man das nach Belieben mischen, oder ist das unsauber? Wenn ich ein 
und dieselbe Headerdatei für C als auch ASM verwenden will (spezielle 
Bereiche mit #ifdef _ASSEMBLER_ getrennt), macht das doch Sinn den 
c-style zu verwenden, oder?

CIao...
Markus
Markus M. schrieb:

> Z.B. um eine Headerdatei einzubinden könnte man schreiben
>
> .include "bla.h" (as-style)
> #include "bla.h" (c-style)

Der Punkt dabei ist folgender:
Wenn du .include benutzt, bekommt der Präprozessor den Inhalt von bla.h 
nicht zu sehen (wird ja erst vom Assembler inkludiert, also nachdem der 
Präprozessor schon fertig ist). Das hat natürlich Einfluss darauf, was 
in bla.h stehen darf.

> Wenn ich ein
> und dieselbe Headerdatei für C als auch ASM verwenden will (spezielle
> Bereiche mit #ifdef ASSEMBLER getrennt), macht das doch Sinn den
> c-style zu verwenden, oder?

Das z.B. kann man dann gar nicht mit .include inkludieren ohne dass dir 
der Assembler einiges husten wird. ;-)
Der C-Präprozessor ist standardisiert.  Wenn Dein Programm jemand anders 
liest, kannst Du davon  ausgehen, dass er/sie eher Standard-C als die 
Makrosprache eines einzelnen Tools kennt, die Einlernzeit ist also 
kürzer.  Der C-Präprozessor ist portabler, denn der C-Präprozessor lässt 
sich auch notfalls mal auch als Zwischenschritt vor ein fremdes Tool 
schnallen.  Du siehst, wo meine Präferenzen liegen ...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.