Котоколлеги, приветствую!
Никак не найду, где в CubeIDE задаются настройки стартового адреса для программы.
Хочу использовать свой загрузчик, а для этого нужно начинать основную программу не с начала памяти, а с зазором для программы загрузчика.
Чтобы было совсем понятно, что я имею в виду, в Keil это вот здесь:
Это назначение стартового адреса таблицы прерываний и др.
Не знаю как в CubeIDE, в EmBitz адрес задается в ld файле (например stm32f103c8_flash.ld). В нем есть строки
#define FLASH_BASE ((uint32_t)0x08000000U) /*!< FLASH base address in the alias region */
#define FLASH_BANK1_END ((uint32_t)0x0801FFFFU) /*!< FLASH END address of bank1 */
#define SRAM_BASE ((uint32_t)0x20000000U) /*!< SRAM base address in the alias region */
#define PERIPH_BASE ((uint32_t)0x40000000U) /*!< Peripheral base address in the alias region */
По идее, если переопределить FLASH_BASE на более поздний адрес, то программа будет записана не в начало флеша, а начиная с заданного адреса.
Проверить не могу пока - не умею. Планирую писать свой загрузчик, потому решил этим вопросом озаботиться заранее.
Спасибо ответившим.
Солнцеворот писал(а):По идее, если переопределить FLASH_BASE на более поздний адрес, то программа будет записана не в начало флеша, а начиная с заданного адреса.
Место расположения программы определяет линкер, а не компилятор. Эти дефайны совсем для других целей.
Солнцеворот писал(а):Проверить не могу пока - не умею. Планирую писать свой загрузчик, потому решил этим вопросом озаботиться заранее.
Если вы не умеете отредактировать значения дефайнов, проверить и чтобы убедится что это не сработало, как собираетесь писать загрузчик? В нем кроме всего прочего, необходимо корректно деинициализировать всю используемую периферию и перейти в основной код. Задача не так проста как кажется. На многих форумах данная тема обсуждается.