ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
22 декабря
376937 Топик полностью
VAI (23.12.2012 13:21 - 13:23, просмотров: 176) ответил Юра на FLASH у STM32F4xx показалась неудобной для эмуляции EEPROM. Секторы флеши 4х16К, 1х64К и штук до 7 по 128К.Где располагать эмулированную EEPROM если кодом занято 64К? Сделать внизу и кодом "обтекать" или расположить повыше работать со
Я у 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 );