Atmel Studio 7 Assembler + C mischen

#5308393
Lesenswert?

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
Lesenswert?

.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?
#5308583
Lesenswert?

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.
Persönliche Seite #5308948
Lesenswert?

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

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