Девайс на STM32F107. Основная программа использует LWIP, с этим рабобрался. Теперь стоит задача прошивать девайс по сети, и вот тут возникает проблема, как-то расточительно иметь во флеше 2 копии lwip. Но если по другому нельзя, как объяснить компилятору что исходники из вот этого каталога для булодыря, а вот из этого, точно такие же, с теми же названиями - основная программа.
Можно сделать отдельно 2 проги бут и основная, но уже есть функции вызываемые оновной программой в буте.
Идеальный вариант LWIP в бутлодыре и делать вызов функций из основной программы, вот только расставлять по исходникам префиксы BOOTLOAD(поместить в секцию бут) дофига работы, и если пропустить какую функцию, то она в лодырь не попадет.
arm-none-eabi-gcc 4.9, Eclipse Luna.
ЗЫ: LWIP без freertos иначе не лезет все в камень.
Сергей Борщ
Jul 8 2015, 09:48
Много раз обсуждалось, но лень искать. Поэтому напишу еще раз.
Обязательно отдельные проекты. И обязательно у каждого своя копия lwip или любой другой библиотеки. Потому что если вдруг в этой библиотеке найдется ошибка, с которой можно смириться в загрузчике, но которая критична для приложения - вам придется добавлять в приложение исправленную библиотеку, попутно выкусывая ссылки на библиотеку в загрузчике. Так зачем делать двойную работу? Да и не обязательно ошибка найдется - может авторы библиотеки оптимизируют что-то или добавят вкусностей. Поэтому загрузчик отдельно, приложение отдельно.
По совместно используемым функциям: самый правильный (на мой взгляд) подход - адреса точек входа в эти функции собираются в таблицу (структуру), эта структура прибивается гвоздями в определенное место загрузчика и все обращения из приложения идут только через эту структуру. Фактически, заголовочный файл с описанием этой структуры - единственный общий файл для приложения и загрузчика. Это гарантирует, что функции будут вызываться даже если расположение тел этих функций в памяти загрузчика изменится. А измениться оно может по многим причинам - или найдете ошибку, или добавите функциональность в загрузчик, или просто перейдете на новую версию компилятора. Прибивать эту структуру лучше в такое место, откуда не появится необходимости ее сдвигать и где она может расти по мере наращивания функциональности. Подходящее место - сразу за таблицей векторов. Класть ее в конец области загрузчика - не самое удачное решение, потому что потом будет сложно ее наращивать, сохраняя совместимость с предыдущими версиями загрузчика. В этой же структуре удобно хранить номер версии железа и номер версии загрузчика.