Hallo ich habe den linker Fehlermeldung "undefined reference to 'adc' " bekommen trotz dass ich den header Datei in dem Projektverzeichniss von mein projekt. wäre nett wenn mir jemand hilft rauszukriegen wo das problem liegt Danke im voraus mein source code: #include <avr/io.h> #include <stdint.h> #include <avr/delay.h> #include"adc.h" #define NR_SAMPLES 3 // Anzahl der Messungen, die gemittelt werden #define LED1 PD0 #define LED2 PD1 #define LED3 PD2 #define LED4 PD3 unsigned short adc(unsigned char admux) ; void init_ports(); int main() { unsigned short c; // Variablen definitionn init_ports(); while( 1 ) // Endlosschleife zur kontinuierlichen //Auswertung der Eingangsspannung (am ADC) { c=adc(0); if( c <= 158 ) { PORTD = ( 1 << LED1 ); PORTC=0x01; } else if( c <= 374){ PORTD = ( 1 << LED2 ); PORTC=0x00; _delay_ms(300); PORTC=0x01; _delay_ms(300); } else if( c < 1023) { PORTD = ( 1 << LED3 ); PORTC=0x00; _delay_ms(1000); PORTC=0x01; _delay_ms(1000); } else PORTD = 0; PORTC=0x00; } } void init_ports() { DDRD=0xFF; //PORTD als Ausgang PORTD =0x00; DDRC=0xFF; //PORTD als Ausgang PORTC =0x00; } In dem Header datei(adc.h) wird den Funktionkopf definiert: unsigned short adc(unsigned char admux); In dem (adc.c) #include <avr/io.h> #include <stdint.h> #include "adc.h" #define NR_SAMPLES 3 unsigned short adc(unsigned char admux) { unsigned short val = 0; unsigned char i; ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0); //ADC aktivieren und Teilungsfaktor /8 stellen ADMUX = admux; //Kanal des Multiplexers wählen ADMUX |= ( (1<<REFS1) | (1<<REFS0) ); // externr Referenzspannung AREF nutzen // Den ADC initialisieren und einen sog. Dummyreadout machen ADCSRA |= (1<<ADSC); while( ADCSRA & (1<<ADSC) ) ; for( i = 0; i < NR_SAMPLES; i++ ) { ADCSRA |= (1<<ADSC); // eine ADC-Wandlung while( ADCSRA & (1<<ADSC) ) ; // auf Abschluss der Konvertierung warten val += ADCW; } ADCSRA &= ~(1<<ADEN); //// ADC wieder deaktivieren val /= NR_SAMPLES; return val; // ADC auslesen und zurückgeben }
smith schrieb: > trotz dass ich den header Datei in dem Projektverzeichniss von > mein projekt. trotz was? Daß die Datei da nur liegt, wird nicht reichen. Je nach verwendeter IDE muß man sie auch in das Projekt einfügen - und zwar die .c, nicht die .h.
IDE sagt mir nix!! ich habe beide .c und .h in das projekt.und Fehler taucht immer auf
Klaus hat Recht, die Datei adc.c ins Projekt zu den "source files" einbinden.
smith schrieb: > IDE sagt mir nix!! IDE <==> Entwicklungsumgebung > ich habe beide .c und .h in das projekt. Wie genau hast du das gemacht? Aufs Verzeichnis zu kopieren ist zu wenig http://www.mikrocontroller.net/articles/FAQ#Ich_hab_da_mehrere_.2A.c_und_.2A.h_Dateien._Was_mache_ich_damit.3F
smith schrieb: > #include"adc.h" ^ | Fehlt da nicht ein Leerzeichen? smith schrieb: > IDE sagt mir nix!! IDE bedeutet Integrated Development Environment, also die Entwicklungsumgebung wie z.B. Atmel AVR Studio.
ja ich verwende avr studio.ich habe halt header datei von wo anderes kopiert und umbennent und in dem projektverzeichniss reingelegt.ist das richtig so?oder muss man was anderes machen bei erstellung von header datei?
smith schrieb: > ja ich verwende avr studio.ich habe halt header datei von wo anderes > kopiert und umbennent und in dem projektverzeichniss reingelegt.ist das > richtig so?oder muss man was anderes machen bei erstellung von header > datei? Das hat mit dem Header File erst mal gar nichts zu tun. Du hast ein Linker - Problem. D.h. der Linker kennt nicht alle Einzelteile, die zum Projekt gehören. http://www.mikrocontroller.net/articles/FAQ#Ich_hab_da_mehrere_.2A.c_und_.2A.h_Dateien._Was_mache_ich_damit.3F
womit soll ich die einzelene .c dateien compilieren.ganz normal compiler oder mit avrstudio
smith schrieb: > womit soll ich die einzelene .c dateien compilieren.ganz normal compiler > oder mit avrstudio Lies alles aus der FAQ zu diesem Punkt! Auch diesen Abschnitt http://www.mikrocontroller.net/articles/FAQ#AVR-Studio Du braucht das adc.c File einfach nur zum Projekt hinzufügen, indem du es bei den Source Files im AVR-Studio Projekt mit einträgst. Das wars dann auch schon.
schmeiß mal
1 | unsigned short adc(unsigned char admux) ; |
aus deiner, ich vermute mal, main.c raus. Das steht bereits in adc.h
Karl heinz Buchegger schrieb: > Du braucht das adc.c File einfach nur zum Projekt hinzufügen, indem du > > es bei den Source Files im AVR-Studio Projekt mit einträgst. Ich hab gelesen und nicht ganz verstanden wie ich den source Files im AVR-Studio Projekt mit eintrage mar IO schrieb: > schmeiß mal unsigned short adc(unsigned char admux) ; das habe ich schon gemacht und hat nix gebracht:(
smith schrieb: > Karl heinz Buchegger schrieb: >> Du braucht das adc.c File einfach nur zum Projekt hinzufügen, indem du >> >> es bei den Source Files im AVR-Studio Projekt mit einträgst. > > Ich hab gelesen und nicht ganz verstanden wie ich den source Files im > AVR-Studio Projekt mit eintrage Links in deinem AVR Studio ist eine symbolische Baumdarstellung, was es alles in deinem Projekt gibt. Da gibt es auch den Punkt "Source Files". Da stellst du die Maus drauf, rechte Maustaste. Daraufhin erscheint ein Kontextmenü. Dort wählst du "Add existing Source Files" aus Daraufhin geht ein File-Open Dialog auf und du wählst deine adc.c aus. Fertig. Projekt abspeichern nicht vergessen.
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.