Forum: Mikrocontroller und Digitale Elektronik AVR-Studio C+Assembler mischen


von Christoph H. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

im obigen ZIP-File habe ich ein Projekt mit den Beispielen hier aus dem 
MC-Forum zur Mischung zwischen C und Assembler erstellt.

Leider erhalte ich folgende Fehlermeldung:

../chGCCASM_test.c:13: undefined reference to `ultraFunc'
../chGCCASM_test.c:15: undefined reference to `gigaFunc'

Weis jemand, woran es liegen könnte?

Gruß,
Christoph

von Oliver (Gast)


Lesenswert?

Lass das "extern" mal weg. Ein Funktionsprototyp in C braucht das nicht.

Oliver

von Oliver (Gast)


Lesenswert?

Das war es nicht.

In der test.S scheint soviel falsch zu sein, daß der Assembler es gar 
nicht mehr merkt. Da musst du wohl noch mal in die Grundlagen 
einsteigen.

Oliver

von Christoph H. (Gast)


Lesenswert?

>In der test.S scheint soviel falsch zu sein, daß der Assembler es gar
>nicht mehr merkt. Da musst du wohl noch mal in die Grundlagen
>einsteigen.

Das Beispiel habe ich direkt aus dem AVR-GCC-Tutorial kopiert:

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
( siehe Unterpunkt Assembler )

Wenn ich also direkt "noch mal in die Grundlagen einsteigen muss", dann 
stimmt wohl direkt was nicht mit dem Tutorial.

Gruss,
Christoph

von Christoph H. (Gast)


Lesenswert?

Mittlerweile habe ich herausgefunden, dass es am falsch plazierten 
".end" statement lag. Dann funktioniert es.

Was Olivers Aussage betrifft, scheint es hier einige Verwirrung 
bezüglich der Assembler-Typen und deren Syntax zu geben.

Ich habe herausgefunden, dass der ATMEL Assembler im AVR-Studio nicht 
der selbe ist, der bei eine C-Projekt im AVR-Studio verwendet wird. 
Damit ändert sich wohl leider auch die Syntax.

Es gibt folgende Möglichkeiten:

1. ATMEL-Assembler Projekt
2. WIN-AVR mit GCC und GNU-Assembler ( oder auch GAS genannt )

Jetzt versuche ich gerade herauszubekommen, welchen Syntax der 
GNU-Assembler für Makros mit Parameterübergabe verwendet. Das 
funktioniert scheinbar anders als beim ATMEL-Assembler.

Christoph

von Jan S. (jannemann)


Lesenswert?

Hallo,
ich beschäftige mich erst seit kurzem mit AVR Controllern, vorher PIC 
und 8051.

Mir sind im AVR-Gcc Tutorial bei dem Einbinden von Assembler-Dateien 2 
Dinge unklar 
(http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Assembler-Dateien)

beide Fragen beziehen sich auf die Datei useful.S

1)warum kann hier auf die Register über eine einfache Zahl zugegriffen 
werden? (siehe workreg=16, workreg2=17, ...) udn nicht wie sonst in asm 
mit
1
.define workreg r16
 oder
1
equ workreg=$016

2) in der Funktion superfunc:
1
out  _SFR_IO_ADDR(DDRD), workreg
warum kann ich hier nicht direkt auf das DDRD zugreifen? In Assembler 
würde die zeile doch eigentlich so aussehen:
1
out  DDRD, r16

Ich habe schon nen bisschen rumgesucht, das ganze scheint nur so zu 
laufen, wenn man asm und c mischen will. Aber gute Literatur, die eine 
gute Beschreibung und erklärung liefert, hab ich leider noch nicht 
gefunden.

Falls die Entwicklungsumgebung relevant ist: Ich nutze AVR Studio 4.18

Danke im voraus!

von ... (Gast)


Lesenswert?

Leichenschänder, der Thread ist mehr als 4 Jahre alt!

zu 1) keine Ahnung
zu 2) Hängt mit der Architektur der AVRs zusammen. Insbesondere z.B. das 
Register zum Teil über unterschiedliche Adressen angesprochen werden 
können.
Siehe: 
http://www.nongnu.org/avr-libc/user-manual/group__avr__sfr__notes.html

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.