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
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.
.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?
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 ??
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.
Über den Solution Explorer einfügen. Rechte Maustaste auf den Projektordner.
> 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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.