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
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.
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...
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...
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.
1 | // definition der messages:
|
2 | static const uint8_t msg_waiting[] PROGMEM = "Waiting for input"; |
3 | |
4 | |
5 | //die funktion:
|
6 | uint8_t lcd_put_string_P( uint8_t left, uint8_t top, PGM_P string) |
7 | {
|
8 | uint8_t i; |
9 | uint8_t endpos; |
10 | uint8_t ch; |
11 | |
12 | endpos = left; |
13 | i = 0; |
14 | ch = pgm_read_byte(&string[i]); |
15 | while(ch) |
16 | {
|
17 | endpos = lcd_put_char(endpos, top, ch); |
18 | i++; |
19 | ch = pgm_read_byte(&string[i]); |
20 | }
|
21 | return(endpos); |
22 | }
|
23 | |
24 | |
25 | //der aufruf
|
26 | 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.
> 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".
In der Funktion ? hab ich Tomaten aufn Augen ?!? Beispiel:
1 | void lcd_puts (const char *lcd_string) { |
2 | while (*lcd_string) { |
3 | lcd_char (*lcd_string++); // string an LCD Ausgabe |
4 | }
|
5 | }
|
nu kannste
1 | lcd_puts ("WIN_AVR GCC"); |
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.
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.