PROGMEM Array

OP #1826461
Lesenswert?

Hallo!

In meinem derzeitigen Projekt möchte ich gerne einen LCD benutzen. Um 
den SRAM meines ATTinys nicht allzu sehr zu belasten, möchte ich die 
mehrere Strings als Array im Flash speichern.
1
#include <stdlib.h>
2
#include <avr/io.h>
3
#include <stdint.h>
4
#include <avr/interrupt.h>
5
#include <avr/pgmspace.h>
6

7
#include "lcd.h"
8

9
#define MAX_SENSORS    3
10

11
const char sensornames[MAX_SENSORS][10] PROGMEM = {"Temp.:","Tank:","Licht:"};
12

13
int main(void) {
14
    uint8_t sensor = 0; //wird im endgueltigen Programm von Zeit zu Zeit inkrementiert
15
    lcd_init(LCD_DISP_ON);
16
    sei();
17
    
18
    lcd_clrscr();
19
    lcd_puts_P(sensornames[sensor]);
20
    
21
    for(;;){
22
    }
23
}

Jedoch gibt der gcc den Fehler (Linie mit lcd_puts_P) "ungültige 
Initialisierung" zurück.
Wie ist das zu verstehen?

Gruss
Stephan

PS: Nutze die LCD-Lib von Peter Fleury
OP #1826485
Lesenswert?

Floh schrieb:
> Genaue Fehlermeldung und Code von lcd_puts_P bitte.
1
avr-gcc  -mmcu=attiny2313 -DF_CPU=16000000UL -Os -Wall -o forum-example forum-example.c lcd.c
2
forum-example.c: In Funktion »main«:
3
forum-example.c:20: Fehler: ungültige Initialisierung

Funktion lcd_puts_P:
1
/*************************************************************************
2
Display string from program memory without auto linefeed 
3
Input:     string from program memory be be displayed                                        
4
Returns:   none
5
*************************************************************************/
6
void lcd_puts_p(const char *progmem_s)
7
/* print string from program memory on lcd (no auto linefeed) */
8
{
9
    register char c;
10

11
    while ( (c = pgm_read_byte(progmem_s++)) ) {
12
        lcd_putc(c);
13
    }
14

15
}/* lcd_puts_p */

lcd_putc sollte nicht das Problem sein, da ich die Funktion bereits 
fehlerfrei benutzen kann.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren