Ostroukhov1991 0 6 июля, 2022 Опубликовано 6 июля, 2022 (изменено) · Жалоба Всем доброго дня. Впервые в жизни собираю двухсоставную прошивку: загрузчик, в который включена функция main() и отдельно перетираемая часть прошивки, в которой есть свой аналог main - workmain(). Изначально предполагается что камень должен быть прошит основной прошивкой включающей загрузчик, а уже по SPI (CAN шина) дошит актуальной версией самой перетираемой частью прошивки, которая начинается, условно с адреса 0х1000. Хочется понять, как во втором проекте, в котором пишется непосредственно перетираемая часть прошивки, назначить функции workmain конкретный адрес 0х1000, и правильно ли я понимаю, что если для данного проекта в свойствах указать начальный адрес прошивки 0х1000 компилятор сам правильно проставит адреса всем дочерним функциям и проблем с вызовом в камне не будет? Основной замысел следующий: Изначально контроллер запускается через main(), инициализирует всю требуемую периферию включая SPI. Если рабочая часть прошивки уже на месте и шить не нужно, то перебрасывает управление на 0х1000 (workmain()). Если прошивки нет то висит в штатном while() и общается с сервером. В функции workmain() свой бесконечный цикл (по сути имитация обычного main). Если в процессе работы пришла команда на апдэйт, выставляются флаги и управление снова передается в нулевой адрес (main()). Изменено 6 июля, 2022 пользователем Ostroukhov1991 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Driver_GV 1 6 июля, 2022 Опубликовано 6 июля, 2022 · Жалоба Добрый день. Делаю так: два проекта, бутлоадер и собственно прошивка. Бут с адреса 0x0000 Прошивка с 0x800 как правило. Бут стараюсь сделать без прерываний. В в этом случае вектора прерываний в буте GOTO на на тот же адрес + 0x800 По ресету запускается бут , если нет коннекта с загрузчиком то управление на 0x800 Сам проект прошивки обычный, но в линкере ему даю сдвиг на 0x800 Изначально камень шью бутом, основную прошивку загружаю уже им. Использую только свои буты и сам пишк софт под ком для загрузки , тем самым обеспечиваю секюрность. Также в основной прошивке есть проверки оригинальности бута . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ostroukhov1991 0 6 июля, 2022 Опубликовано 6 июля, 2022 · Жалоба А как компмлятор в проекте основной прошивки понимает накакую функцию он должен перейти по адресу 0х800? Или проект самой прошивки тоже имеет первичную функцию main просто смещенную на 0х800. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Driver_GV 1 7 июля, 2022 Опубликовано 7 июля, 2022 · Жалоба Компилятору все равно, он не располагает ничего в памяти. Это делает линкер. Переход из бута в основную программу по команде GOTO с явным указанием адреса 0x800. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться