Forum: Compiler & IDEs Assembler Funktion Aufrufen!


von Izoard (Gast)


Angehängte Dateien:

Lesenswert?

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

von Joerg Wunsch (Gast)


Lesenswert?

Habe mir den Anhang noch nicht angesehen, aber warum nimmst Du nicht
die Makros aus <avr/delay.h>?

von Izoard (Gast)


Lesenswert?

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

von Joerg Wunsch (Gast)


Lesenswert?

Die Datei darf nicht spi.s heißen sondern spi.S.  Das ist ein
Unterschied.

von Izoard (Gast)


Lesenswert?

Es gibt mir immer noch die gleichen Fehler, wenn ich die Funktion spi.S
benenne!

von Izoard (Gast)


Lesenswert?

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

von Izoard (Gast)


Lesenswert?

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?

von Joerg Wunsch (Gast)


Lesenswert?

-I/path/to/include/files

von Izoard (Gast)


Lesenswert?

was muss ich damit machen?

sorry, für diese Frage..

von Izoard (Gast)


Lesenswert?

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!

von Joerg Wunsch (Gast)


Lesenswert?

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.

von Izoard (Gast)


Lesenswert?

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!

von Peter Fleury (Gast)


Angehängte Dateien:

Lesenswert?

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".

von Joerg Wunsch (Gast)


Lesenswert?

Alles auf der genannten Seite ist übrigens veraltet, steht auch
obendrüber.

von Izoard (Gast)


Lesenswert?

@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

von Joerg Wunsch (Gast)


Lesenswert?

[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.

von Izoard (Gast)


Lesenswert?

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

von Izoard (Gast)


Lesenswert?

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?

von Joerg Wunsch (Gast)


Lesenswert?

Der Assembler kennt ihn nicht.  Das Ding heißt .byte.

von Izoard (Gast)


Angehängte Dateien:

Lesenswert?

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?

von Joerg Wunsch (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.