Перейти к содержанию
    

Адреса функций в MPLABX (PIC18, PIC16)

Всем доброго дня.

Впервые в жизни собираю двухсоставную прошивку: загрузчик, в который включена функция main() и отдельно перетираемая часть прошивки, в которой есть свой аналог main - workmain().

Изначально предполагается что камень должен быть прошит основной прошивкой включающей загрузчик, а уже по SPI (CAN шина) дошит актуальной версией самой перетираемой частью прошивки, которая начинается, условно с адреса 0х1000.

Хочется понять, как во втором проекте, в котором пишется непосредственно перетираемая часть прошивки, назначить функции workmain конкретный адрес 0х1000, и правильно ли я понимаю, что если для данного проекта в свойствах указать начальный адрес прошивки 0х1000 компилятор сам правильно проставит адреса всем дочерним функциям и проблем с вызовом в камне не будет?

 

Основной замысел следующий:

Изначально контроллер запускается через main(), инициализирует всю требуемую периферию включая SPI. Если рабочая часть прошивки уже на месте и шить не нужно, то перебрасывает управление на 0х1000 (workmain()). Если прошивки нет то висит в штатном while() и общается с сервером. В функции workmain() свой бесконечный цикл (по сути имитация обычного main). Если в процессе работы пришла команда на апдэйт, выставляются флаги и управление снова передается в нулевой адрес (main()).

Изменено пользователем Ostroukhov1991

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день. 

Делаю такдва проекта, бутлоадер и собственно прошивка.
Бут с адреса 0x0000

Прошивка с  0x800 как правило. Бут стараюсь сделать без прерываний. В в этом случае вектора прерываний в буте   GOTO  на на тот же адрес + 0x800

По ресету запускается бут , если нет коннекта с загрузчиком то управление на 0x800

Сам проект прошивки обычный, но в линкере ему даю сдвиг на 0x800

Изначально камень шью бутом, основную прошивку загружаю уже им.  

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как компмлятор в проекте основной прошивки понимает накакую функцию он должен перейти по адресу 0х800? Или проект самой прошивки тоже имеет первичную функцию main просто смещенную на 0х800.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Компилятору все равно, он не  располагает ничего в памяти.  Это делает линкер.  Переход из бута в основную программу по команде GOTO  с явным указанием  адреса 0x800. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...