Как разместить внешнюю sdram в общее адресное пространство.

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
meykj
Родился
Сообщения: 4
Зарегистрирован: Вт дек 26, 2017 15:43:12

Как разместить внешнюю sdram в общее адресное пространство.

Сообщение meykj »

Хочу разместить внешнюю sdram в общее адресное пространство, чтобы в него автоматически могли размещаться переменные или еще лучше, если бы я мог объявлять массивы в заданной секции и чтобы там ничего неявно не размещалось. То есть на данный момент я нормально обращаюсь к памяти напрямую, а если конкретно создаю указатель, присваивая ему адрес вручную, размещаю там массив пикселей и вывожу его через LTDC все нормально, но хорошо бы, чтобы адрес массива не приходилось бы контролировать и массив размещался автоматически, но в заданном диапазоне адресов. На данный момент, перенес инит внешней sdram и инит системы тактирования в system_init. Думал это поможет, но все равно возникает такая проблема при запуске дебага пишет cannot access memory. Это происходит, если при диалоге я указываю линкеру о существовании памяти (ставлю галочку на RAM1, указываю диапазон адресов, ставлю no init). В скаттер файле пишется:

Код: Выделить всё

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x08000000 0x00200000  {    ; load region size_region
  ER_IROM1 0x08000000 0x00200000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
   .ANY (+XO)
  }
  RW_RAM1 0xD0000000 UNINIT 0xD07FFFFF  {  ; RW data
   .ANY (+RW +ZI)
  }
  RW_IRAM1 0x20000000 0x00030000  {
   .ANY (+RW +ZI)
  }
}


Реклама
Trully
Встал на лапы
Сообщения: 118
Зарегистрирован: Вс авг 18, 2019 13:22:01

Re: Как разместить внешнюю sdram в общее адресное пространст

Сообщение Trully »

Для автоматического размещения нужно создать секцию для SDRAM с именем sdram и при объявлении переменной указывать эту секцию в атрибутах: uint8_t array[5000] __attribute__((section("sdram")))
to be or not to be = -1
Реклама
Ответить

Вернуться в «ARM»