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

 
 
 
Reply to this topicStart new topic
> Динамическое выделение памяти во внешней RAM))
Taran87
сообщение Apr 30 2012, 11:10
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 12-05-09
Пользователь №: 48 986



Всем Форумчаном добрый день. Есть АРМ контроллер LPC2478 и внешняя DRAM 32 мбайт памяти, работаю в среде IAR. Столкнулся с проблемой выделением памяти под данные во внешней RAM стандартными C функциями malloc() и т.п.? Конечно в IARе существует возможность работы только с внешней RAM, но отказываться от внутренней не хочется. Существуют ли возможности совмещать два диапазона адресации (тоесть когда необходимо один диапазон адресного пространство, затем другой)) ?.. За ранее благодарен.. smile3046.gif
Go to the top of the page
 
+Quote Post
zöner
сообщение Apr 30 2012, 13:09
Сообщение #2


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

Группа: Участник
Сообщений: 195
Регистрация: 16-02-12
Пользователь №: 70 299



может проще написать свой менеджер дин.памяти ?
вот статейка на эту тему:
http://www.ibm.com/developerworks/aix/tuto...ager/index.html
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 1 2012, 09:13
Сообщение #3


Гуру
******

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



Цитата(Taran87 @ Apr 30 2012, 17:10) *
Столкнулся с проблемой выделением памяти под данные во внешней RAM стандартными C функциями malloc() и т.п.? Конечно в IARе существует возможность работы только с внешней RAM, но отказываться от внутренней не хочется. Существуют ли возможности совмещать два диапазона адресации (тоесть когда необходимо один диапазон адресного пространство, затем другой)) ?.. За ранее благодарен.. smile3046.gif

Что-то не очень понятно - с какой именно памятью у вас проблемы?
В какой именно памяти находится куча можно посмотреть по вашему файлу настройки компоновщика (*.cmd).
Ищите там в какую область комппонуется секция ".stack". Естественно она может быть только в одной из областей - или внешней RAM или внутренней RAM.
А зачем она вобще нужна эта куча??? Я в своих эмбеддед-проектах всегда обхожусь без неё.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение May 1 2012, 12:08
Сообщение #4


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(jcxz @ May 1 2012, 12:13) *
Естественно она может быть только в одной из областей - или внешней RAM или внутренней RAM.


А если подумать? biggrin.gif

Выделяем для heap область захватывающую и внутреннюю и внешнюю RAM. Потом последовательно захватываем размер внутренней RAM и размер равный размеру промежутка между внутренней и внешней RAM.
Потом освобождаем размер внутренней RAM. (не забываем делать поправки на служебные записи в heap)
И все! Универсальный heap готов.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 1 2012, 12:40
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(AlexandrY @ May 1 2012, 16:08) *
Выделяем для heap область захватывающую и внутреннюю и внешнюю RAM. Потом последовательно захватываем размер внутренней RAM и размер равный размеру промежутка между внутренней и внешней RAM.
Потом освобождаем размер внутренней RAM. (не забываем делать поправки на служебные записи в heap)
И все! Универсальный heap готов.

Хорошая инструкция, как делать не надо. Ничего, что стандартная библиотека - это все же черный ящик, а "поправки на служебные записи" могут меняться вместе с версией компилятора?
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 1 2012, 13:17
Сообщение #6


Гуру
******

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



Цитата(aaarrr @ May 1 2012, 18:40) *
а "поправки на служебные записи" могут меняться вместе с версией компилятора?

...а также к примеру - направление распределения памяти - от головы или от хвоста. И ещё чёрт знает чего.
Если уж так нужна куча и там и там, то делайте свой менеджер.
Go to the top of the page
 
+Quote Post
borman11
сообщение May 1 2012, 17:16
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 16-03-06
Из: Москва
Пользователь №: 15 298



Я использую самописный менеджер памяти. Статей по его реализации в инете полно. К тому же, его можно заточить под тип задач, которые используются в данном проекте. Можно гибко сконфигурировать используемую память. Можно добавить модуль статистики использования памяти: максимальное/текущее использование памяти, фрагментация, ... Это очень удобно при отладке.
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 2 2012, 02:59
Сообщение #8


Гуру
******

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



По-моему: для устройств, работающих годами не выключаясь и не перегружаясь, кучу, в обычном понимании слова (хоть самописную хоть стандартную) лучше не использовать.
Из-за фрагментации.
Ну разве что в очень простых программах.
Если нужно динамическое выделение памяти, то лучше использовать "кучу" на основе блоков фиксированного размера.
При необходимости можно огранизовать несколько таких куч с разными размерами блоков.
Это позволит избежать фрагментации. Но конечно не спасёт от утечек памяти, вследствие багов в ПО.
Go to the top of the page
 
+Quote Post

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

 


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


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