ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
27 ноября
1221833 Топик полностью
shan (08.07.2022 23:41, просмотров: 146) ответил POV на Так стартует всё равно с 0x08000000. Там должно быть что-то что передаст управление... у меня там загрузчик.
Я делаю так в проектах с СМ4. 

При ресете стартует загрузчик с 0х0800000 . Приложение с 0х0800С000. Последний адрес приложения, версия приложения тип приложения пишу в неиспользуемые вектора прерывания приложения. Загрузчик в файловой системе ищет файл с прошивкой. Если файл есть проверяет его тип и КС. Если ОК, то загружает файл с 0х0800С000 до последнего адреса из таблицы прерываний файла. Если файла нет то далее Он проверяет целостность приложения по КС .

Если КС ОК, то загрузчик запрещает прерывания, через VTAB меняет положение во флеш памяти таблицы прерываний на 0х0800С000 , загружает в стек значение первого слова приложениея и передает управление по адресу во втором слове приложения.

Приложение имеет WEB сервер и по http умеет загружать файл новой прошивки в файловую систему и затем делает програмный ресет, чтобы передать управление загрузчику.\


Для проектов с СМ0 прошивки грузятся по RS485/Modbus. Загрузчик короткий. Приложение с 0х08001800. При необходимости перепрошить Мастер по 485 дает команду приложению на ресет. После ресета начинает работать всегда загрузчик. Он ждет 2 сек команд мастера на заливку новой версии. Если у мастера есть прошивка, он в широковещательном режиме передает прошивку по шине RS485. Получив первую порцию прошивки ( там вектора) загрузчик каждого модуля на шине RS485 сверяет тип прошивки (из ячейки неиспользуемого вектора) со своим типом. Если она для него, то начинает писать её с адреса 0х08001800. Если прошивки нет, мастер сразу дает команду на старт приложения. Если мастер помер то загрузчик через 2 сек сам стартует приложение. Загрузчик проверяет КС приложения и если всё ок переписывает таблицу векторов из флеш в младшие адреса ОЗУ и переключает контроллер прерываний на ОЗУ (у CM0 нет VTAB)

В свойствах проекта пишу, что ОЗУ начинается с адреса 20000100, чтобы компоновщик не занимал младшие адреса ОЗУ под переменные.

Начало ПЗУ в свойствах TARGET проекта приложения 0х0800С000 (для СМ3, СМ4) или 0х08001800 (для СМ0)

Вначале приложение отлаживаю без загрузчика с 0х08000000, сделав два таргета - один с нулевого адреса для отладки без загрузчика, и второй для компоновки со смещением.

Для СМ3, СМ4 СМ0 пользуюсь только Кейлом. Никаких скриптов Link-у. После полной отладки. обьединяю нех файлы прошивок загрузчика и приложения в один для программирования при производстве. Пишу программатором ST-Link_v2 и STLink Utility