prog_char deprecated (PROGMEM) - Atmel Studio

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
mattswe
Inlägg: 155
Blev medlem: 20 augusti 2012, 13:27:51

prog_char deprecated (PROGMEM) - Atmel Studio

Inlägg av mattswe »

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:

Kod: Markera allt

uint16_t fill_tcp_data_p(uint8_t *buf,uint16_t pos, const prog_char *progmem_s)
{...};
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:

Kod: Markera allt

typedef char PROGMEM prog_char;
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:

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)
{...};
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?

Kod: Markera allt

uint16_t fill_tcp_data_p(uint8_t *buf,uint16_t pos, const char *progmem_s)
{...};
mattswe
Inlägg: 155
Blev medlem: 20 augusti 2012, 13:27:51

Re: prog_char deprecated (PROGMEM) - Atmel Studio

Inlägg av mattswe »

Ett anrop till funktionen ser ut enligt följande:

Kod: Markera allt

plen=es.fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>200 OK</h1>"));
Strängen deklareras med macrot PSTR(), så jag antar att funktionsdeklarationen måste ange att pekaren ska peka till flash-minnet. Då borde det inte fungera att byta prog_char mot char. Eller?
mattswe
Inlägg: 155
Blev medlem: 20 augusti 2012, 13:27:51

Re: prog_char deprecated (PROGMEM) - Atmel Studio

Inlägg av mattswe »

Här kommer hela funktionen:

Kod: Markera allt

uint16_t fill_tcp_data_p(uint8_t *buf,uint16_t pos, const prog_char *progmem_s)
{
        char c;
        // fill in tcp data at position pos
        //
        // with no options the data starts after the checksum + 2 more bytes (urgent ptr)
        while ((c = pgm_read_byte(progmem_s++))) {
                buf[TCP_CHECKSUM_L_P+3+pos]=c;
                pos++;
        }
        return(pos);
}
Det faktum att funktionen pgm_read_byte() används för att hämta data via pekaren, kan det vara så att det är tillräckligt och att jag därför ändå kan byta ut prog_char mot en vanlig char för pekaren i funktionshuvudet tro?
nifelheim
Den första
Inlägg: 2329
Blev medlem: 27 mars 2008, 22:31:16
Ort: stockholm

Re: prog_char deprecated (PROGMEM) - Atmel Studio

Inlägg av nifelheim »

mattswe
Inlägg: 155
Blev medlem: 20 augusti 2012, 13:27:51

Re: prog_char deprecated (PROGMEM) - Atmel Studio

Inlägg av mattswe »

Tack för tipset. Jag har googlat men inte sett den sidan. Den tycks bekräfta att jag i mitt exempel ska byta ut prog_char mot char.
Blir till att göra ett test.
Skriv svar