AVR-Studio C+Assembler mischen

Gast #554576
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
Angehängte Dateien:
Gast #554908
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
Gast #555070
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
#2251628
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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren