Камень-STM32F205RC
в ld файле добавляю две секции.
В отладчике всё работает. Но бинарник получается размером с небоскрёб: 393 344 кб.
Если убрать ram_user_info_section размер приходит в норму. Не могу понять что не так!
MEMORY { RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 80K RAM2_USER_INFO (xrw) : ORIGIN = 0x2001C000, LENGTH = 16K FLASH_USER_INFO_BACKUP (rx) : ORIGIN = 0x8000000, LENGTH = 16K FLASH (rx) : ORIGIN = 0x8004000, LENGTH = 48K /*RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 80K*/ /*RAM2 (xrw) : ORIGIN = 0x2001C000, LENGTH = 16K*/ /*FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 256K*/ } SECTIONS { .... /* Section for user info*/ .ram_user_info_section : { . = ALIGN(4); KEEP(*(.ram_user_info_section)) . = ALIGN(4); } >RAM2_USER_INFO /*Section for backup user info*/ .flash_user_info_backup_section : { . = ALIGN(4); KEEP(*(.flash_user_info_backup_section)) . = ALIGN(4); } >FLASH_USER_INFO_BACKUP }
Решение в https://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_node/ld_21.html
есть опция NOLOAD. Она решает данную проблему.
Не понятно почему без неё добавляется не 16K а 393320K
в elf обе секции клались во флеш с размерами по 0x30000;
SECTIONS { .... /* Section for user info*/ .ram_user_info_section (NOLOAD) : { . = ALIGN(4); KEEP(*(.ram_user_info_section)) . = ALIGN(4); } >RAM2_USER_INFO /*Section for backup user info*/ .flash_user_info_backup_section (NOLOAD) : { . = ALIGN(4); KEEP(*(.flash_user_info_backup_section)) . = ALIGN(4); } >FLASH_USER_INFO_BACKUP }
Интересно, а проект можешь скинуть?
да как такового ещё нет. Переделываю бутлоадер. Секции переставил, чтобы в 0x08000000 переход не делать.
Хочу в flash_user_backup_section эмуляцию eeprom сделать. Но вот с секцией в рам, почему то коллизия получилась.
При этом линкер не жаловался на выход за пределы флеш памяти.
Такой бутлоадер уже работает с внешней флеш микросхемой. Но иногда происходит сбой и признак приложения удаляется.
Вот хочу во внутреннюю флеш перенести.