AVR PROGMEM Spezifikt im Quellkode ersetzen

Gast #2352883
Lesenswert?

Ich versuche einen umfangreichen AVR-Quellcode in C auf einen ARM zu 
portieren. Deshalb habe ich mir einige Defines gemacht, welche alles was 
mit der AVR-Spezifik des Programmspeichers zu tun hat, normalisiert für 
einen linearen Adressraum.
1
#define prog_char char
2
#define prog_void void
3
#define PROGMEM /* solle Leerstelle erzeugen */
4
#define PSTR(s) s
5
#define pgm_read_byte(ptr)  ((char)*(ptr))
6
#define pgm_read_word(ptr)  ((int)*(ptr))
7
#define pgm_read_dword(ptr) ((long)*(ptr))

Gibst so eine Tabelle schon fertig? Z.B. auch für die _P Funktionen 
usw.?
Gast #2352931
Lesenswert?

Hi, Alf,

schaut auf den ersten Blick gut aus.

Lediglich hier
> #define PSTR(s) s
stolpere ich, ob es nicht *s heissen sollte?

Der eine uP trennt Datenspeicher von Programmspeicher und nutzt sie 
gleichzheitig, der andere packt alles ins SDRAM.

Ciao
Wolfgang Horn
#2352961
Lesenswert?

Wolfgang Horn schrieb:
> Hi, Alf,
>
> schaut auf den ersten Blick gut aus.
>
> Lediglich hier
>> #define PSTR(s) s
> stolpere ich, ob es nicht *s heissen sollte?

Müsste schon stimmen.

Die typische Verwendung von PSTR ist ja

   lcd_puts( PSTR("Hallo World") );

wobei der PSTR dafür sorgt, dass der String ins Flash kommt und 
stattdessen ein Pointer ins Flash an lcd_puts übergeben wird.

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