haker_fox 61 17 сентября, 2020 Опубликовано 17 сентября, 2020 · Жалоба Добрый день! Продолжаю серию вопросов про линковщик. И снова прошерстил документацию вдоль и поперёк. Но вдруг, что-то не так понял. В общем, можно ли в файле линкера задать условную компиляцию линковку? Конкретно, нужно следующее #if defined(WITHOUS_BOOTLOADER) define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; #else define symbol __ICFEDIT_region_ROM_start__ = 0x08004000; #endif Желательно всем этим управлять из среды IDE IAR. Заранее падме хум))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 17 сентября, 2020 Опубликовано 17 сентября, 2020 · Жалоба В разных конфигурациях указываем разные icf да и всё. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 17 сентября, 2020 Опубликовано 17 сентября, 2020 · Жалоба 11 minutes ago, VladislavS said: В разных конфигурациях указываем разные icf да и всё. Понятно, значит условная линковака в том контексте, что я спросил невозможна) Ваш совет подходит!!! Спасибо) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 17 сентября, 2020 Опубликовано 17 сентября, 2020 · Жалоба Ну почему же, возможна. Вот из icf для stm32h743 кусочек if (isdefinedsymbol(__USE_DLIB_PERTHREAD)) { // Required in a multi-threaded application initialize by copy with packing = none { section __DLIB_PERTHREAD }; } Но в простейших случаях лучше без этого обходиться. Чтобы программе было всё равно с какого адреса стартовать, зачастую, достаточно просто добавить extern void(*__vector_table[])(); SCB->VTOR = (uint32_t)&__vector_table; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 17 сентября, 2020 Опубликовано 17 сентября, 2020 · Жалоба 18 minutes ago, VladislavS said: SCB->VTOR = (uint32_t)&__vector_table; За информацию спасибо) Но у меня нет VTOR((( 19 minutes ago, VladislavS said: if (isdefinedsymbol(__USE_DLIB_PERTHREAD)) Вот оно! Далеко в описании нашлось теперь) Спасибо!!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 17 сентября, 2020 Опубликовано 17 сентября, 2020 · Жалоба 18 минут назад, haker_fox сказал: Но у меня нет VTOR((( Ну нет так нет. Делаем REMAP и устанавливаем вектора в SRAM. :) #define InstallIRQ(name) void name##Handler(); \ *(volatile uint32_t *)(0x2000'0040 + name##n * 4) = (uint32_t)name##Handler Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться