www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik warning: differ in signedness, -fsigned-char


Autor: warning destroyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
moinmoin,
ich möchte ein C Projekt gern kompilieren, bekomme dabei allerdings 
einige warnings der art:  ../screen.c:70: warning: pointer targets in 
passing argument 3 of 'lcd_put_string_P' differ in signedness

Ich vermute, das liegt an der compileroption -fsigned-char, die für alle 
files aufgeführt ist. Ich kann sie im AVR Studio aus den Projekt jedoch 
leider nicht rauslöschen. auf remove klicken sorgt kurz dafür, dass sie 
gelöscht wird, beim nächsten aufruf der Projektoptionen ist sie aber 
wieder da

hat da jemand 'nen tip für mich, wie ich die rausbekomme? funktionieren 
tut es zwar auch trotz der warnung, aber ich möcht nicht immer schauen, 
ob sich unter den warnings nicht vielleicht doch noch 'ne böse versteckt 
hat.

Vielen Dank,
Martin

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Haste mal in dem Dialog "General" (da wo man auch die Taktfrequenz, 
Optimierung usw. angibt) ein Häkchen bei "Unsigned chars 
(-funsigned-char)" gemacht? Afaik muss immer eine der beiden Optionen 
angegeben sein.

Autor: warning destroyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab ich versucht, hat mich aber leider auch nicht weitergebracht, die 
warnings bleiben.
Ich hab hier ein (fremdes) Projekt, indem weder -funsigned-char noch 
-fsigned-char in den optionen stehen, sonst werd ich gleich mal 
versuchen, das zu kopieren und den quelltext einzufügen, aber das ist 
nicht unbedingt die lösung, die ich auf dauer bevorzuge, ich würd gern 
verstehen, warum das nicht klappt...

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann wirst Du wohl das Programm mal durchsehen müssen und schauen, dass 
Zeichen, die ausgegeben werden sollen, als char und nicht als unsigned 
char deklariert sind. Ich vermute, Du hast halt eine Mischung aus 
beiden...

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
laß mich raten ;-)) der neue AVR GCC ;-)) Du ließt strings aus dem ROM 
mit unsigned char obwohl es const char sein sollte.

Der aktuelle GCC meckert das an.

Autor: warning destroyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
// definition der messages:
static const uint8_t msg_waiting[] PROGMEM = "Waiting for input";


//die funktion:
uint8_t lcd_put_string_P( uint8_t  left, uint8_t top, PGM_P string) 
{
 uint8_t i;
 uint8_t endpos;
 uint8_t ch;

 endpos = left;
 i = 0;
 ch = pgm_read_byte(&string[i]);
 while(ch)
 {
   endpos = lcd_put_char(endpos, top, ch);
   i++;
   ch = pgm_read_byte(&string[i]);
 }
return(endpos);
}


//der aufruf
lcd_put_string_P(12, 25, msg_waiting);
was müsste da geändert werden, damit die warnings verschwinden? ist 
PGM_P ein "normaler" datentyp? ich hab ihn nämlich noch nicht gesehen, 
hab aber auch die definition dessen gerade noch nicht gefunden.



Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ist PGM_P ein "normaler" datentyp?
Es ist zumindest kein Standard-Datentyp, sondern vermutlich irgendein 
anwendungsspezifischer. Ersetze mal in der Definition der Message das 
"uint8_t" durch "char".

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Besser noch const char.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Joe:
Das "const" steht doch schon da...

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der Funktion ? hab ich Tomaten aufn Augen ?!?

Beispiel:
void lcd_puts (const char *lcd_string)  {
  while (*lcd_string)  {
    lcd_char (*lcd_string++);  // string an LCD Ausgabe
  }
}

nu kannste
lcd_puts ("WIN_AVR GCC");

  

Autor: warning destroyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich bin nun auch schlauer geworden, wo das PGM_P herkommt.
In der <avr/pgmspace.h> lässt sich der folgende Eintrag finden:

typedef char prog_char PROGMEM;

#ifndef PGM_P
#define PGM_P const prog_char *
#endif

ein ändern des uint8_t in char hat die warnings wegbekommen. Vielen Dank 
für eure Hilfe und einen schönen Abend noch.

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.