Hallo, ich bin dabei einen Mega 32 zu programmieren und gebe über einen UART Strings ein wodurch ich verschiede PWM's Modulieren kann. Unter anderem habe ich diese Case Anweisung: case '1': memset(Line,0,sizeof(Line)); uart_gets(Line, sizeof(Line)); proz = atoi(Line); //my_int = atoi(buffer); OCR1AL = proz*2.55; break; dabei bekomme ich aber diese Warnungen: main.c:117: warning: implicit declaration of function 'memset' main.c:117: warning: incompatible implicit declaration of built-in function 'memset' main.c:119: warning: implicit declaration of function 'atoi' was ist damit gemeint? brauche ich eine weiter "include" Datei? Gruß Martin
Martin Ramm wrote:
> was ist damit gemeint? brauche ich eine weiter "include" Datei?
Ja.
habe jetzt mein Code um #include <stdlib.h> erweitert, jedoch bekomme ich immernoch diese Warnungen main.c:118: warning: implicit declaration of function 'memset' main.c:118: warning: incompatible implicit declaration of built-in function 'memset' sind die Warnungen denn überhaupt so wichtig? gruß Martin
> sind die Warnungen denn überhaupt so wichtig?
In diesem Fall nicht. Man sollte aber Programme immer so schreiben, dass
der Compiler keine Warnungen ausgibt. Sonst übersieht man möglicherweise
eine andere Warnung, die auf einen wirkliches Problem hinweist.
Tja wenn man halt ohne Verstaendnis Code kopiert, ne...
Warnungen zur Compilerzeit, werden zu Fehlern in der Laufzeit!
Michael G. wrote:
> Tja wenn man halt ohne Verstaendnis Code kopiert, ne...
es tut mir leid das nicht jeder als Programmiergott vom Himmel fällt.
Ich denke selbst du hast irgendwann einmal angefangen?!
Ich habe jetzt folgendes Problem. Ich habe diese Funktion, wie schon bemerkt die nicht aus meiner Feder stammt: void uart_gets( char* Buffer, uint8_t MaxLen ) { uint8_t NextChar; uint8_t StringLen = 0; while (!(UCSRA & (1<<RXC))); NextChar = UDR; // Warte auf und empfange das nächste Zeichen // Sammle solange Zeichen, bis: // * entweder das String Ende Zeichen kam // * oder das aufnehmende Array voll ist while( NextChar != '\n' && StringLen < MaxLen - 1 ) { *Buffer++ = NextChar; StringLen++; while (!(UCSRA & (1<<RXC))); NextChar = UDR; } // Noch ein '\0' anhängen um einen Standard // C-String daraus zu machen *Buffer = '\0'; } Der Pointer "Buffer" fängt nicht immer wieder bei der ersten Stelle an. Ich übergebe der Funktion ein Array mit 3 Stellen. Die Funktion soll immer bei der ersten Stelle des Arrays anfangen zu schreiben. Weiß jemand wie ich das hinbekomme? Gruß Martin
Das Eingangsposting betreffend: zum Compiler gibt es manpages, und wenn man nach dem Wortlaut der Fehlermeldung googelt, bekommt man 100%ig einen Treffer, der einem die Loesung aufzeigt. Aber die Arbeit an andere zu deligieren ist natuerlich bequemer.
"Implicit Declaration" bedeutet, dass zum Zeitpunkt des Aufrufes der Funktion kein Prototyp derselben bekannt ist. Oder auf Deutsch: Der Compiler geht deinen Code wahrscheinlich nur einmal von oben nach unten durch und kennt an besagter Stelle den Aufruf "memset" nicht. Bei selbstgebauten Funktionen umschifft man das mit Prototypen, bei vorgefertigten Funktionen eben mit dem richtigen include.
das ist schonmal ein guter hinweis. sorry auf die idee mit google bin ich garnicht gekommen. Werde aber mal gucken. Hat vielleicht auch jemand eine Lösung für das "Pointerproblem". Gruß Martin
Zeig mal deinen Funktionsaufruf von uart_gets() bzw. den rest vom Programm. Wenn du immer den Anfang deines Arrays übergibst, wird auch immer an den Anfang geschrieben...
habe die Diskussion mal in einen anderen Thread verlagert wo der Betreff wesentlich passender ist als hier. Beitrag "Re: Pointer Problem bei Uart Zeichenkette"
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.