Forum: Compiler & IDEs Warnung bei pgm_read_byte()


von Ulrich aus W (Gast)


Lesenswert?

Hallo zusammen.
Als erfahrener AVR-ASM-Programmierer arbeite ich mich
gerade in die C-Programmierung ein. Die Beiträge in diesem
Form sind mir dabei eine große Hilfe.
Dafür schon mal herzlichen Dank!
Nun zu meinem kleinen Problem:
In einer Funktion stehen ein Array und der Code zum Auslesen.
Es funktioniert auch alles wie gewünscht aber zur Zeile
mit der Funktion pgm_read_byte() kommt die Warnung:

../MiCo_TB_C01.c:248: warning: array subscript has type 'char'


Hier noch der entsprechende Codeabschnitt:

void lcd_ini()
{

 unsigned char sz;
 static unsigned char spez_char[] PROGMEM =
 {
   0x14,
   0x14,
   0x14,
   0x1C,
    .
    .
   0x34};


  for(char i=0; i<sizeof(spez_char); i++)
    {
     sz = pgm_read_byte(&spez_char[i]);
     lcd_send(sz, date);
    }

Was muss am Code geändert werden, damit die Warnung verschwindet. Ich 
verstehe auch den Sinn der Warnung nicht. Ich hab das Array ja als char 
indiziert.

von Εrnst B. (ernst)


Lesenswert?

Vermutlich meckert er hier:
> &spez_char[i]

weil "i" vom typ Char ist, und demnach nicht sicher ist ob es signed 
oder unsigned ist. Und nachdem negative array-indices durchaus bösartig 
sein können ist es doch nett dass er da warnt...

versuchs mal so:
1
#include <stdint.h>
2
3
...
4
5
for(uint8_t i=0; i<sizeof(spez_char); i++)
6
7
...

von Ulrich aus W (Gast)


Lesenswert?

Ja, das war’s!  Danke

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.