Нужно в icf файле "отрезать" часть флеш нужного размера http://www.md4u.ru/viewtopic.php?f=94&t=9540
Например так: /* vovka define symbol __ICFEDIT_region_ROM_end__ = 0x0803FFFF; - 256K для STM32F103RCT6 отрезаем 2 блока по 2 К для хранения настроек и получаем 0x0803FFFF - 0x00001000 = 0x0803EFFF соответственно адреса блоков будут 0x0803F000 и 0x0803F800 */ А в тексте программы объявить то, что отрезано: // "мои" определения // два блока по 2кБ для хранения конфигурации #define BLOCK_SIZE 2048 #define BLOCK_BASE_ADDR_1 ((unsigned int) 0x0803F000) #define BLOCK_BASE_ADDR_2 ((unsigned int) 0x0803F800) По ссылке "первый подход" к цифровому металлодетектору. По крайней мере я надеюсь, что первый ;-) Файл "eeprom_emu.c" содержит полный пример работы. Полность эмулировать EEPROM не получилось. EEPROM допускает запись данных, если уже записанная часть совпадает с вновь записываемой. То есть при изменении хотябы одного бита нужно стирать всю страницу.
Например так: /* vovka define symbol __ICFEDIT_region_ROM_end__ = 0x0803FFFF; - 256K для STM32F103RCT6 отрезаем 2 блока по 2 К для хранения настроек и получаем 0x0803FFFF - 0x00001000 = 0x0803EFFF соответственно адреса блоков будут 0x0803F000 и 0x0803F800 */ А в тексте программы объявить то, что отрезано: // "мои" определения // два блока по 2кБ для хранения конфигурации #define BLOCK_SIZE 2048 #define BLOCK_BASE_ADDR_1 ((unsigned int) 0x0803F000) #define BLOCK_BASE_ADDR_2 ((unsigned int) 0x0803F800) По ссылке "первый подход" к цифровому металлодетектору. По крайней мере я надеюсь, что первый ;-) Файл "eeprom_emu.c" содержит полный пример работы. Полность эмулировать EEPROM не получилось. EEPROM допускает запись данных, если уже записанная часть совпадает с вновь записываемой. То есть при изменении хотябы одного бита нужно стирать всю страницу.