#define Fehler

#4987194
Lesenswert?

Hallo,

ich habe ein funktionsfähiges Projekt von der Arduino IDE über Atmel 
Studio in ein Atmel Studio Projekt importiert. Nun versuche ich den Code 
in Eclipse zu kopieren und möchte das Programm auf einen STM32f103... 
aufspielen.

Jetzt hängt es gerade bei den #defines

z.B.:
1
#define PSTR(s) (__extension__({static const char __c[] PROGMEM = (s); &__c[0];}))

hier sagt der  Compiler beim letzten __c: "__c" could not be resolved 
obwohl doch __c[] kurz zuvor deklariet wird. Warum??

Danke im voraus
Grüße
Gast #4987201
Lesenswert?

STM32 hat/braucht kein PROGMEM. Du kannst da das PSTR vermutlich einfach 
so definieren:
#define PSTR(s) (s)

Außerdem ist __c ein für die Standard Library reservierter Bezeichner, 
de darfst du in deinem Code nicht verwenden.

Hoffentlich hast du den Rest vom Code portiert, weil AVR Code kann man 
ja nicht einfach auf STM32 kompilieren...
#4987310
Lesenswert?

PSTR sieht für den STM wie folgt aus:
1
#define PSTR(s) ((const char *)(s))

Wie schon richtig angemerkt kennt der ARM kein Progmem. Demenstprechend 
muss man ggf. auch PROGMEM wegdefinen.

Bei mir sieht das in gänze so aus:
1
  #define PROGMEM
2
  #define PGM_P const char *
3
  #define PSTR(s) ((const PROGMEM char *)(s))
4
  #define pgm_read_byte(x) (*((uint8_t *)(x)))
5
  #define pgm_read_word(x) (*((uint16_t *)(x)))
6
  #define pgm_read_dword(x) (*((uint32_t *)(x)))
Gast #4987323
Lesenswert?

Nico W. schrieb:
> PSTR sieht für den STM wie folgt aus:#define PSTR(s) ((const char
> *)(s))
Wofür denn der cast? String-Literale werden doch automatisch zu "const 
char*" ("decay").

Nico W. schrieb:
> #define pgm_read_byte(x) (*((uint8_t *)(x)))
>   #define pgm_read_word(x) (*((uint16_t *)(x)))
>   #define pgm_read_dword(x) (*((uint32_t *)(x)))
Na hoffentlich werden die nur mit aligned Adressen genutzt...
#4987520
Lesenswert?

Dr. Sommer schrieb:
> Nico W. schrieb:
>> PSTR sieht für den STM wie folgt aus:#define PSTR(s) ((const char
>> *)(s))
> Wofür denn der cast? String-Literale werden doch automatisch zu "const
> char*" ("decay").

Ich habe in meine Projekt (AVR-STM32-Port) zwar sehr viel Code 
'hinterfragt', aber nicht jede Zeile. Werde mir das aber bei gelegenheit 
mal ansehen. Danke dafür.

Dr. Sommer schrieb:
> Na hoffentlich werden die nur mit aligned Adressen genutzt...

Der Rest ist letzendlich wie in der Arduino-IDE auch hinterlegt.

hardware/sam/xxx/cores/arduino/avr/pgmspace.h
1
#define pgm_read_byte(addr) (*(const unsigned char *)(addr))
2
#define pgm_read_word(addr) (*(const unsigned short *)(addr))
3
#define pgm_read_dword(addr) (*(const unsigned long *)(addr))

Die structs sind alle aligned. Muss mich damit jedoch auch mal näher 
befassen.

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