|
FreeRTOS Heap_x.c |
|
|
|
 |
Ответов
|
Jul 17 2013, 06:29
|
Участник

Группа: Участник
Сообщений: 64
Регистрация: 14-07-08
Пользователь №: 38 916

|
Вот это и было одной из причин использовать собственный аллокатор. На моей плате хеапы из дистрибутива FReeRTOS увеличивали размер кучи после просмотра двух-трех страниц lwipa и чтения пары килобайт из конфигурационных файлов. Оказалось что они почти не следят за освободившимися блоками, не умеют их объединять. Системный malloc приводил к таким же результатам - ему требовался большой стек.
|
|
|
|
|
Dec 4 2014, 13:13
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 23-01-12
Пользователь №: 69 823

|
Добрый день, коллеги! Хочется более точно понять как и откуда выделяется память во FreeRTOS и особенности функционирования отдельных выделяльщиков. Проект в IARe, в конфигурации линковщика есть параметр "heap". Так ли я понимаю, что при использовании heap_1.c, heap_2.c, heap_4.c для оси выделяется динамическая память размером "configTOTAL_HEAP_SIZE".
Вопрос 1. Откуда она выделяется? Т.е. "configTOTAL_HEAP_SIZE" это часть "heap" или "configTOTAL_HEAP_SIZE" - это память, забираемая плюсом к "heap"? Т.е. сколько мне остается на переменные проекта :-)
Вопрос 2. Для heap_3.c размер кучи - это "heap" линковщика?
Вопрос 3. В последних версиях FreeRTOS heap_4.c (heap_5.c) имеет все равно проблемы с фрагментацией?
Вопрос 4. Если память выделяется динамически на этапе старта - инита оси, стеков и пр., а в дальнейшем изменения задач, мутексов и динамически выделяемых данных не предвидится, то есть ли смысл париться альтернативным кодом аллокаторов?
|
|
|
|
|
Dec 8 2014, 13:11
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Цитата(MiG-3 @ Dec 4 2014, 17:13)  Так ли я понимаю, что при использовании heap_1.c, heap_2.c, heap_4.c для оси выделяется динамическая память размером "configTOTAL_HEAP_SIZE". Не понял что значит "для оси выделяется динамическая память"? configTOTAL_HEAP_SIZE задает объем памяти, доступный через pvPortMalloc. Память с его помощью выделяет сама ОС, и он же может использоваться в пользовательском коде... Цитата Вопрос 1. Откуда она выделяется? Т.е. "configTOTAL_HEAP_SIZE" это часть "heap" или "configTOTAL_HEAP_SIZE" - это память, забираемая плюсом к "heap"? Т.е. сколько мне остается на переменные проекта :-) Есть массив размера configTOTAL_HEAP_SIZE, из него память и выделяется. Цитата Вопрос 2. Для heap_3.c размер кучи - это "heap" линковщика? Код void *pvPortMalloc( size_t xWantedSize ) { void *pvReturn;
vTaskSuspendAll(); { pvReturn = malloc( xWantedSize ); } xTaskResumeAll(); return pvReturn; } КО подсказывает, что да  Цитата Вопрос 3. В последних версиях FreeRTOS heap_4.c (heap_5.c) имеет все равно проблемы с фрагментацией? Я сижу на 7.4.0, на моих применениях полет нормальный. heap_4 выполняет склейку соседних блоков памяти при освобождении. Цитата Вопрос 4. Если память выделяется динамически на этапе старта - инита оси, стеков и пр., а в дальнейшем изменения задач, мутексов и динамически выделяемых данных не предвидится, то есть ли смысл париться альтернативным кодом аллокаторов? Используй heap_1 да и все. Она не освобождает память, поэтому реализация простая и очень быстрая...
|
|
|
|
|
Dec 10 2014, 10:29
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 23-01-12
Пользователь №: 69 823

