В настоящее время я работаю над добавлением раздела .ccmbss в свой скрипт компоновщика, где я пытаюсь разместить некоторые неинициализированные переменные/структуры. Этот раздел отличается от обычного раздела .bss, ключевое отличие которого заключается в том, что .ccmbss находится в ОЗУ, связанном с ядром, а .bss — в обычном ОЗУ.
Когда я пытаюсь поместить большую неинициализированную структуру (~ 32 КБ) в раздел .ccmbss, используя обозначение C __attribute__((section(.ccmbss)))
, я замечаю, что она получает выделенный раздел флэш-памяти того же размера. Однако, когда я явно не устанавливаю его для перемещения в раздел .ccmbss, он размещается в разделе .bss (как и ожидалось) и не занимает места во флэш-памяти.
Любые идеи относительно того, как гарантировать, что раздел ccmbss не получит связанную флэш-память?
Вот ключевая часть файла компоновщика, над которым я работаю:
.ccm : {
. = ALIGN(4);
_siccmram = .;
*(.ccm)
_eiccmram = .;
. = ALIGN(4);
} >ccm AT >app
_ccm_loadaddr = LOADADDR(.ccm);
.ccmbss : {
. = ALIGN(4);
*(.ccmbss)
*(.ccmbss*)
. = ALIGN(4);
_eccmbss = .;
_eccmram = .;
} >ccm
.data : {
_data = .;
*(.data*)
. = ALIGN(4);
_edata = .;
} >ram AT >app
_data_loadaddr = LOADADDR(.data);
.bss : {
*(.bss*)
*(COMMON)
. = ALIGN(4);
_ebss = .;
} >ram
@nobits
, как в stackoverflow.com/questions/6252812/ . Похоже, GCC__attribute__((section(..)))
добавляетprogbits
по умолчанию - person Eugene Sh.   schedule 08.07.2021#
также нужен для добавления комментария в вывод сборки, как описано в верхнем ответе на вопрос, на который вы ссылаетесь. - person Ian Abbott   schedule 08.07.2021