AVR-Studio C+Assembler mischen

Gast #554576
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 #554647
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
Gast #554908
>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
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
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

Eine eigene Frage? Dieser Thread ist über 19 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.