stringkonstanten aus dem rom lesen

OP #1019279
Lesenswert?

Hi!

Wenn ich sowas wie

uart_puts("Ich bin eine Stringkonstante im RAM!");

schreibe, dann lagert er diesen String ja im Ram aus. Wenn ich den gerne 
im Rom hätte müsste ich dort extra über

char PROGMEM s[] = "Ich bin eine Stringkonstante im ROM!";
uart_puts(&s); // Funktion die über pgm_read_byte() die variable aus dem 
ROM holt.

Geht das auch komfortabler so dass ich sowas wie uart_puts(PROGMEM 
"balbla") schreiben kann? oder so ähnlich, oder ganz automatisch.

lg PoWl
#1019442
Lesenswert?

Paul Hamacher wrote:

> welchen variablentyp muss eine funktion denn dann erwarten?
>
> uart_puts_pgm(const uint16_t *string); ?

Nein, das ist keine Frage des Variablentyps. Die Funktion muss den 
String aus dem Flash lesen, also speziell für Flash-Strings programmiert 
worden sein.
OP #1019447
Lesenswert?

ich weiß, die funktion muss ich mir schon selbst schreiben, wollte nur 
wissen was die funktion dann als argument erwartet ;-)
1
void uart_puts_pgm(char *string)
2
{
3
  char temp;
4

5
  while(1)
6
  {
7
    temp = pgm_read_byte(string);
8

9
    if(temp)
10
    {
11
      uart_putc(temp);
12
      string++;
13
    }
14
    else
15
    {
16
      break;
17
    }
18
  }
19
}

habs jetzt so, funktioniert prima. Danke!

lg PoWl

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