Постановка задачи: В микроконтроллере AVR необходимо иметь две части кода, фиксированную, которая всегда есть и не меняется (часто), и переходную, то есть (не очень) часто заменяемую или доп. Задача состоит в том, чтобы дать временному коду возможность вызывать функции и обращаться к глобальным переменным фиксированного — и наоборот.
Совершенно очевидно, что должны быть специальные методы для фиксированного кода для доступа к временному коду - например, вычисление указателей функций в ОЗУ и использование только их для вызова процедур временного кода.
Для вызова в обратном направлении я думал о связывании временного кода с существующим файлом .elf фиксированного кода.
Я использую набор инструментов avr-gcc (как в Ubuntu 20.20), gcc версии 5.4.0.
Что я уже пробовал:
добавление '-shared' в качестве аргумента ссылки при построении фиксированного кода - похоже, не поддерживается для AVR (компоновщик сообщает об ошибке).
добавление вместо этого '-Wl,--export-dynamic' в качестве аргумента ссылки - кажется, что он игнорируется, в эльфе не появляется раздел .dynsym.
В исправленном коде elf все еще есть раздел .symtab - можно ли его как-то использовать для ссылки на него?
Примечание: мое разделение на «фиксированный» и «переходный» код не имеет ничего общего с загрузочной областью какого-либо микроконтроллера AVR, загрузка — это то, что меня здесь не волнует.
Примечание 2. Вопрос очень похож на этот, но дает четкое объяснение необходимости.