Atmel Studio 7 Assembler + C mischen

OP #5308393
Hallo,

versuche mit Atmel Studio 7 C und ASM Quellen zu mischen.
(Reine C-Quellen funktionieren einwandfrei)

Bin nach dieser Anleitung vorgegangen:

https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Assembler_und_Inline-Assembler#Assembler-Dateien

Hab bei Atmel Studio 7 (Vers 7.0.1645) ein neues Project angelegt
als c/c++ GCC C executable Project, Atmega128A, Dragon

Im Project Ordner sind die main.c und rechteck.S[sx,s]

Beim Build bekomme ich dann die Fehlermeldung siehe Anhang.

Wenn ich den Aufruf "rechteck()" ausdokumentiere, die ASM-File scheint 
er nicht anzufassen. Im Debug-Ordner ist, wenn überhaupt nur main.o zu 
sehen.

Muss noch was im Toolchain eingestellt werden ??
Irgend wie fehlen da noch grundsätzliche Voraussetzungen.

Muss gestehen von den Optionen Compiler, Assembler und Linker absolut 
kein Plan. Da ist eine klick-klack Oberfläche schon praktisch, wenn sie 
dann auf funktionieren würde.

Danke für eure Hilfe

Gruß Peter
Angehängte Dateien:
Gast #5308501
.S kann man beim AVR-Studio eigentlich direkt in ein normales Projekt 
einbinden. Ich löse zeitkritische Sachen immer so. Außer, dass ein paar 
direktiven für den Präprozessor anders lauten, muss man zwischen .asm 
und .S nichts ändern.

Hast Du das Makefile selbst gemacht?
OP #5308575
Assembler-Quelle mit .asm hat auch nicht geholfen.

Ich denke mal das Kern Problem ist der Compiler, dass er keinen externen 
Funktion Aufruf zuläßt.

Da fehlt bestimmt noch eine Option oder ein include ??

Das Makefile wird automatisch erzeugt.

Wie kann man das ändern ??
OP #5308583
Bademeister schrieb:
> .S kann man beim AVR-Studio eigentlich direkt in ein normales Projekt
> einbinden. Ich löse zeitkritische Sachen immer so. Außer, dass ein paar
> direktiven für den Präprozessor anders lauten, muss man zwischen .asm
> und .S nichts ändern.
>
> Hast Du das Makefile selbst gemacht?

Nein, das Makefile wird automatisch erzeugt.

Wie bringe ich dem Project weitere Files bei ??

Einfach eine weiter File im Project-Ordner ablegen scheint nicht zu 
reichen.

Gruß
Beitrag #5308602 wurde von einem Moderator gelöscht.
OP #5308611
> Einfach eine weiter File im Project-Ordner ablegen scheint nicht zu
> reichen.

hab es gefunden... File zum Project zu zufügen.

Im "Solution Explorer" alle Files anzeigen lassen...
Die gewünschte File anklicken, rechts klick und include...

Danke für den Hinweis
Persönliche Seite #5308948
Peter M. schrieb:
> Assembler-Quelle mit .asm hat auch nicht geholfen.

avr-gcc erkennt bestimmte Formate an der Endung, .S und .sx zum Beispiel 
als "Assembler mit Präprozessor".

Verwendet man andere Endung, dann muss das Format explizit mitgeteilt 
werden, in Optionen z.B.:
1
avr-gcc ... -x assembler-with-cpp foo.asm ...

> #include "ave/io.h"

"avr", nicht "ave"

=> #include <avr/io.h>

> in 16, _SFR_IO_ADDR(SREQ)

"SREQ" oder doch "SREG"?

Eine normale Funktion braucht SREG nicht zu sichern und 
wiederherzustellen.  Wenn du wirklich R16/17 verwenden willst, dann sind 
diese wie in deinem Code zu sichern und wiederherzustellen, denn sie 
gehören zu den "callee-saved" Registern.  Es gibt aber auch Register, 
bei denen der Compiler davon ausgeht, dass deren Inhalt durch 
Funktionsaufruf zerstört wird.  Wenn du stattdessen solche verwendest, 
wird der Code kleiner, einfacher und schneller:
1
rechteck:
2
  ldi     R25, (1<<PINB6)
3
  in    R24, _SFR_IO_ADDR(PINB)
4
  eor     R24, R25
5
  out    _SFR_IO_ADDR(PORTB), R24
6
  //-------------------------------------------------------
7
  ret

Registerverwendung per ABI:

http://gcc.gnu.org/wiki/avr-gcc#Register_Layout
Gast #5309018
Danke  Johann L. für den weiteren Hinweis.

Meine Syntax Fehler hatte ich auch schon bemerkt.

Die File war dem Project nicht bekannt, dass war der entscheidende 
Fehler.

Antwort schreiben

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