ОК, у меня проблема, я не знаю точно правильных терминов, чтобы найти то, что я ищу в Google.Поэтому я надеюсь, что кто-то здесь может мне помочь.
При разработке программ для реального времени на встроенных устройствах вам, возможно, придется повторяться несколько сотен или тысяч раз, пока вы не получите желаемый результат.Например, при использовании устройств ARM внутренняя вспышка изнашивается довольно быстро.Поэтому, как правило, вы разрабатываете свои программы для размещения в оперативной памяти устройства, и все в порядке.Это делается с помощью функциональности GCC для разделения кода на различные секции.
К сожалению, объем оперативной памяти большинства устройств намного меньше, чем у флэш-памяти.Таким образом, в какой-то момент ваша программа становится слишком большой, чтобы вместить в нее все переменные и т. Д. (Вы выбираете размер устройства таким образом, чтобы допустить, что он будет помещаться во весь код позже).
Классические общие объекты не работают, поскольку в моей среде нет ничего похожего на динамический компоновщик.Там нет ни ОС, ни чего-либо подобного.
Моя идея заключалась в следующем: Для контроллера нет проблем с выполнением кода как из ОЗУ, так и из флэш-памяти.При компиляции с правильными атрибутами для функций для компилятора также не составляет большой проблемы поместить часть программы в ОЗУ, а часть во флэш-память.Когда некоторые функции работают успешно, я создаю библиотеку и помещаю ее во флэш-память.Основная разработка выполняется в «изменчивой» части разработки в оперативной памяти.Таким образом, флэш-память сохраняется.
Проблема в следующем: мне нужно убедиться, что библиотека всегда связана с одним и тем же местом, пока я не перепрошиваю.Таким образом, отдельная функция всегда должна быть на одном и том же адресе во флэш-памяти для каждого цикла компиляции.Когда что-то во флэш-памяти отсутствует, оно должно быть помещено в ОЗУ или возникла ошибка с подкладкой.
Я думал о том, чтобы собрать реальную библиотеку и связать ее.Здесь я немного растерялся.Мне нужно сказать GCC / LD связать предварительно связанный файл (и создать такой предварительно связанный файл).
Должна быть возможность собрать все объекты библиотеки и связать их вместе во флэш-памяти.Затем адреса могут быть извлечены, и основная программа (для использования в ОЗУ) может связываться с ней.Но: Как сделать эти шаги?
В интернете есть термин prelink
, а также соответствующая программа для linux.Это предназначено для ускорения времени загрузки.Я не знаю, может ли эта программа помочь мне как побочный эффект.Я сомневаюсь в этом, но я не понимаю внутренностей его работы.
У вас есть хорошая идея, как достичь цели?