TAran87 0 30 апреля, 2012 Опубликовано 30 апреля, 2012 · Жалоба Всем Форумчаном добрый день. Есть АРМ контроллер LPC2478 и внешняя DRAM 32 мбайт памяти, работаю в среде IAR. Столкнулся с проблемой выделением памяти под данные во внешней RAM стандартными C функциями malloc() и т.п.? Конечно в IARе существует возможность работы только с внешней RAM, но отказываться от внутренней не хочется. Существуют ли возможности совмещать два диапазона адресации (тоесть когда необходимо один диапазон адресного пространство, затем другой)) ?.. За ранее благодарен.. :smile3046: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zöner 0 30 апреля, 2012 Опубликовано 30 апреля, 2012 · Жалоба может проще написать свой менеджер дин.памяти ? вот статейка на эту тему: http://www.ibm.com/developerworks/aix/tuto...ager/index.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 1 мая, 2012 Опубликовано 1 мая, 2012 · Жалоба Столкнулся с проблемой выделением памяти под данные во внешней RAM стандартными C функциями malloc() и т.п.? Конечно в IARе существует возможность работы только с внешней RAM, но отказываться от внутренней не хочется. Существуют ли возможности совмещать два диапазона адресации (тоесть когда необходимо один диапазон адресного пространство, затем другой)) ?.. За ранее благодарен.. :smile3046: Что-то не очень понятно - с какой именно памятью у вас проблемы? В какой именно памяти находится куча можно посмотреть по вашему файлу настройки компоновщика (*.cmd). Ищите там в какую область комппонуется секция ".stack". Естественно она может быть только в одной из областей - или внешней RAM или внутренней RAM. А зачем она вобще нужна эта куча??? Я в своих эмбеддед-проектах всегда обхожусь без неё. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 1 мая, 2012 Опубликовано 1 мая, 2012 · Жалоба Естественно она может быть только в одной из областей - или внешней RAM или внутренней RAM. А если подумать? Выделяем для heap область захватывающую и внутреннюю и внешнюю RAM. Потом последовательно захватываем размер внутренней RAM и размер равный размеру промежутка между внутренней и внешней RAM. Потом освобождаем размер внутренней RAM. (не забываем делать поправки на служебные записи в heap) И все! Универсальный heap готов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 1 мая, 2012 Опубликовано 1 мая, 2012 · Жалоба Выделяем для heap область захватывающую и внутреннюю и внешнюю RAM. Потом последовательно захватываем размер внутренней RAM и размер равный размеру промежутка между внутренней и внешней RAM. Потом освобождаем размер внутренней RAM. (не забываем делать поправки на служебные записи в heap) И все! Универсальный heap готов. Хорошая инструкция, как делать не надо. Ничего, что стандартная библиотека - это все же черный ящик, а "поправки на служебные записи" могут меняться вместе с версией компилятора? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 1 мая, 2012 Опубликовано 1 мая, 2012 · Жалоба а "поправки на служебные записи" могут меняться вместе с версией компилятора? ...а также к примеру - направление распределения памяти - от головы или от хвоста. И ещё чёрт знает чего. Если уж так нужна куча и там и там, то делайте свой менеджер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
borman11 0 1 мая, 2012 Опубликовано 1 мая, 2012 · Жалоба Я использую самописный менеджер памяти. Статей по его реализации в инете полно. К тому же, его можно заточить под тип задач, которые используются в данном проекте. Можно гибко сконфигурировать используемую память. Можно добавить модуль статистики использования памяти: максимальное/текущее использование памяти, фрагментация, ... Это очень удобно при отладке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 2 мая, 2012 Опубликовано 2 мая, 2012 · Жалоба По-моему: для устройств, работающих годами не выключаясь и не перегружаясь, кучу, в обычном понимании слова (хоть самописную хоть стандартную) лучше не использовать. Из-за фрагментации. Ну разве что в очень простых программах. Если нужно динамическое выделение памяти, то лучше использовать "кучу" на основе блоков фиксированного размера. При необходимости можно огранизовать несколько таких куч с разными размерами блоков. Это позволит избежать фрагментации. Но конечно не спасёт от утечек памяти, вследствие багов в ПО. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться