mikrocontroller.net

Forum: Compiler & IDEs Assembler Funktion Aufrufen!


Autor: Izoard (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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????

Autor: Joerg Wunsch (Gast)
Datum:

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

Autor: Izoard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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....

Autor: Joerg Wunsch (Gast)
Datum:

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

Autor: Izoard (Gast)
Datum:

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

Autor: Izoard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Izoard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-I/path/to/include/files

Autor: Izoard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was muss ich damit machen?

sorry, für diese Frage..

Autor: Izoard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Izoard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Peter Fleury (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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".

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles auf der genannten Seite ist übrigens veraltet, steht auch
obendrüber.

Autor: Izoard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/a...
(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.

Autor: Izoard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Izoard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Joerg Wunsch (Gast)
Datum:

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

Autor: Izoard (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.