В настоящее время я работаю над большим проектом на микроконтроллере cortex-m7 STM32F7 в C ++ с использованием GCC. Мне нужно хранить широкий массив во внешней SDRAM (16 МБ), содержащей векторы структур нот (по 12 байт каждый). У меня уже есть работающий FMC и пользовательский регион оперативной памяти, созданный
/* Specify the memory areas */
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 512K
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1024K
SDRAM (xrw) : ORIGIN = 0xC0000000, LENGTH = 16M
}
/* Define output sections */
SECTIONS
{
/* Section créée pour l'allocation dans la SDRAM externe*/
.fmc :
{
. = ALIGN(8);
*(.fmc)
*(.fmc*)
. = ALIGN(8);
} >SDRAM
мой массив объявлен так:
std::vector<SequencerNoteEvent> NotesVectorArray[kMaxPpqn] __attribute__((section(".fmc")));
Пока все в порядке. Я создал массив векторов в моей внешней памяти. Как я могу продолжить, чтобы сделать мое создание вектора элементов
NotesVectorArray[position].push_back(note);
происходит в том же внешнем ОЗУ динамически? В настоящее время я могу только объявить статические данные, используя __attribute__(section)
Я много чего прочитал о C ++ распределителях, пулах памяти, но я не понимаю, где происходит распределение в векторном коде и как я должен его заменить ... Мне просто нужна одна и та же система выделения чем обычно, но в другой части моей памяти для этого точного типа.
Кажется возможным иметь несколько куч. Где находится связь между разбросанным файлом и эффективным распределением памяти?
Заранее спасибо,
Ben