реклама на сайте
подробности

 
 
> Как сделать lwip bootloader?
viakon
сообщение Jul 8 2015, 09:14
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 290
Регистрация: 9-12-05
Из: г. Пермь
Пользователь №: 12 002



Девайс на STM32F107. Основная программа использует LWIP, с этим рабобрался. Теперь стоит задача прошивать девайс по сети, и вот тут возникает проблема, как-то расточительно иметь во флеше 2 копии lwip. Но если по другому нельзя, как объяснить компилятору что исходники из вот этого каталога для булодыря, а вот из этого, точно такие же, с теми же названиями - основная программа.
Можно сделать отдельно 2 проги бут и основная, но уже есть функции вызываемые оновной программой в буте.
Идеальный вариант LWIP в бутлодыре и делать вызов функций из основной программы, вот только расставлять по исходникам префиксы BOOTLOAD(поместить в секцию бут) дофига работы, и если пропустить какую функцию, то она в лодырь не попадет.

arm-none-eabi-gcc 4.9, Eclipse Luna.

ЗЫ: LWIP без freertos иначе не лезет все в камень.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Jul 8 2015, 09:48
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Много раз обсуждалось, но лень искать. Поэтому напишу еще раз.

Обязательно отдельные проекты. И обязательно у каждого своя копия lwip или любой другой библиотеки. Потому что если вдруг в этой библиотеке найдется ошибка, с которой можно смириться в загрузчике, но которая критична для приложения - вам придется добавлять в приложение исправленную библиотеку, попутно выкусывая ссылки на библиотеку в загрузчике. Так зачем делать двойную работу? Да и не обязательно ошибка найдется - может авторы библиотеки оптимизируют что-то или добавят вкусностей. Поэтому загрузчик отдельно, приложение отдельно.

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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 20:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01424 секунд с 7
ELECTRONIX ©2004-2016