2015-01-29 3 views
1

У меня есть стек библиотеки, который не изменится, и прошивку, которая будет использовать только этот стек. Прошивка сильно изменится по пути. Я не хочу, чтобы каждый раз выпускал весь образ (включая стек библиотеки) из-за нехватки памяти и ресурсов (это встроенное приложение, а не рабочий стол или сервер). Я просто хочу выпустить образ приложения и автоматически использовать образ библиотеки. Я не уверен, как это сделать. Я знаю в Windows, например, это обрабатывается dll. Но это встроенное приложение и не имеет ОС. Бинарные изображения загружаются в память, и процессор собирается его выполнить. Любой опыт/предложения?Пакет исправлений для встроенных приложений

Toolchain: IAR 8051

+0

Я предполагаю, что это связано с тем, что компилятор знает, где найти ссылки (места памяти) функций библиотеки, которые приложение будет вызывать. Считаете ли вы, что это правильное направление? – Arash

+1

Почему, по вашему мнению, полное изображение слишком велико, чтобы выпустить его каждый раз? Это стандартная практика для MCU, которые выполняют из флеш-памяти, чтобы содержать небольшой загрузчик, который обновляет и выбирает один или несколько возможных изображений приложений, но то, что вы описываете, НЕ является особенно распространенным, кроме случаев, когда речь идет о проприетарной прошивке «blobs» от поставщиков чипов. –

+0

Просто проверил вашу историю сообщений .... Это все еще для инструмента TMS470 w/IAR? Если это так, вы можете указать это в своем вопросе. Любое решение вашего исходного вопроса будет очень зависимым от инструментальной цепочки (и, возможно, архитектуры). –

ответ

4

Это зависит совсем немного от вашего инструмента цепи. Вот возможный подход с высоким разрешением.

Скомпилируйте вашу библиотеку в исполняемое изображение, установив свой компоновщик, чтобы использовать определенную часть пространства вашей флэш-памяти. Вероятно, вам понадобится функция подделки/заглушки для компоновщика, чтобы быть счастливой.

После того, как это будет сделано, найдите все адреса символов, используемых библиотекой, и проинструктируйте свой компоновщик относительно этих мест символа при создании вашей обычной программы и не укажите, чтобы процесс ссылки использовал объекты промежуточной библиотеки, когда сшивание. Также проинструктируйте компоновщика разместить код в секции флеш-памяти, которая может быть обновлена.

У вас будет изображение для библиотеки и возможность создавать новые версии основного образа программы, используя в библиотеке.

Возможно, это может быть сценарий, если ваш выходной формат компоновщика является незастроенным эльфом (перед преобразованием в двоичный файл для записи на флеш), и если ваш компоновщик может принять простой текстовый файл для инструкций (оба являются истинными, если вы используют gnu toolchains). Я бы порекомендовал его сценарий для вашего здравомыслия, если в библиотеке не было мало видимых в нем функций и переменных.

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

Смежные вопросы