У меня не было возможности на самом деле настроить и построить автономный проект, как я планирую, чтобы полностью протестировать это, но работает ли добавление NOLOAD
, как указано ниже, работает?
SECTIONS
{
.my_block (NOLOAD) :
{
KEEP(*(.UserDataSector));
} >USER_DATA_FLASH
}
Вот некоторые заметки, которые я сделал в руководстве пользователя v2.32 ld PDF для «NOLOAD»:
Кажется, это то, что вам может понадобиться.
Кроме того, я обычно помещаю спецификатор атрибута после переменной, как показано во многих официальных примерах gcc (например, в разделе "здесь" ), хотя я не уверен, что это строго необходимо (см. официальную документацию по синтаксису здесь ).
т:
static my_type my_array_name[] __attribute__((section(".UserDataSector"))) =
{
// member 1,
// member 2,
// member 3,
// etc
};
Кроме того, ваше форматирование (пробелы, выравнивание, отступы и т. Д.) В вашем вопросе, я должен сказать, не очень хорошее, и в связи с этим, не обращая пристального внимания на детали, я вижу в атрибуте вашего раздела у вас есть дополнительное место в конце: ".UserDataSector "
вместо ".UserDataSector"
, как и должно быть, так что это тоже может быть проблемой.
Также еще несколько заметок:
- Обратите внимание, что вам нужно немного очистить форматирование, отступы и т. Д., Чтобы облегчить чтение кода в вашем вопросе.
- Я не думаю, что
KEEP
здесь необходимо, но это тоже ничего не ранит.
Вы должны изучить и прочитать официальное руководство по GNU Linker Script (LD). Он доступен онлайн в формате html, здесь: https://sourceware.org/binutils/docs/ld/. последняя версия v2.32.
- Тем не менее, я думаю, что гораздо легче учиться в PDF, так что вы можете ввести его, выделить его, выделить его, сразу выполнить поиск по нему и т. Д. Постройте руководство пользователя LD pdf, затем используйте Foxit Читатель (кроссплатформенный и бесплатный) для изучения и разметки руководства.
- Как создать PDF-руководство пользователя Linker Script (LD):
- Скачать исходный код: https://www.gnu.org/software/binutils/
- Пример: получить последнюю версию binutils (в настоящее время binutils-2.32.tar.xz ) здесь: https://ftp.gnu.org/gnu/binutils/
- Извлеките его (например, щелкните правой кнопкой мыши и перейдите к «Извлечь здесь» в Linux Ubuntu).
- перейдите в папку:
cd binutils-2.32
Затем настройте и сделайте:
./configure
make
make pdf
Готово! Вот PDF-файлы сейчас (найдено с find | grep '\.pdf'
):
binutils-2.32/libiberty/libiberty.pdf
binutils-2.32/bfd/doc/bfd.pdf
binutils-2.32/ld/ld.pdf <----- THE MAIN ONE I WANT!
binutils-2.32/gprof/gprof.pdf
binutils-2.32/gas/doc/as.pdf
binutils-2.32/binutils/doc/binutils.pdf
Сохраните и используйте ld.pdf , который теперь является PDF-версией руководства по binutils HTML 2.32, на которое я ссылался выше.
- Возможно, вам придется прочитать файл запуска, чтобы увидеть, делает ли он что-то странное.
Как я уже сказал, я хотел бы полностью проверить этот ответ, прежде чем публиковать его, но сейчас у меня нет шансов. За последние несколько недель я провел много-много часов в сценариях компоновщика, поэтому, думая о некоторых из них, я подумал, что это поможет.
Другие вопросы о скрипте компоновщика, примечание
- Доступ к "значению" переменной сценария компоновщика неопределенное поведение в C?
- Как получить значение переменной, определенной в сценарии компоновщика ld, из C