UP

__CONST(コード領域にデータを確保する)

ROM領域にデータを確保するにはグローバルでは"const"、ローカルでは "const static"を指定すればいいかと思っていたが DACの使用例のプログラムを書いているときに 8bit x 256の配列を作ったらリンク時にメモリが足りないような雰囲気の エラーが出た。どうもROM領域に確保するときは"__CONST"と書くようだ。 ローカルなら"__CONST static"だろうか(未確認)。

例:
__CONST uint8_t dmap[128]=
{
  128,134,140,146,152,158,165,170,176,182,188,193,198,203,208,213,
  218,222,226,230,234,237,240,243,245,248,250,251,253,254,254,255,
  255,255,254,254,253,251,250,248,245,243,240,237,234,230,226,222,
  218,213,208,203,198,193,188,182,176,170,165,158,152,146,140,134,
  128,121,115,109,103, 97, 90, 85, 79, 73, 67, 62, 57, 52, 47, 42,
   37, 33, 29, 25, 21, 18, 15, 12, 10,  7,  5,  4,  2,  1,  1,  0,
    0,  0,  1,  1,  2,  4,  5,  7, 10, 12, 15, 18, 21, 25, 29, 33,
   37, 42, 47, 52, 57, 62, 67, 73, 79, 85, 90, 97,103,109,115,121
};

追記:
__CONSTはマクロで
  #define __CONST code
らしい。

stm8l15x.h:
#ifdef _COSMIC_
 #define FAR  @far
 #define NEAR @near
 #define TINY @tiny
 #define EEPROM @eeprom
 #define __CONST  const
 #define IN_RAM
#elif defined (_RAISONANCE_) /* __RCST7__ */
 #define FAR  far
 #define NEAR data
 #define TINY page0
 #define EEPROM eeprom
 #define __CONST  code
 #define IN_RAM inram
 #if defined (STM8L15X_MD) || defined (STM8L15X_MDP)
  /*!< Used with memory Models for code less than 64K */
  #define MEMCPY memcpy
 #else /* STM8L15X_HD */
   /*!< Used with memory Models for code higher than 64K */
  #define MEMCPY fmemcpy
 #endif /* STM8L15X_MD or STM8L15X_MDP */ 
#else /*_IAR_*/
 #define FAR  __far
 #define NEAR __near
 #define TINY __tiny
 #define EEPROM __eeprom
 #define __CONST  const
 #define IN_RAM  
#endif /* __CSMC__ */

ST7/STM8 C Compiler Manual

keywords

2012.03
mm@ils.uec.ac.jp