Динамическое векторное распределение во внешнем ОЗУ - PullRequest
2 голосов
/ 06 марта 2019

В настоящее время я работаю над большим проектом на микроконтроллере 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

...