Как я могу получить доступ к внешней памяти как к куче

Я работаю над встроенным проектом с компилятором Keil MDK-ARM. Я пытаюсь получить доступ к внешней памяти как к куче, но когда я загружаю свою программу в свой micro (micro - это lpc1788), после завершения загрузки происходит сбой (без запуска основной функции) в файле startup.c, хотя я могу получить доступ к внешней памяти (перед увеличением части кучи).

А теперь может кто-нибудь предоставить небольшой пример проекта, как настроить uVision, используя внешнюю оперативную память как кучу? Я хочу настроить uVision для выполнения программы во внутренней FLASH, используя внутреннюю и внешнюю RAM для STACK и HEAP.


person aria nikan    schedule 26.03.2014    source источник


Ответы (1)


Сначала укажите диапазон внешнего ОЗУ для RAM1 (например) в диалоговом окне настроек проекта Target и убедитесь, что все остальные настройки подходят для вашего проекта.

Затем на вкладке настроек Linker снимите флажок «Использовать макет памяти из целевого диалогового окна». Это позволит вам вручную отредактировать файл разброса, который изначально будет отражать макет, определенный в настройках Target.

Отредактируйте файл разброса, чтобы создать раздел во внешнем ОЗУ (например):

  RW_RAM1 0x60000000 UNINIT 0x00040000  {  ; RW data
    *(HEAP)  ; external SRAM
  }

Фактические адреса могут отличаться с вашей стороны. Если вы хотите использовать всю внешнюю оперативную память для кучи, которой достаточно, если вы хотите разрешить компоновщику размещать другие данные в этом пространстве, тогда:

  RW_RAM1 0x60000000 UNINIT 0x00040000  {  ; RW data
    *(HEAP)  ; external SRAM
    .ANY (+RW +ZI)
  }

Проверьте файл карты для раздела HEAP, чтобы убедиться, что пространство было выделено должным образом.

При необходимости вы можете точно так же переместить стек. Но имейте в виду, что доступ к внешней памяти может быть медленнее, чем к внутренней, поэтому это может повлиять на производительность.

Все это, конечно, предполагает, что вы правильно инициализировали внешний контроллер ОЗУ, чтобы он соответствовал внешнему устройству ОЗУ - это должно быть сделано в system_lpc1788.c (или в файле с аналогичным названием для вашего кода запуска - мой опыт работы с STM32, поэтому я не незнаю, возможно system_lpc17xx.c)

person Clifford    schedule 27.03.2014
comment
@aria nikan: Я упростил свое решение. Вам больше не нужно изменять файл запуска. - person Clifford; 19.05.2014