Machs so
1 | void displayProgString(const char* string)
|
Simpel und einfach.
Möglicherweise hatte prog_char mal eine andere Funktion,
aber so wie die tyepdefs im pgmspace.h liegen, ist prog_char
an dieser Stelle sowieso keine gute Idee.
PS: Deine Schleife in der Funktion ist etwas unübersichtlich.
Wenn die Idee sein soll
Gib einen String aus, aber nicht mehr als 32 Zeichen
dann schreib das auch so ('Say what you mean')
1 | i = 0;
|
2 |
|
3 | c = (char) pgm_read_byte (string);
|
4 | while( c != '\0' && i < 32 ) {
|
5 | lcd_write_char( c );
|
6 | string++;
|
7 | i++;
|
8 | c = (char) pgm_read_byte (string);
|
9 | }
|
So hast du die Endbedingung der Schleife an einer Stelle beisammen
und nicht quer über die ganze Schleife verstreut.
Wenn dein C gut ist, dann machst du das so:
1 | i = 0;
|
2 |
|
3 | while( ( c = (char) pgm_read_byte (string)) != '\0' && i < 32 ) {
|
4 | lcd_write_char( c );
|
5 | string++;
|
6 | i++;
|
7 | }
|
oder (wenn dein C 'noch besser' ist) so:
1 | i = 0;
|
2 |
|
3 | while( ( c = (char) pgm_read_byte (string++)) != '\0' && i++ < 32 ) {
|
4 | lcd_write_char( c );
|
5 | }
|
Selbst das hier:
1 | for (i = 0; i < 32; i++)
|
2 | {
|
3 | char c = (char) pgm_read_byte (string);
|
4 | if ( c == '\0' )
|
5 | break;
|
6 |
|
7 | lcd_write_char(c);
|
8 | string++;
|
9 | }
|
wäre noch besser, da man sich nicht fragen muss, warum in der
Schleife dem i der magische Wert 32 zugewiesen wird.