ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
3 мая
1410200 Топик полностью
il-2 (04.03.2024 09:46, просмотров: 106) ответил my504 на Вопрос про Си. Имеется проект бута для АРМа на Keil 5. Расположил его во флеше с начала до 0x08003FFF. Решил вписать версию бута по адресу 0x08003FF0 - типа почти в самый конец выделенного флеша. А линкер берет и все инициализирующие константы ОЗУ ставит под адрес с версией бута (0x08003FF0) и, естественно, вылетает за расчетную область флеша. Причем свободного места в выделенной для бута области немерено... Код заканчивается еще до адреса 0x08003000. Как управлять
Доцентлинкер тупой. Добавляет данные в продолжение секции, игнорируя наличие пустот. Правильный способ - использовать именованную секцию и располагать ее по нужному адресу. У АРМовского линкера есть для этого дела секции со спец. названием типа - ".ARM.__at_0x08004000" - обзываешь так секцию, линкер сам ее располагает по нужному адресу. См. доки на линкер, там есть. 

Есть еще способ - включить опцию "Use Cross-module optimization" - см. опцию линкера --feedback. Она помогает оптимизировать пустоты. Но при этом выключается мультипроцессорная сборка проекта, и х.з. оптимизирует ли она пустоты внутри модуля.