|
Спасибо за ответ! Цитата(Непомнящий Евгений @ Dec 8 2014, 16:11)  Не понял что значит "для оси выделяется динамическая память"? configTOTAL_HEAP_SIZE задает объем памяти, доступный через pvPortMalloc. Память с его помощью выделяет сама ОС, и он же может использоваться в пользовательском коде...
Есть массив размера configTOTAL_HEAP_SIZE, из него память и выделяется. Да это-то понятно. Но вот откуда выделяется память вопрос был. Меня интересивало, где выделяется этот массив, размером configTOTAL_HEAP_SIZE. Он входит в размер heap, который указан в настройках линковщика или за пределами этого размера. Ну грубо говоря, если heap = 20000 байт, а configTOTAL_HEAP_SIZE = 10000 байт. Я занимаю в ОЗУ 20000байт или 30000байт. Я тут попробовал - вроде получается, что куча ОСИ выделяется в общей куче. Остальное ясно - спасибо.
|
|
|
|
Сообщений в этой теме
FormatCft FreeRTOS Heap_x.c Oct 7 2008, 07:08 zltigo Цитата(FormatCft @ Oct 7 2008, 09:08) Ест... Oct 7 2008, 07:36 FormatCft Цитата(zltigo @ Oct 7 2008, 13:36) Делал ... Oct 7 2008, 07:54  zltigo Цитата(FormatCft @ Oct 7 2008, 09:54) Мож... Oct 7 2008, 08:26   FormatCft Цитата(zltigo @ Oct 7 2008, 14:26) Я поду... Oct 7 2008, 08:38    zltigo Цитата(FormatCft @ Oct 7 2008, 10:38) Т.е... Oct 7 2008, 10:31     FormatCft Цитата(zltigo @ Oct 7 2008, 16:31) Подход... Oct 7 2008, 13:45 sergeeff В этом плане можно воспользоваться TLSF: Memory Al... Oct 7 2008, 07:55 FormatCft Цитата(sergeeff @ Oct 7 2008, 13:55) В эт... Oct 7 2008, 08:08  sergeeff Цитата(FormatCft @ Oct 7 2008, 12:08) Спа... Oct 7 2008, 10:18   FormatCft Цитата(sergeeff @ Oct 7 2008, 16:18) Тест... Oct 17 2008, 19:14 Terminator Запустил в своём проекте heap_3
arm-elf-gcc + newl... Oct 7 2008, 10:58 sergeeff To zltigo:
А в чем уважаемый гуру вы усмотрели ... Oct 7 2008, 15:31 zltigo Цитата(sergeeff @ Oct 7 2008, 17:31) А в ... Oct 7 2008, 15:46  sergeeff Цитата(zltigo @ Oct 7 2008, 19:46) Ничего... Oct 7 2008, 16:46   zltigo Цитата(sergeeff @ Oct 7 2008, 18:46) И из... Oct 17 2008, 21:29 FormatCft опсотв )) Oct 7 2008, 16:12 zltigo Оптимально-простой в соответствии с ранее изложенн... Oct 18 2008, 19:47 FormatCft Спасибо! ! ! Щас будем прикручивать Oct 18 2008, 20:04 Terminator Прикрутил к FreeRTOS TLSF
~3kB RAM уходит на табли... Nov 12 2008, 04:26 zltigo Сергей Борщ нашел потенциально суровый баг при осв... Apr 17 2010, 13:06 Alex B._ Первый выделенный блок не освобождается. Наверное ... Apr 22 2010, 11:05  zltigo Цитата(Alex B._ @ Apr 22 2010, 13:20) Пер... Apr 22 2010, 11:10   Alex B._ Цитата(zltigo @ Apr 22 2010, 15:25) Типа ... Apr 22 2010, 11:16 Dron_Gus Спасибо за исходники. Пошел подтачивать под ansi. Apr 21 2010, 07:41 wave48 Исходники аллокатора от zltigo оказались очень пол... Jul 15 2013, 07:06 esaulenka Раз уж подняли тему.
Модулей диагностики (хотя б п... Jul 16 2013, 19:38
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|