mikrocontroller.net

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


Autor: Martin Ramm (martinramm)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes M. (johnny-m)
Datum:

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

Autor: unbedarfter_no1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yepp, stdlib.h

Autor: Martin Ramm (martinramm)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hecht (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include <string.h>

;-)

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja wenn man halt ohne Verstaendnis Code kopiert, ne...

Autor: !!!!!! (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warnungen zur Compilerzeit,
werden zu Fehlern in der Laufzeit!

Autor: Martin Ramm (martinramm)
Datum:

Bewertung
0 lesenswert
nicht 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?!

Autor: Martin Ramm (martinramm)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Olli R. (xenusion)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin Ramm (martinramm)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: 123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Martin Ramm (martinramm)
Datum:

Bewertung
0 lesenswert
nicht 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"

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.