Hi Ich möchte eine Delay Routine (Assembler) in mein C-Programm einfügen! Ich habe das Beispiel auf der mikrocontroller Seite studiert, probierte dieses zu kompilieren, doch es funktionierte nicht, ich bekam eine Menge Fehler! So als ob es die Assembler Befehle nicht verstehen würde! Ich arbeite mit WINAVR und habe folgende Files (siehe Anhang) gemacht... Ich habe auch die beiden Include Dateien <macros.inc>, <ctoasm.inc> ins c:\avrgcc\avr\include\ Verzeichnis kopiert! Was mache ich falsch????
Habe mir den Anhang noch nicht angesehen, aber warum nimmst Du nicht die Makros aus <avr/delay.h>?
Aha, gibt es schon Unterprogramm für ein Delay, ist ja super, kann man die einfach einbinden? Versuche ich morgen gerade.... Es würde mich aber doch noch wunder nehmen, wieso ich bei mir kein Assembler-Code einfügen kann! Ich habe genau das Tutorial auf der HP gemacht....
Die Datei darf nicht spi.s heißen sondern spi.S. Das ist ein Unterschied.
Es gibt mir immer noch die gleichen Fehler, wenn ich die Funktion spi.S benenne!
Könnte doch funktionieren! Habe nur das File angepasst, nicht aber im Makefile! Jetzt hab ich noch einen anderen Fehler! aber den wird ich herausfinden... Vielen Dank für die Hilfe
Es funktioniert, aber nur wenn ich die Include Dateien (avr-io.h, macros.inc usw.) in mein Projekt-Ordner kopiere! Das müsste doch nicht sein? Muss ich da mein Makefile anpassen? wenn ja wie?
Irgendwie funktioniert es immer noch nicht! ich möchte genau das
Beispiel auf dieser Homepage kompilieren!
es gibt mir aber diesen Fehler:
-------- begin --------
avr-gcc --version
avr-gcc (GCC) 3.3 20030421 (prerelease)
Copyright (C) 2002 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is
NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.
avr-gcc -c -mmcu=at90s8515 -I. -g -Os -funsigned-char
-funsigned-bitfields -fpack-struct -fshort-enums -Wall
-Wstrict-prototypes -Wa,-ahlms=test.lst test.c -o test.o
test.c: In function `main':
test.c:12: warning: control reaches end of non-void function
test.c:12:2: warning: no newline at end of file
avr-gcc -c -mmcu=at90s8515 -I. -x assembler-with-cpp
-Wa,-ahlms=spi.lst,-gstabs spi.S -o spi.o
In file included from io-avr.h:42,
from macros.inc:18,
from spi.S:10:
io8515.h:36:4: #error "Include <avr/io.h> instead of this file."
make: *** [spi.o] Error 1
> Process Exit Code: 2
Fehlt mir die Headerdatei <avr/io.h> oder was heisst das genau? Ich
finde diese Datei gar nicht!
Vielen Dank!
Steht doch da: die Datei io8515.h beschwert sich darüber, daß Du versuchst, sie direkt zu #includen. Du sollst stattdessen #include <avr/io.h> schreiben (und die Auswahl der tatsächlichen Datei der -mmcu= Option überlassen, die hast Du aber korrekt). Ist das wirklich so schwer verständlich geschrieben? Hmm.
Ja das steht da! Habe aber gar nicht versucht die io8515 zu includen!!! Ich möchte nur das Beispielprogramm http://www.mikrocontroller.net/avr-gcc-faq.htm Kompilieren!!! Ich bringe das nicht hin!
Das SPI Beispiel ist veraltet und nicht kompatible mit neuestem AVR-GCC. Anbei meine Korrekturen damit es unter WinAVR kompiliert werden kann. Braucht neueste Version WinAVR Version "AVR COFF Beta".
Alles auf der genannten Seite ist übrigens veraltet, steht auch obendrüber.
@Peter Fleury: Hey vielen Dank, es funktiooniert super! Danke für die Hilfe! Wo kann man diese Tricks nachlesen? Ich komme noch nicht so ganz klar mit der offiziellen Beschreibung! Hast du es von dieser Dokumentation? IZOARDS
[Das Posting sollte gestern raus, aber die Verbindung hier war tot, sorry.] Lies doch bitter erstmal, was da drüber steht: [Diese Seite wird nicht mehr aktalisiert! Die offizielle Dokumentation zu AVR-GCC befindet sich auf http://savannah.nongnu.org/download/avr-libc/doc/avr-libc-user-manual/ (28.12.2002)] Wer das einbindet, steht doch auch da: In file included from io-avr.h:42, from macros.inc:18, from spi.S:10: Du bindest also macros.inc ein (ist keine offizielle Datei), die wiederum binden io-avr.h ein (warum auch immer und was auch immer das sein soll, offiziell gibt es nur <avr/io.h>). Nun, Beispiele sollte man wohl nur benutzen, nachdem man sie verstanden hat.
Jetzt habe ich noch eine Frage: Ich möchte mir eine Include Datei erstellen, welche verschiedene Assembler-Unterprogramme beinhaltet. Wie kann ich diese machen, damit ich vom Hauptprogramm nur noch die versch. Unterprogramme aufrufen kann? In der Include Datei gibt es jedoch auch Unterprogramme, die auf andere Unterprogramme in der gleichen Include Datei zugreifen! Gibt es da eine Lösung? Ich wäre sehr froh, für Tips und Lösungsvorschläge...
Habs gerafft... In einem Assembler Programm benötige ich den .db Befehl! (ich speicherte einen Text im flash und las ihn dann mit dem Befehl lpm Zeichenweise aus) Wenn ich dieses Programm jetzt aber Kompilieren möchte, gibt mir der Kompiler den Fehler: display.S:62: Error: unknown pseudo-op: `.db' Kennt der Kompiler diesen Befehl nicht?
Hey Danke.. Der Compiler gibt aber immer noch eine Fehlermeldung und zwar display.S:137: Error: bad expression display.S:137: Warning: rest of line ignored; first ignored character is `R' Muss ich den String auch anders angeben?
Wenn es ein String ist, mußt Du ihn als String angeben. .ascii oder .asciz könnten da helfen. Oder jedes Byte einzeln in Quotes. Siehe auch http://www.gnu.org/manual/gas-2.9.1/html_chapter/as_toc.html unter »Assembler directives«. Eine Version davon solltest Du bei WinAVR auch auf der Platte haben.
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.