Hallo zusammen, als Neuling hoffe ich auf Hilfe von euch: In der Firma habe ich unter CodeVision AVR schon ein paar recht umfangreiche Projekte realisiert, möchte nun aber (privat) am liebsten mit Eclipse arbeiten. Installiert ist wohl alles, doch bekomme ich auch gaaanz einfache Dinge einfach nicht zum Laufen: /***** INCLUDES *****/ #include <avr\io.h> // das scheint von Eclipse gefunden zu werden: #include <avr\interrupt.h> // es gibt jedenfalls keine anders lautenden // Fehlermeldungen nach "Build All" /* Hier hagelt es dann aber Fehlermeldungen: 'ASSR' undeclared (first use in this function) Das Gleiche für die anderen Register... /* /*** Timer/Counter 0 Initialization ***/ void InitSPS(void){ // timer initialization TCCR0 = 0b00001101; TCNT0 = 0; OCR0 = 125; TIMSK |= 0b00000010; ASSR = 0b00000000; } Der Compiler scheint die Registermakros nicht zu kennen. Sie sind in "iom128.h" (welche ja indirekt über io.h includiert werden soll) aber definiert: /* Timer/Counter 0 Asynchronous Control & Status Register */ #define ASSR _SFR_IO8(0x30) Was mache ich falsch? Oder wird iom128.h doch nicht eingebunden? Ich bin für ein paar Tipps dankbar.
Schau' Dir mal den Compiler-Aufruf an, insbesondere, ob dort ein -mmcu=... vorkommt und ob statt der Pünktchen hier dort der richtige µC-Typ steht.
Hc Zimmerer schrieb: > Schau' Dir mal den Compiler-Aufruf an, insbesondere, ob dort ein > -mmcu=... vorkommt und ob statt der Pünktchen hier dort der richtige > µC-Typ steht. Ja, hier fand ich folgende Zeile: -funsigned-bitfields -mmcu=atmega128 -DF_CPU=16000000UL -MMD -MP -MF"Includes/spsclk.d" -MT"Includes/spsclk.d" -c Nun fällt mir noch folgendes auf: Das hier wird NICHT vom Compiler bemängelt, obwohl z.B. für DDRB das Gleiche gelten sollte: /***** START OF RESET-CODE *****/ int main(void){ /*** Initialization of Ports ***/ DDRB = 0b10000000; DDRG = 0b00000011; PORTG = 0b00000010; /***** START OF PROGRAM-LOOP *****/ while(1){ //unsigned long int x; WD_service(0xFF); // Watchdog-Service PORTG ^= 0b00000010; }; } Die Funktion mit den Fehlern befindet sich in einer eigenen Datei: #include <spsclk.c> // ja, ich weiß: Abzüge in der B-Note Dieses Include befindet sich in main.c hinter #include <io.h>
Irgendwas anderes muss bei dir schräg sein:
1 | j@uriah 1137% cat > foo.c |
2 | #include <avr/io.h> |
3 | |
4 | void InitSPS(void){ // timer initialization |
5 | TCCR0 = 0b00001101; |
6 | TCNT0 = 0; |
7 | OCR0 = 125; |
8 | TIMSK |= 0b00000010; |
9 | ASSR = 0b00000000; |
10 | } |
11 | |
12 | j@uriah 1138% avr-gcc -Os -mmcu=atmega128 -c foo.c |
13 | j@uriah 1139% |
Geht problemlos. Dass ein #include einer C-Quelldatei bäh ist, weißt du ja sicherlich...
Jörg Wunsch schrieb: > Irgendwas anderes muss bei dir schräg sein: Das glaube ich mittlerweile auch - und wenn ich's bin 8-) Wenn ich die Funktion in main.c verschiebe, geht's auch mit den Registern darin. > Dass ein #include einer C-Quelldatei bäh ist, > weißt du ja sicherlich... Habe ich hier schon gelesen. Ich weiß auch, dass nur die Headerfiles mit den Prototypen eingebunden werden soll. Nur: woher weiß der Compiler, woher er den dazu gehörenden Funktionscode holen soll? (Ich hoffe, diese Frage hat mich jetzt nicht als völlig Ahnungslosen geoutet). Habe versucht, Infos in der Doku von WinAVR und Eclipse zu finden, aber dort sehe ich den Wald vor lauter Bäumen nicht...
Thomas S. schrieb: > Nur: woher weiß der Compiler, > woher er den dazu gehörenden Funktionscode holen soll? Gar nicht, denn das ist die Aufgabe des Linkers.
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.