В последний раз, когда я пытался это сделать, я столкнулся с дорожным блоком: определением количества байтов в функции.Задача состоит в том, чтобы использовать адрес функции, копировать байты в память (при условии, что код скомпилирован как независимый от позиции код, PIC).
Более независимый от платформы метод - это просмотреть документацию вашего компилятора, чтобы узнать, существует ли #pragma
, опция компилятора или ключевое слово, которое позволяет вам указать адрес функции или сегмент для загрузки во время загрузки.
Кроме того, выполните поиск по группам встроенных систем, поскольку это популярный метод: загрузите код, который программирует флэш-память в ОЗУ, выполните функцию в ОЗУ, а затем перезагрузите систему.
Надеюсь, что это поможет.
Редактировать:
Предложение: создать сегмент данных или кода, используя файл на языке ассемблера или инструкции для компоновщика (вскрипт сборки).Поместите свою функцию в отдельный файл кода.Скажите компилятору и компоновщику скомпилировать эту функцию в новый сегмент кода.Могут быть специфичные для компилятора операторы, чтобы получить начальный адрес и размер сегмента.Кроме того, операционная система может загружать сегмент по заданному для вас адресу.
Также посмотрите библиотеки DLL или общие библиотеки, которые можно загрузить во время выполнения, с помощью операционной системы.