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
2012.03
mm@ils.uec.ac.jp