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

 
 
> FreeRTOS Heap_x.c
FormatCft
сообщение Oct 7 2008, 07:08
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 331
Регистрация: 22-07-08
Из: Р О С С И Я
Пользователь №: 39 145



Доброго времени суток!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Есть ли у кого своя реализация Heap_x.c? А то, что то не хочется использовать реализации которые есть (то без чистки памяти, то без объединения свободных блоков).
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2. Еще вопрос по heap_3.c. Этот хип использует стандартный Си-шный хип или просто есть возможность его использовать?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
wave48
сообщение Jul 17 2013, 06:29
Сообщение #2


Участник
*

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



Вот это и было одной из причин использовать собственный аллокатор. На моей плате хеапы из дистрибутива FReeRTOS увеличивали размер кучи после просмотра двух-трех страниц lwipa и чтения пары килобайт из конфигурационных файлов. Оказалось что они почти не следят за освободившимися блоками, не умеют их объединять. Системный malloc приводил к таким же результатам - ему требовался большой стек.
Go to the top of the page
 
+Quote Post
MiG-3
сообщение Dec 4 2014, 13:13
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 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. Если память выделяется динамически на этапе старта - инита оси, стеков и пр., а в дальнейшем изменения задач, мутексов и динамически выделяемых данных не предвидится, то есть ли смысл париться альтернативным кодом аллокаторов?


Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Dec 8 2014, 13:11
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 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;
}

КО подсказывает, что да sm.gif

Цитата
Вопрос 3. В последних версиях FreeRTOS heap_4.c (heap_5.c) имеет все равно проблемы с фрагментацией?

Я сижу на 7.4.0, на моих применениях полет нормальный. heap_4 выполняет склейку соседних блоков памяти при освобождении.

Цитата
Вопрос 4. Если память выделяется динамически на этапе старта - инита оси, стеков и пр., а в дальнейшем изменения задач, мутексов и динамически выделяемых данных не предвидится, то есть ли смысл париться альтернативным кодом аллокаторов?

Используй heap_1 да и все. Она не освобождает память, поэтому реализация простая и очень быстрая...
Go to the top of the page
 
+Quote Post
MiG-3
сообщение Dec 10 2014, 10:29
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 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байт.

Я тут попробовал - вроде получается, что куча ОСИ выделяется в общей куче.

Остальное ясно - спасибо.
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Dec 15 2014, 09:52
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(MiG-3 @ Dec 10 2014, 13:29) *
Да это-то понятно. Но вот откуда выделяется память вопрос был. Меня интересивало, где выделяется этот массив, размером configTOTAL_HEAP_SIZE. Он входит в размер heap, который указан в настройках линковщика или за пределами этого размера. Ну грубо говоря, если heap = 20000 байт, а configTOTAL_HEAP_SIZE = 10000 байт. Я занимаю в ОЗУ 20000байт или 30000байт.

Что такое heap? Сишная куча? Она к фриртос никакого отношения не имеет. Массив - обычный глобальный объект, память для него резервируется при линковке
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


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

 


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


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