Forum: Mikrocontroller und Digitale Elektronik Was ist mit diesen Warnhinweisen gemeint?


von Martin R. (martinramm)


Lesenswert?

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

von Johannes M. (johnny-m)


Lesenswert?

Martin Ramm wrote:
> was ist damit gemeint? brauche ich eine weiter "include" Datei?
Ja.

von unbedarfter_no1 (Gast)


Lesenswert?

Yepp, stdlib.h

von Martin R. (martinramm)


Lesenswert?

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

von Hecht (Gast)


Lesenswert?

#include <string.h>

;-)

von yalu (Gast)


Lesenswert?

> 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.

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Tja wenn man halt ohne Verstaendnis Code kopiert, ne...

von !!!!!! (Gast)


Lesenswert?

Warnungen zur Compilerzeit,
werden zu Fehlern in der Laufzeit!

von Martin R. (martinramm)


Lesenswert?

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?!

von Martin R. (martinramm)


Lesenswert?

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

von Olli R. (xenusion)


Lesenswert?

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.

von Matthias (Gast)


Lesenswert?

"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.

von Martin R. (martinramm)


Lesenswert?

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

von 123 (Gast)


Lesenswert?

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...

von Martin R. (martinramm)


Lesenswert?

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
Noch kein Account? Hier anmelden.