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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Инициализация стека STM32
igorle
сообщение Oct 2 2013, 14:35
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



А что такое "остаток"? Память ведь может быть фрагментирована. Сумма всех кусочков?

Единственный путь, известный мне, это в нужной точке устроить крэш тест: аллоцировать память, пока не вернет ошибку. Но и это мало информации дает, так как фрагментация памяти и размер запрашиваемых блоков играют важную роль.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Oct 2 2013, 15:11
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(igorle @ Oct 2 2013, 18:35) *
А что такое "остаток"? Память ведь может быть фрагментирована. Сумма всех кусочков?

Единственный путь, известный мне, это в нужной точке устроить крэш тест: аллоцировать память, пока не вернет ошибку. Но и это мало информации дает, так как фрагментация памяти и размер запрашиваемых блоков играют важную роль.
да, я тоже видел подобные примеры в тырнете. While для malloc с инкрементом размера и освобождением, пока не вернет NULL

тут ведь какая штука... черт ее знает, как там менеджер кучи работает. Может он умеет "собирать крупу" sm.gif


Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Oct 2 2013, 15:25
Сообщение #18


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(редактор @ Oct 2 2013, 04:02) *
Раз уж речь пошла об инициализации, спрошу здесь (хоть и не совсем в тему, да простят меня автор топика и Модераторы).
Можно ли в KEIL узнать остаток кучи (HEAP) штатными средствами?
Или только через контроль указателя, который вернулся при запросе (через new) и несложную математику?

Keil это компилятор. Вы хотите узнать сколько осталось после компиляции?
мап файл.
Если в процессе работы программы, то Keil тут никаким боком.
Зависит от операционки, если она есть.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
редактор
сообщение Oct 3 2013, 08:55
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



Спасибо всем за ответы.
Цитата
А что такое "остаток"? Память ведь может быть фрагментирована. Сумма всех кусочков?

Ну примерно так. Если подробнее, то до вызова main() происходит инициализация статических переменных и классов. При инициализации классов часть памяти "захватыватся" через new. Вот и хотелось бы узнать хоть приблизительный остаток кучи (к этому моменту она еще не будет дефрагментирована, надеюсь) или размер максимального блока, который может быть выделен.
Использовать статическое выделение памяти можно, но это уже другая тема (мое наследство), поэтому не обсуждаю.

Цитата
Keil это компилятор. Вы хотите узнать сколько осталось после компиляции? мап файл.

Тогда уж после линковки (но это я к словам докапываюсь, извините). Это я в курсе.
Но тем неменее KEIL предоставляет несколько функций для работы с кучей, не относящихся к стандартным. Например __heapstats(); ее недостатком является то, что информацию выдает через printf в текстовом виде, да и информация по каждому блоку отдельно - не совсем то, что надо.
Думал, может кто с другими функциями контроля знаком.


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
igorle
сообщение Oct 3 2013, 19:26
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 338
Регистрация: 14-07-12
Пользователь №: 72 753



Вызовите в начале функции main маллок одного байта, поставьте там брекпоинт. Посмотрите, что вернул маллок и насколько это далеко от границы кучи. Освободите этот байт.

Хочется автоматизации - аллоцируйте и осбобождайте блок памяти в цикле, добавляя по одному байту. Когда будет достигнут предел - напечатайте, или зайдите в брекпоинт. Я так понимаю, речь идет не о рабочем коде, а об отладочном - чтобы оценить достаточность кучи?
Go to the top of the page
 
+Quote Post
редактор
сообщение Oct 4 2013, 07:39
Сообщение #21


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



Спасибо за совет. В данный момент речь идет именно об отладочном коде.
Но использование в реалтайме тоже могло бы пригодиться.
Есть мысль, что в начале main достаточно запросить один байт и по указателю рассчитать остаток.
HEAP_MEM + HEAP_SIZE - PTR
точность составит наверное 8-16 байт (округление запрошенной памяти до 8 байт + параметры под атрибуты блока) но для первоначальной оценки вполне достаточно.
Еще раз всем спасибо.


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 31st August 2025 - 16:46
Рейтинг@Mail.ru


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