Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: GCC, aligned и пустое место
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
Flexz
Понадобилось сделать выравнивание массива по большому числу (ремап таблицы прерываний в рам в CortexM3)
Код
static InterruptHandler __attribute__((aligned(0x400))) isrTable[isrCount];

В map наблюдаем:
Код
*fill*         0x20002b34       0xcc 00
.bss._ZL8isrTable
                0x20002c00      0x400 nvic.o

При этом поле *fill* может гулять от малых значений до цифры близкой к 0x400, в зависимости от ручной перетасовки кода. Когда цифра маленькая еще туда-сюда, но когда она подбирается к 0x400 - это ж почти килобайт оперативки в пустую!
Можно ли как-то заставить компилятор использовать область *fill* с пользой, причем только в данном месте?
ReAl
Поместить таблицу в отдельную секцию и линкерным скриптом рамзестить эту секцию в начале ОЗУ ?
Flexz
Действительно, дешево и сердито.
Небольшим сюрпризом стал бинарник размером в 400метров, вместо 60кб biggrin.gif Пришлось вспомнить про --remove-section=
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.