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
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 |, &, ^, <<, >>, ~).
outp hat nichts mit Bitoperationen zu tun! Lediglich ist seit geraumer Zeit ein outp(PORTB, (1 << PB0)); das Gleiche wie PORTB = (1 << PB0);
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.
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).
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
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.