Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: RTX Kernal malloc()
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Dениs
Проблема в следующем, при выделении больших обемов памяти в RTX Kernal с помощью функции malloc(), не удается найти подходящий кусок памяти по размеру и возвращает указатель на NULL ? Может необходимо в таске увеличить размер стека ?
VAI
malloc() выделяет память не в стеке, а в куче (heap). Размер кучи для STM32F2 задаётся в файле "startup_stm32f2xx.s".
Учитывайте, что частый вызов malloc(), calloc(), realloc() и free() может привести к фрагментации кучи и невозможности выделить области памяти большого объёма...

Для реентабельности (возможности вызова из разных задач) вызов malloc(), calloc(), realloc() и free() должен быть обрамлён функциями rt_tsk_lock() и rt_tsk_unlock().
Примеры функций для CMSIS_RTX кейла во вложенном файле Нажмите для просмотра прикрепленного файла.
Aaron
использование динамической памяти в embedded проектах- тихое непредсказуемое зло имхо. Если уж решили использовать в процессах - то для выделения памяти используйте события/мутексы (усложнится немного выделение памяти, появятся обёртки для malloc/free) - чтобы процесс засыпал пока память не появится, хотя бы на некоторое время (сколько система позволяет) - ну а дальше обработка ошибок при невозможности выделить память.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.