Am 06/12/2014 12:23 PM, schrieb Royce Pereira:
Hi,

I recently updated WinAVR to a newer version of the AVR-GCC toolchain,
downloaded from the Atmel site.

My version is this:

avr-gcc (AVR_8_bit_GNU_Toolchain_3.4.3_1072) 4.8.1

My code was compiling without errors before, but with this version, it
is giving errors in spite of following the instructions in the faq
section of the avr-libc document.
//---------------------------------------------
#include <avr/io.h>
#include <avr/pgmspace.h>

const char ptmpUP_msg[]      PROGMEM = "Upper Temp" ;
const char ptmpDN_msg[]      PROGMEM = "Lower Temp" ;
const char ptmpCLG_msg[]     PROGMEM = "Chiller Temp" ;

PGM_P  pgtmp_msg[]    PROGMEM =
    { ptmpUP_msg, ptmpDN_msg,  ptmpCLG_msg,} ;

//------------------------------------------------------
The above code gives the following error:

error: variable 'pgtmp_msg' must be const in order to be put into
read-only section by means of  '__attribute__((progmem))'


Read the GCC release notes, it's mentioned in "Caveats":

https://gcc.gnu.org/gcc-4.6/changes.html


Just qualify objects that shall go into flash as const.

If you prefer progmem and pgm_read_*, the definitions read:

#include <avr/pgmspace.h>

const char ptmpUP_msg[]      PROGMEM = "Upper Temp";
const char ptmpDN_msg[]      PROGMEM = "Lower Temp";
const char ptmpCLG_msg[]     PROGMEM = "Chiller Temp";

const char* const pgtmp_msg[]  PROGMEM =
{ ptmpUP_msg, ptmpDN_msg,  ptmpCLG_msg };


If you prefer __flash, the definitions read:

const __flash char ptmpUP_msg[]  = "Upper Temp";
const __flash char ptmpDN_msg[]  = "Lower Temp";
const __flash char ptmpCLG_msg[] = "Chiller Temp";

const __flash char* const __flash pgtmp_msg[] =
{ ptmpUP_msg, ptmpDN_msg,  ptmpCLG_msg };

pgtmp_msg is const and located in flash. And it contains elements that are pointers to const locations in flash.


Johann


_______________________________________________
AVR-GCC-list mailing list
AVR-GCC-list@nongnu.org
https://lists.nongnu.org/mailman/listinfo/avr-gcc-list

Reply via email to