oberallgeier
14.07.2008, 09:53
Hallo Alle,
ein vermutlich einfaches Problem mit der Stringausgabe macht mir zu schaffen. Seit Tagen meldet mir der Compiler Warnungen, die ich durch meine Änderungen nicht korrigieren kann. Eine Auswirkung auf den Programmablauf haben sie - offensichtlich - nicht. Ich würde meinen C-Code gerne korrekt schreiben, finde aber keine Abhilfe.
Mein aktuelle Umgebung: WinXPpro Vers. 2002 SP2 und als Compiler:
AVR Studio 4.13.557 Service Pack 1
GUI Version 4, 13, 0, 557
AVR Simulator 1, 0, 2, 0
ATMEGA168 209
Operating System
Major 5
Minor 1
PlatformID 2
Build 2600
Service Pack 2
Plugins:
AvrPluginAvrAsmObject 1, 0, 0, 46
AvrPluginavrgccplugin 1, 0, 0, 9
Stk500Dll 1, 0, 1, 0
Mein aktuelles Problem sind die folgenden Fehlermeldungen
../m168D_inf_10x63.c: In function 'info02_irDME':
../m168D_inf_10x63.c:46: warning: implicit declaration of function 'sendUSART'
../m168D_inf_10x63.c: At top level:
../m168D_inf_10x63.c:184: warning: conflicting types for 'sendUSART'
../m168D_inf_10x63.c:46: warning: previous implicit declaration of 'sendUSART' was here
Kernighan/Ritchie haben ebensowenig geholfen wie (m)eine experimentelle Reparaturorgie. Kann mir bitte jemand erzählen, wo der Fehler liegen könnte?
Der beanstandete Aufruf erfolgt hier - im ersten sendUSART-Aufruf; mecho[0..2] ist in einem common-modul als volatile uint8_t mecho [3] deklariert:
// ================================================== ===============================
void info02_irDME(void)
// Ausgabe von irDME-Nettowerten und anderen Werten (Servo, GPD)
{
char wortadc[12];
sendUSART(" i1-4\t"); // Ausgabezeile eröffnen
utoa(mecho[0], wortadc, 10); //aktuellen Rampensteuerwert ...
sendUSART(wortadc); // ... ausgeben.
sendUSART("\t"); // Tabulator
utoa(mecho[1], wortadc, 10); //aktuellen Rampensteuerwert ...
sendUSART(wortadc); // ... ausgeben.
sendUSART("\t"); // Tabulator
utoa(mecho[2], wortadc, 10); //aktuellen Rampensteuerwert ...
sendUSART(wortadc); // ... ausgeben
sendUSART("\t"); // Tabulator senden
sendUSART("Isvs1\t"); // Bezeichner für Wert
utoa(Isvs1, wortadc, 10); //aktuellen Servosteuerwert ...
sendUSART(wortadc); // ... ausgeben
sendUSART("\t"); // Tabulator senden
sendUSART("most12\t"); // Bezeichner für Wert
utoa(most12, wortadc, 10); //aktuellen Servosteuerwert ...
sendUSART(wortadc); // ... ausgeben
sendUSART("\t"); // Tabulator senden
}
/* ================================================== ============================ */
Die Routine sendUSART (für die ... warning: conflicting types for 'sendUSART' ... gemeldet wird) lautet:
/* ================================================== ============================ */
void sendUSART(char *s) // *s funktiniert wie eine Art Array - auch bei
// einem String werden die Zeichen (char) einzeln ausgelesen - und auf die
// Sendeschnittstelle übertragen
{
while(*s)
{
sendchar(*s);
s++;
}
}
/* ================================================== ============================ */
... und zu meiner Erbauung wird diese Routine (und ähnliche) nicht beanstandet:
// ================================================== ===============================
void info01(void) // Startinfo #####>>>>> steht IMMER im main-Code-modul
{
sendUSART ("\r\r\tPm168D/20 MHz\tm168D_10x61-64/614 13jul08 1848\r\r\n");
}
/* ================================================== ============================ */
Danke schon mal jetzt für eure Hilfe
ein vermutlich einfaches Problem mit der Stringausgabe macht mir zu schaffen. Seit Tagen meldet mir der Compiler Warnungen, die ich durch meine Änderungen nicht korrigieren kann. Eine Auswirkung auf den Programmablauf haben sie - offensichtlich - nicht. Ich würde meinen C-Code gerne korrekt schreiben, finde aber keine Abhilfe.
Mein aktuelle Umgebung: WinXPpro Vers. 2002 SP2 und als Compiler:
AVR Studio 4.13.557 Service Pack 1
GUI Version 4, 13, 0, 557
AVR Simulator 1, 0, 2, 0
ATMEGA168 209
Operating System
Major 5
Minor 1
PlatformID 2
Build 2600
Service Pack 2
Plugins:
AvrPluginAvrAsmObject 1, 0, 0, 46
AvrPluginavrgccplugin 1, 0, 0, 9
Stk500Dll 1, 0, 1, 0
Mein aktuelles Problem sind die folgenden Fehlermeldungen
../m168D_inf_10x63.c: In function 'info02_irDME':
../m168D_inf_10x63.c:46: warning: implicit declaration of function 'sendUSART'
../m168D_inf_10x63.c: At top level:
../m168D_inf_10x63.c:184: warning: conflicting types for 'sendUSART'
../m168D_inf_10x63.c:46: warning: previous implicit declaration of 'sendUSART' was here
Kernighan/Ritchie haben ebensowenig geholfen wie (m)eine experimentelle Reparaturorgie. Kann mir bitte jemand erzählen, wo der Fehler liegen könnte?
Der beanstandete Aufruf erfolgt hier - im ersten sendUSART-Aufruf; mecho[0..2] ist in einem common-modul als volatile uint8_t mecho [3] deklariert:
// ================================================== ===============================
void info02_irDME(void)
// Ausgabe von irDME-Nettowerten und anderen Werten (Servo, GPD)
{
char wortadc[12];
sendUSART(" i1-4\t"); // Ausgabezeile eröffnen
utoa(mecho[0], wortadc, 10); //aktuellen Rampensteuerwert ...
sendUSART(wortadc); // ... ausgeben.
sendUSART("\t"); // Tabulator
utoa(mecho[1], wortadc, 10); //aktuellen Rampensteuerwert ...
sendUSART(wortadc); // ... ausgeben.
sendUSART("\t"); // Tabulator
utoa(mecho[2], wortadc, 10); //aktuellen Rampensteuerwert ...
sendUSART(wortadc); // ... ausgeben
sendUSART("\t"); // Tabulator senden
sendUSART("Isvs1\t"); // Bezeichner für Wert
utoa(Isvs1, wortadc, 10); //aktuellen Servosteuerwert ...
sendUSART(wortadc); // ... ausgeben
sendUSART("\t"); // Tabulator senden
sendUSART("most12\t"); // Bezeichner für Wert
utoa(most12, wortadc, 10); //aktuellen Servosteuerwert ...
sendUSART(wortadc); // ... ausgeben
sendUSART("\t"); // Tabulator senden
}
/* ================================================== ============================ */
Die Routine sendUSART (für die ... warning: conflicting types for 'sendUSART' ... gemeldet wird) lautet:
/* ================================================== ============================ */
void sendUSART(char *s) // *s funktiniert wie eine Art Array - auch bei
// einem String werden die Zeichen (char) einzeln ausgelesen - und auf die
// Sendeschnittstelle übertragen
{
while(*s)
{
sendchar(*s);
s++;
}
}
/* ================================================== ============================ */
... und zu meiner Erbauung wird diese Routine (und ähnliche) nicht beanstandet:
// ================================================== ===============================
void info01(void) // Startinfo #####>>>>> steht IMMER im main-Code-modul
{
sendUSART ("\r\r\tPm168D/20 MHz\tm168D_10x61-64/614 13jul08 1848\r\r\n");
}
/* ================================================== ============================ */
Danke schon mal jetzt für eure Hilfe