www.mikrocontroller.net

Forum: Compiler & IDEs Compiler/Linker Fehler


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

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich starte gerade neu mit einem Atmel Mega16 und habe mir entsprechend
zum programmieren das WinAVR geladen und installiert.

Wenn ich den Tutorials folge müßte die Initialisierung der Ports z.B.
wie folgt möglich sein:

outp(0x00, DDRA);

Ich habe mein "Programm" bis auf diese Zeile zuzüglich main Fnk.
gekürzt und Compiler und Linker geben folgende
Fehlermeldungen/Warnungen heraus:


> "make.exe" all

-------- begin --------
avr-gcc (GCC) 3.4.3
Copyright (C) 2004 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.


Compiling: main.c
avr-gcc -c -mmcu=atmega16 -I. -gdwarf-2 -DF_CPU=8000000UL  -Os
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall
-Wstrict-prototypes -Wa,-adhlns=main.lst  -std=gnu99 -MD -MP -MF
.dep/main.o.d main.c -o main.o
main.c: In function `main':
main.c:8: warning: implicit declaration of function `outp'

Linking: main.elf
avr-gcc -mmcu=atmega16 -I. -gdwarf-2 -DF_CPU=8000000UL  -Os
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall
-Wstrict-prototypes -Wa,-adhlns=main.o  -std=gnu99 -MD -MP -MF
.dep/main.elf.d main.o --output main.elf -Wl,-Map=main.map,--cref
-lm
main.o(.text+0x12): In function `main':
C:\WinAVR\examples\frk/main.c:8: undefined reference to `outp'
make.exe: *** [main.elf] Error 1

> Process Exit Code: 2


Ich habe überprüft das derCompiler die includes findet -> OK,
ansonsten hab ich keine Idee mehr - vielleicht kann mir ja einer von
Euch einen Tipp geben.

schon mal ein DANKE für alle Antworten.

Andreas

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du scheinst ein stark veraltetes Tutorial zu benutzen, denn outp wurde
schon vor einiger Zeit aus der avr-libc entfernt, da sich exakt das
gleiche mit normalen C-Bitoperationen erreichen lässt (nimm bitte ein
C-Buch deiner Wahl, Stichworte |, &, ^, <<, >>, ~).

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
outp hat nichts mit Bitoperationen zu tun!

Lediglich ist seit geraumer Zeit ein

  outp(PORTB, (1 << PB0));

das Gleiche wie

  PORTB = (1 << PB0);

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups, da ist meine Standardantwort doch glatt aufgeflogen. ;-)


Spätestens wenn es dem OP aber darum geht einzelne Pins zu setzen, wird
er Bitoperatoren brauchen. Also ist es bestimmt kein Fehler, sich dieses
Kapitel im C-Buch durchzulesen.

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mglw. hat hier die avr-gcc "FAQ" aus dem Hauptmenue dieser Seite
Verwirrung gestiftet. Diese ist stark veraltet. Eine halbwegs aktuelle
Einführung in avr-gcc/avr-libc findet sich im wiki (Artikel avr-gcc
tutorial).

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke für Euere Antworten - das Problem sind wirklich die Tutorials in
denen noch mit den Makros inp(), outp(), sbi() und cbi() gearbeitet
wird.
Die Wiki AVR-GCC schreibt dazu:

http://www.mikrocontroller.net/wiki/AVR-GCC

inp(), outp(), sbi() und cbi() werden in der aktuellen
Bibliotheksversion nicht mehr unterstützt. Es wurde schon seit längerem
empfohlen, diese Makros nicht mehr zu nutzen. Viele deutschsprachige
Anleitungen sind in diesem Punkt veraltet. Mit aktuellen
avr-gcc/avr-libc-Versionen kann einfach z.B. DDRB=0xfe bzw. foo=PINB
geschrieben werden. Mit PORTB |= _BV(1) setzt man PORTB.1, mit PORTB &=
~_BV(1) löscht man es wieder, mit PORTB ^= _BV(1) kann man es
umschalten. Die ersten beiden Varianten erzeugen bei eingeschalteter
Optimierung und passenden Parametern (wie hier im Beispiel) die SBI
bzw. CBI Prozessorbefehle.


Danke für den Hinweis.
Andreas

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.