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

 
 
> AT90SAM9263+NAND+SDRAM, как грамотно распределить код и данные в памяти
Serg_el
сообщение Dec 14 2010, 16:33
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 302
Регистрация: 13-12-06
Из: Togliatti
Пользователь №: 23 473



Устройство построено на базе AT90SAM9263, есть NAND и SDRAM. ОС не используется. Программа полностью помещается во внутреннее ОЗУ, в NAND хранится сама исполняемая программа, которая с помощью загрузчика из ROM копируется при старте в ОЗУ. Также в NAND находятся различные мультимедийные файлы, которые копируются из NAND в SDRAM для дальнейшей обработки. Прошивка заливается в проц одним файлом по 0 адресу NAND с помощью той же SAMBA. Мультимедия копируется в NAND уже в дальнейшем через USB. Собственно вопрос состоит в следующем: исполняемый код содержит некоторые константные данные, которые значительно увеличивают код. Хочется эти данные разместить в NAND так, чтобы при старте они не копировались в ОЗУ. Я так понимаю, что должно быть минимум 2 файла для заливки в NAND - код и константы. Константы сейчас в виде массивов. Как это сделать? Как подготовить bin файл без исполняемого кода средствами IAR?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 8)
sergeeff
сообщение Dec 14 2010, 17:58
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



У вас SDRAM'a небось 32 Мб или около того? Чего тогда ломать голову? Копируйте всю программу в SDRAM и не парьтесь.

Не забудьте кеши включить и настроить - и будет вам счастье!
Go to the top of the page
 
+Quote Post
Serg_el
сообщение Dec 15 2010, 04:25
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 302
Регистрация: 13-12-06
Из: Togliatti
Пользователь №: 23 473



Цитата(sergeeff @ Dec 14 2010, 23:58) *
У вас SDRAM'a небось 32 Мб или около того? Чего тогда ломать голову? Копируйте всю программу в SDRAM и не парьтесь.

Не забудьте кеши включить и настроить - и будет вам счастье!


Это понятно, но я так думаю, что из ОЗУ все будет работать быстрее, чем из SDRAM с включенными кешами. А если доступ из TCM, то и на процессорной скорости...
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Dec 15 2010, 04:43
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Есть стандартные benchmark тесты. Запустите из sdram и из iram. Сравните.
Go to the top of the page
 
+Quote Post
Arischenko Ivan
сообщение Dec 15 2010, 04:45
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 112
Регистрация: 29-10-06
Пользователь №: 21 768



Цитата(Serg_el @ Dec 15 2010, 10:25) *
Это понятно, но я так думаю, что из ОЗУ все будет работать быстрее, чем из SDRAM с включенными кешами. А если доступ из TCM, то и на процессорной скорости...


Скорость выполнения программ из различной памяти можно достаточно точно измерить, запустив одни и тот же тест из разной памяти. Я бы поставил на то что выполнение программы из SDRAM и SRAM при условии включения MMU, ICache, DCache будет одинаковым по времени.
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Dec 15 2010, 05:13
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(Arischenko Ivan @ Dec 15 2010, 10:45) *
Я бы поставил на то что выполнение программы из SDRAM и SRAM при условии включения MMU, ICache, DCache будет одинаковым по времени.


В реальности это не так. Критичные к скорости данные и код лучше всё же хранить в SRAM. Возможно это связано с несвоевременной подкачкой данных в ICache, DCache.


Цитата(Serg_el @ Dec 14 2010, 22:33) *
Я так понимаю, что должно быть минимум 2 файла для заливки в NAND - код и константы. Константы сейчас в виде массивов. Как это сделать? Как подготовить bin файл без исполняемого кода средствами IAR?


Иаром не пользуюсь. Проще наверно сделать один бинарный массив и залить его самбой по фиксированному адресу в NAND.

Что касаемо иара - очевидно ваши массивы должны находится в отдельной секции, распологающейся в адресном пространстве NAND и имеющей соответствующие атрибуты (RO?). Возможно массивы должны быть static.
Go to the top of the page
 
+Quote Post
Serg_el
сообщение Dec 15 2010, 05:16
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 302
Регистрация: 13-12-06
Из: Togliatti
Пользователь №: 23 473



Есть одно маленькое НО, у меня SDRAM - это видео буфер (800x600, 24 бита). Как понимаете занятость шины достаточно большая, если учесть, что скорость шины 80МГц, то держать код в SDRAM мне кажется не очень удачной идеей.
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Dec 15 2010, 05:34
Сообщение #8


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Цитата
В реальности это не так. Критичные к скорости данные и код лучше всё же хранить в SRAM. Возможно это связано с несвоевременной подкачкой данных в ICache, DCache.


У меня правда SAM9XE, но с кешами и MMU, уже разницы практически нет.
Go to the top of the page
 
+Quote Post
Serg_el
сообщение Dec 16 2010, 17:01
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 302
Регистрация: 13-12-06
Из: Togliatti
Пользователь №: 23 473



Может кто подскажет, почему загрузчик в ROM правильно копирует код из NAND в SRAM пока его размер не превышает 64k?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 07:49
Рейтинг@Mail.ru


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