PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Warning beim Kompilieren



bugmenot
17.12.2010, 20:34
Beim kompilieren folgendes Programms:


int main(void)
{
initRobotBase(); // Initialization – ALWAYS CALL THIS FIRST!
// [...] Program code...
while(1); // Infinite loop
return 0;
}

erhalte ich folgendes Warning:

Line 3: implicit declaration of function 'initRobotBase'

Dass in meinem Code keine "#include"'s vorkommen liegt daran, dass ich diese über meine IDE(KamAVR) inkludiere. Inkludiert werden folgende Dateien:

RP6RobotBaseLib.h
RP6RobotBaseLib.c
RP6uart.h
RP6uart.c

radbruch
17.12.2010, 21:27
Hallo

Ich verwende auch KAMAvr und habe

#include "RP6RobotBaseLib.h"

im Programmkopf. Unter "Files" sind nur RP6RobotBaseLib.c und RP6uart.c eingetragen.

Gruß

mic

bugmenot
17.12.2010, 22:12
Hallo

Ich verwende auch KAMAvr und habe

#include "RP6RobotBaseLib.h"

im Programmkopf. Unter "Files" sind nur RP6RobotBaseLib.c und RP6uart.c eingetragen.

Gruß

mic

Wenn ich "#include"'s verwende geht bei mir aber garnichts, da die zu inkludierenden Dateien dann nicht gefunden werden.

Jaecko
17.12.2010, 22:14
Die .h müssen aber trotzdem im Quellcode per #include eingebunden werden.
Ist einfach in C so vorgegeben.

radbruch
17.12.2010, 22:18
Die " " im Include-Befehl bedeuten, dass die Datei im selben Verzeichniss ist wie die Programmdatei. Ich verwende dafür einen Ordner mit dem Namen projekte und habe alle Dateien aus RP6Lib/RP6Base und RP6Lib/RP6Common dorthin kopiert. In diesem Ordner speichere ich auch die Projektdateien (*.kam) und die eigentlichen Programme (*.c).

bugmenot
17.12.2010, 23:26
Die .h müssen aber trotzdem im Quellcode per #include eingebunden werden.
Ist einfach in C so vorgegeben.

Das sehe ich anders, da

1. ich nur eine Warning aber keine Errors erhalte.
2. aus dem Sourcecode ein funktionsfähiges Binärfile(.hex) kompiliert wurde

radbruch
17.12.2010, 23:37
Hallo

Zu 1: Warnungen sind die Vorboten von völlig unerklärlichen Programmfunktionen. Nach kurzem googlen weiß ich nun, dass der Kompiler bei dieser Warnung zwar weitermacht, aber für die ihm nicht genauer bekannte Funktion irgendetwas reincodiert. Viel Spass beim Debuggen, wenn sich das mal auf das Programm auswirkt.

Und zu 2:
Siehe zu 1

Besser keine Warnungen tolerieren!

Gruß

mic

bugmenot
17.12.2010, 23:47
Ich habe jetzt mal die Empfehlungen befolgt und statt die Dateien einfach über die IDE zu inkludieren folgende Include-Anweisungen an den Anfang des Quelltexts geschrieben:

#include "RP6RobotBaseLib.h"
#include "RP6RobotBaseLib.c"
#include "RP6uart.h"
#include "RP6uart.c"

Seitdem bekomme ich folgende Errors:


In file included from censored.c:2:
RP6RobotBaseLib.c: In function 'initRobotBase':
RP6RobotBaseLib.c:1774: error: 'UBRRH' undeclared (first use in this function)
RP6RobotBaseLib.c:1774: error: (Each undeclared identifier is reported only once
RP6RobotBaseLib.c:1774: error: for each function it appears in.)
RP6RobotBaseLib.c:1775: error: 'UBRRL' undeclared (first use in this function)
RP6RobotBaseLib.c:1776: error: 'UCSRA' undeclared (first use in this function)
RP6RobotBaseLib.c:1777: error: 'UCSRC' undeclared (first use in this function)
RP6RobotBaseLib.c:1777: error: 'URSEL' undeclared (first use in this function)
RP6RobotBaseLib.c:1778: error: 'UCSRB' undeclared (first use in this function)
RP6RobotBaseLib.c:1787: error: 'GICR' undeclared (first use in this function)
RP6RobotBaseLib.c:1788: error: 'ISC2' undeclared (first use in this function)
In file included from censored.c:4:
RP6uart.c: In function 'writeChar':
RP6uart.c:73: error: 'UCSRA' undeclared (first use in this function)
RP6uart.c:74: error: 'UDR' undeclared (first use in this function)
RP6uart.c: At top level:
RP6uart.c:219: warning: 'USART_RXC_vect' appears to be a misspelled signal handler
RP6uart.c: In function 'USART_RXC_vect':
RP6uart.c:223: error: 'UDR' undeclared (first use in this function)
RP6uart.c: In function 'clearReceptionBuffer':
RP6uart.c:297: error: 'UCSRB' undeclared (first use in this function)
RP6uart.c:298: error: 'UDR' undeclared (first use in this function)

Jaecko
18.12.2010, 00:19
Dass das compilieren ohne #include bei dir geht, liegt nur an der IDE. Übertrag das Programm z.B. mal nach Keil µVision, der haut dir dank der fehlenden #includes gleich mal Errors auf den Tisch.

Ich compilier z.B. immer mit der Option "Warnings as errors", somit lauf ich garnicht erst Gefahr, Warnungen zu übersehen bzw. absichtlich zu ignorieren.

Die aktuellen Fehler lesen sich so, als wäre ein falscher (oder garkein) AVR ausgewählt. Wird in irgend einer Datei die avr/io.h eingebunden?
Oder ist in den Projekteinstellungen der richtige AVR ausgewählt (ATMega32 z.B.)?