Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

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

Пт авг 09, 2019 15:33:12

Хочу разместить внешнюю 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)
  }
}


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

Вс авг 18, 2019 16:15:41

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