prog_char deprecated (PROGMEM) - Atmel Studio
Postat: 1 augusti 2014, 10:03:42
Hej!
Jag håller på att ta bort alla Arduino-beroenden ur ett lib i Atmel Studio och har stött på följande deklaration:
Koden ger ett felmeddelande: 'prog_char' does not name a type
När jag kollar upp typedefen för prog_char i avr/pgmspace.h så står det att den är deprecated. Typedefen ser ut enligt följande:
Men den är som sagt, deprecated.
Försöker jag byta ut prog_char mot "char PROGMEM" så går går kompileringen igenom, men jag får en varning "__progmem__ attribute ignored". Jag tolkar det som att PROGMEM-direktivet ignoreras och variablen helt enkelt lagras i SRAM istället för i flash-minnet. Båda följande exempel ger samma varning:
Om jag helt enkelt byter ut prog_char mot en vanlig char så går kompileringen igenom utan varning. Är detta rätt väg att gå? Och i så fall, går det inte längre att placera variabler i flash-minnet?
Jag håller på att ta bort alla Arduino-beroenden ur ett lib i Atmel Studio och har stött på följande deklaration:
Kod: Markera allt
uint16_t fill_tcp_data_p(uint8_t *buf,uint16_t pos, const prog_char *progmem_s)
{...};
När jag kollar upp typedefen för prog_char i avr/pgmspace.h så står det att den är deprecated. Typedefen ser ut enligt följande:
Kod: Markera allt
typedef char PROGMEM prog_char;
Försöker jag byta ut prog_char mot "char PROGMEM" så går går kompileringen igenom, men jag får en varning "__progmem__ attribute ignored". Jag tolkar det som att PROGMEM-direktivet ignoreras och variablen helt enkelt lagras i SRAM istället för i flash-minnet. Båda följande exempel ger samma varning:
Kod: Markera allt
uint16_t fill_tcp_data_p(uint8_t *buf,uint16_t pos, const char PROGMEM *progmem_s)
uint16_t fill_tcp_data_p(uint8_t *buf,uint16_t pos, PROGMEM const char *progmem_s)
{...};
Kod: Markera allt
uint16_t fill_tcp_data_p(uint8_t *buf,uint16_t pos, const char *progmem_s)
{...};