Forum: Compiler & IDEs Atmel Studio 7 Assembler + C mischen


von Peter M. (saarbrigger128)


Angehängte Dateien:

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

von Teddy (Gast)


Lesenswert?

Die Endung muss doch .asm heißen

von Markus F. (mfro)


Lesenswert?

In deinem Makefile steht von "rechteck.S" nix.

Entsprechend wird die Datei beim Build gar nicht angefasst und das (dort 
eigentlich vorhandene) Symbol fehlt beim Linken.

von Bademeister (Gast)


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?

von Peter M. (saarbrigger128)


Lesenswert?

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

von Peter M. (saarbrigger128)


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 vom Autor gelöscht.
von Marek F. (marek_f)


Angehängte Dateien:

Lesenswert?

Über den Solution Explorer einfügen. Rechte Maustaste auf den
Projektordner.

von Peter M. (saarbrigger128)


Lesenswert?

> 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

von Johann L. (gjlayde) Benutzerseite


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

von saarbrigger128 (Gast)


Lesenswert?

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.

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.