Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Можно ли узнать максимальный размер кучи?
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Koluchiy
Здравствуйте, уважаемые гуру.

Есть такая конфигурация: NIOS+uC/OSII+Niche stack.
На всем этом работает некоторое количество задач.
Нужно понять, сколько всему этому надо динамической памяти (Heap).
Соответственно, вопрос - как это узнать?
Нет ли какого счетчика в ходе отладки, который бы показывал максимальный размер выделенной памяти?
Тогда можно было бы в режиме отладки погонять задачи в максимальных режимах и получить минимально-достаточный размер памяти.

В общем, подскажите, куда копать.

Всем заранее спасибо за ответы.
Corner
Цитата(Koluchiy @ Dec 10 2013, 15:03) *
Здравствуйте, уважаемые гуру.

Есть такая конфигурация: NIOS+uC/OSII+Niche stack.
На всем этом работает некоторое количество задач.
Нужно понять, сколько всему этому надо динамической памяти (Heap).
Соответственно, вопрос - как это узнать?
Нет ли какого счетчика в ходе отладки, который бы показывал максимальный размер выделенной памяти?
Тогда можно было бы в режиме отладки погонять задачи в максимальных режимах и получить минимально-достаточный размер памяти.

В общем, подскажите, куда копать.

Всем заранее спасибо за ответы.

Обычно heapsize это параметр определяемый на этапе сборки кода если код просто исполняемый. А вот если у вас ОС, то это уже надо рыть в настройках ядра.
Golikov A.
странно это как - то

берем тср стэк к примеру, он под все сообщения выделяет динамически память, а после отправки ее грохает. Если обмен плотный, сообщений много, то и памяти много пойдет, а если обмен вялый, то ее мало пойдет. И как такое на этапе сборки определить?

Правильнее тут писать программу с правильной реакцией на окончание кучу, ИМХО...
WitFed
Обычно считается, что выделять память после стартового инита приложения -- неправильно, ибо менеджер кучи обладает непредсказуемым временем ответа в общем случае из-за фрагментации, хотя возможны хитрые варианты.
Но если архитектура памяти стека не настраиваема сразу на старте, можно предложить универсальную динамическую схему экспериментального этапа -- периодически запускать нить с максимальным приоритетом, которая будет выгребать у ОС всю возможную память дихотомией размеров и сразу же возвращать, выведя нужные данные в лог.
Для конкретной ОС можно в map-файле подглядеть не свои глобальные переменные -- вполне вероятно, что учёт уже ведётся, и осталось его только вывести наружу.
Также обычно компиляторы поддерживают "перегрузку" любой системной функции -- "повесив" свои версии malloc()/free()/calloc(), мы получим proxy, через которое все станут работать. Только вот надо ещё суметь вызвать прежние версии... wink.gif
Golikov A.
чего то вы такое сложное сказали, что даже не понятно о чем...

Цитата
что выделять память после стартового инита приложения -- неправильно

вот это к примеру что значит? Что вы динамическую память используете как статическую? А нафига тогда ее делать динамической? Какой в ней смысл если вы знаете изначально сколько ее вам надо?

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.