реклама на сайте
подробности

 
 
> Распределение ОЗУ памяти для ARM Cortex M4
masterok
сообщение Jun 3 2016, 08:43
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 29-11-13
Пользователь №: 79 419



Добрый день уважаемые форумчане.

Уже не первый день мучаюсь с вопросом о том как можно грамотно распределить память для своего проекта.

Имеется плата с:
- МК NXP LPC4357 - 32 бит, ядро Cortex-M4, сопроцессор Cortex-M0, Flash 1 МБ, 136 кБ RAM, 16 кБ EEPROM, 64 кБ ROM, 128 байт OTP;
- 16 МБ NOR Flash;
- 4 МБ Quad-SPI Flash;
- 16 МБ SDRAM;
- 16 кБ I2C EEPROM.

В проекте собираюсь задействовать FreeRTOS, LwIP, modbusTCP, emWin, работу с microSD и еще несколько специфичных для устройства задач.

Буду очень признателен услышать ваше мнение о том что и куда распределили бы вы.

Свои же рассуждения приведу ниже.

Первое с чего решил начать - это выбор памяти для записи самой программы. По своему опыту работы с ARM7 всегда писал во встроенную в МК флэш память и был счастлив. А здесь как я понимаю вариантов уже больше - имеем Flash 1 МБ и некую 4 МБ Quad-SPI Flash, также предназначенную для хранения программы. Так как на данный момент программа не большая, то решил остановиться на первом варианте. Но если появится необходимость в памяти большего размера, то для меня не совсем понятно как надо настроить проект, чтобы контроллер знал, что прошивка лежит во внешней 4 МБ Quad-SPI Flash (использую Keil)..

Дальше взялся за конфигурацию startup - требуется определить размер стека и кучи. Но здесь все будет завязано на то как настрою FreeRTOS. Во FreeRTOS существует 4 варианта выделения памяти heap1.c, heap2.c, heap3.c, heap4.c. Решил что буду пользоваться heap3.c. Соответственно размер кучи в этом случае назначается в startup.
Но вопрос в том что какого размера должна быть эта куча и где размещена для того что бы FreeRTOS запустила работу со стеком LwIP, modbusTCP и в дальнейшем заработала с emWin.
При этом 136 Кб встроенной памяти ОЗУ разделены на части и разбросаны по всему адресному пространству МК. Так же складывается ощущение, что за счет только этих 136 Кб решить задачу не удастся, может ошибаюсь. Но напрашивается вопрос о том как с пользой использовать 16 Мб внешней памяти и что для этого требуется сделать..

Сообщение отредактировал masterok - Jun 3 2016, 08:48
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
IgorKossak
сообщение Jun 4 2016, 08:47
Сообщение #2


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Исполнять программу из SPI Flash не очень хорошо, хоть и можно.
Она скорее предназначена для загрузчика. Но я храню в ней ещё и логи. Обе эти операции не требуют больших скоростей.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 4 2016, 13:44
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(IgorKossak @ Jun 4 2016, 14:47) *
Исполнять программу из SPI Flash не очень хорошо, хоть и можно.
Она скорее предназначена для загрузчика. Но я храню в ней ещё и логи. Обе эти операции не требуют больших скоростей.

Никто не спорит, что конечно код оттуда считывается медленнее, но не нужно там располагать код требующий большого быстродействия.
В безфлешевых МК быстрый код нужно копировать в ОЗУ на старте, а тот где не нужно большой скорости (а такого кода имхо большая часть обычно) - можно и в SPIFI.
К тому же никто не отменял кеш.
У ТС конечно смысла в этом нет - у него есть встроенная FLASH. Но если например будут нужны какие-то массивы данных большого размера (картинки и т.п.), то их можно хранить в этой SPIFI памяти - доступ к ней удобнее чем к просто SPI-флешке.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 22:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.02208 секунд с 7
ELECTRONIX ©2004-2016