Я у STM32F205 задействовал первый сектор (размером 16К) под хранение констант. Если включить "гнутое" расширение в кейле, то получается удобно. Умеет кейл. --- Описание ---
//* Константы разместим в первом секторе флэшь.
//* Размер сектора 16 кБ. Остаток сектора займём пустым массивом, чтоб код не попал в этот сектор
#define PAGE_SIZE ((uint32_t)0x4000 ) // sector1 size = 16KByte
#define CONST_START ((uint32_t)0x08004000 ) // start address from sector1
#define CONST_ID FLASH_Sector_1
#define DUMMY_SZ (PAGE_SIZE - sizeof( Flash_Constant ))
typedef struct
{ unsigned short Firmware_ver;
const char build_date[sizeof( __DATE__ )]; // "Apr 23 2011"
const char build_time[sizeof( __TIME__ )]; // "14:18:40"
unsigned long Firm_number; // заводской номер прибора
..........
..........
} Flash_Constant;
//$ Константы разместим в первом секторе флэшь. Размер сектора 16 кБ.
//$ Остаток сектора займём пустым массивом, чтоб код не попал в этот сектор
#pragma anon_unions
typedef struct
{ Flash_Constant;
char dummy_arr[DUMMY_SZ];
} Constant;
--- Инициализация ---
#if defined( MAIN_FILE ) // объявлена в файле, где функция main()
const Constant f_const __attribute__(( at( CONST_START ))) =
{ { 0x0001, // Firmware_ver;
__DATE__, // build_date[];
__TIME__, // build_time[];
0, // Firm_number; заводской номер прибора
...........................
...........................
},
{ [0 ... ( DUMMY_SZ - 1 )] = 0xff } // остальное заполним 0xff.
// Это расширение для GNU, поэтому в "options" для файла с main()
// во вкладке С/С++, в поле "Misc Controls" пропишем "--gnu"
};
#define gl_dat
#else // MAIN_FILE
#define gl_dat extern
extern const Constant f_const;
#endif // MAIN_FILE
--- Использование ---
printf( "%d", f_const.Firm_number );