Как назначить адрес внешним символам из другой библиотеки, не включая его в вывод ld? - PullRequest
0 голосов
/ 22 января 2020

Здесь контекст:

Я разрабатываю какую-то микро ОС для Arduino (SAMD21 MCU). Я бы хотел, чтобы загрузчик загружал ОС (простая часть, официальная работает, а ОС связана со скриптом " with-bootloader .ld"). Затем, чтобы загрузить приложение из ОС аналогичным образом, загрузчик загружает ОС. (легко для части ОС)

При этом ОС не нужно будет перепрограммировать, и изменится только приложение.

Здесь вопрос:

Поскольку ОС будет включать большую часть кода Arduino, возможно ли связать приложение с ОС, не включая ОС в двоичном виде? Я имею в виду на этапе связывания приложения заменить любые ссылки на символы из ОС на их действительные значения без повторного включения кода ОС? Что бы вы добавили в скрипт компоновщика?

Цель состоит в том, чтобы просто перепрограммировать код приложения по заранее заданному адресу, не касаясь ОС. (остановка перепрограммирования будет выполняться из кода ОС, самопрограммируясь в mcu, как ванильный загрузчик)

1 Ответ

2 голосов
/ 22 января 2020

У вас есть, по крайней мере, эти опции, которые все видели раньше:

  1. Обеспечивает фиксированный интерфейс для всех функций ОС. Это может быть вектор или любой другой запоминающийся адрес. Каждый вызов использует номер функции в качестве индекса.

    Определите адрес этой точки входа в сценарии компоновщика вашего приложения.

    Объявите все функции ОС как вызовы этой точки входа с соответствующим номером функции в заголовочном файле.

    Аналогичная альтернатива: Задайте эту единственную функцию об адресе индексированной функции ОС.

  2. Предоставьте таблицу переходов в все функции ОС. Поместите его по фиксированному адресу.

    Определите адреса этих переходов в скрипте компоновщика вашего приложения.

    Объявите все функции ОС в заголовочном файле.

  3. Напишите скрипт, который извлекает адреса всех функций ОС из файла карты ОС.

    Проведите некоторое исследование о том, как включить эти адреса в скрипт компоновщика приложения. Расширьте свой сценарий, чтобы обеспечить правильный синтаксис. Вы даже можете использовать сценарий для создания сценария компоновщика приложения.

    Объявите все функции ОС в файле заголовка.

Ссылки в источниках приложения будут разрешены определения в скрипте компоновщика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...