У меня встроенная система с внутренним и внешним fla sh. Контроллер MSP430F22x2, внешний флаг sh подключен через SPI. Я могу загрузить данные из внешнего fla sh, но внешний fla sh не отображен в память. Поскольку внутренний флаг sh недостаточно большой, я хочу добавить функции во внешний флаг sh. Таким образом, внешний флаг sh должен быть скопирован во внутренний флаг sh, чтобы можно было выполнять функции. По сути, это похоже на пейджинг бедняги.
Для всего этого у меня есть функция, которая загружает правую часть fla sh и затем вызывает функцию. Он управляет внутренним стеком страниц, отделенным от «реального» стека. Если я хочу вызвать функцию на другой странице, я должен перейти к этой функции. Затем функция вызывает функцию на загруженной странице. Когда функция возвращается, выполнение продолжается в функции управления (потому что она была вызвана оттуда), которая затем загружает нужную страницу и возвращается назад.
Проблема в том, что все функции находятся в одном месте в памяти , так как они скопированы. Но данные в оперативной памяти не могут перекрываться. Мое текущее решение состоит в том, чтобы использовать отдельные сценарии компоновщика для каждой части внешнего кода и устанавливать адреса разделов оперативной памяти вручную. Это, конечно, отнимает много времени, и все должно быть изменено, если деталь нуждается в большем количестве оперативной памяти и т. Д. c.
Отдельные сценарии компоновщика выглядят так:
ENTRY(part)
SECTIONS
{
.data 0x2A4 :
{
. = ALIGN(2);
*(.data .rodata*)
}
.text 0x4000 :
{
*(.text)
}
}
Ничего особенного. Все настроено на указанные c адреса, переполнение не проверяется. Чтобы иметь возможность вызывать функции, я экспортирую таблицу символов и добавляю их в основной скрипт компоновщика. Все это автоматизировано с использованием пакетных сценариев.
Поэтому мне нужен сценарий компоновщика, который по существу размещает несколько секций .text, перекрывающихся в одном и том же диапазоне адресов, и .data разделы непрерывно.
Я не знаю, есть ли способ сделать это. На самом деле мне поможет любое решение (сценарии компоновщика, пакетные сценарии и т. Д. c.). Единственное, что я не могу изменить, это аппаратное обеспечение.