В настоящее время я работаю над большим собственным проектом на микроконтроллере STM32F7 cortex-m7 на C ++ с использованием GCC. Мне нужно хранить большой массив во внешней SDRAM (16 МБ), содержащий векторы структур нот (по 12 байт). У меня уже есть рабочий FMC и созданный пользовательский регион RAM
/* 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 ++, пулах памяти, но не понимаю, где происходит выделение в векторном коде и как мне его заменить ... Мне "просто" нужна такая же система выделения, как обычно но в другой части моей памяти именно для этого типа.
Кажется возможным иметь несколько куч. Где находится связь между scatter-файлом и эффективным распределением памяти?
Заранее спасибо,
Бен
std::allocator
.how i should replace it
См. Второй аргумент шаблонаstd::vector
. - person eerorika   schedule 06.03.2019