|
Настройки FreeRTOS |
|
|
|
Jul 25 2018, 09:28
|
Профессионал
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075
|
Создаю таски Код FRTOS1_xTaskCreate((TaskFunction_t)operation_task, (signed char*) "tx", 1024, NULL, 1, NULL); FRTOS1_xTaskCreate((TaskFunction_t)log_managment_task, (signed char*) "rx", 512, NULL, 1, NULL); Все работает.Но если увеличиваю размер стэка Код FRTOS1_xTaskCreate((TaskFunction_t)operation_task, (signed char*) "tx", 1024, NULL, 1, NULL); FRTOS1_xTaskCreate((TaskFunction_t)log_managment_task, (signed char*) "rx", 1024, NULL, 1, NULL); Заходит в исключение FRTOS1_vApplicationMallocFailedHook. А где увеличить стэк? В FreeRTOSConfig.h есть #define configMINIMAL_STACK_SIZE (200) /* stack size in addressable stack units */ - это для каждого таска или общий размер?
Сообщение отредактировал Jenya7 - Jul 25 2018, 09:28
|
|
|
|
|
Jul 25 2018, 09:51
|
Профессионал
Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045
|
Цитата(Jenya7 @ Jul 25 2018, 14:28) В FreeRTOSConfig.h есть #define configMINIMAL_STACK_SIZE (200) /* stack size in addressable stack units */ - это для каждого таска или общий размер? так мануалов полно в инете.... configMINIMAL_STACK_SIZE - это размер стека ТОЛЬКО для IDLE таска. общий размер, который ртос отьест для всех задач, семафоров, очередей и т.п, задается параметром configTOTAL_HEAP_SIZE
|
|
|
|
|
Jul 25 2018, 11:37
|
Местный
Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264
|
Цитата(Jenya7 @ Jul 25 2018, 15:18) тогда я ничего не понимаю - у меня - #define configTOTAL_HEAP_SIZE (24576) /* size of heap in bytes */ Ну дык может это говорит о том, что имеет смысл увеличивать? Создали семафор - заняли heap, создали задачу - заняли heap и т.д. Ваши 2 задачи уже 8кБ памяти будут отжирать сразу.
|
|
|
|
|
Jul 25 2018, 11:55
|
Профессионал
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075
|
Цитата(juvf @ Jul 25 2018, 17:33) а что дает xPortGetFreeHeapSize() до xTaskCreate()? меня такого не - xPortGetFreeHeapSize()падает тут Код StackType_t *pxStack;
/* Allocate space for the stack used by the task being created. */ pxStack = ( StackType_t * ) pvPortMalloc( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) ); Цитата(Arlleex @ Jul 25 2018, 17:37) Ну дык может это говорит о том, что имеет смысл увеличивать? Создали семафор - заняли heap, создали задачу - заняли heap и т.д. Ваши 2 задачи уже 8кБ памяти будут отжирать сразу. увеличил до 32кило - он не заходит в FRTOS1_vApplicationMallocFailedHook но где то бродит по функциям FreeRTOS. Иногда попадает в функции тасков но программа не работает. ой. заработало. спасибо.
Сообщение отредактировал Jenya7 - Jul 25 2018, 12:00
|
|
|
|
|
Jul 25 2018, 12:06
|
Участник
Группа: Участник
Сообщений: 71
Регистрация: 10-03-07
Пользователь №: 26 038
|
Чтобы бездумно не увеличивать размер стека под задачи и, соответственно, размер кучи, посмотрите столько реально каждая задача у вас сейчас потребляет. На хабре есть очень интересная статья по этому поводу - ссылка на статью
|
|
|
|
|
Jul 25 2018, 12:14
|
Профессионал
Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045
|
какая-то кастомная FreeRTOS. Добавлена какая-то configUSE_HEAP_SCHEME , нет xPortGetFreeHeapSize().... Цитата а какой лучше? лучше та, которая вам нужна. Я обычно использую heap_1.c, мне не нужно динамически задачи создавать и удалять. не будет фрагментации. почитайте про схемы, выберете себе подходящую. Вот тут про память, кучи, стеки разжованно. Если после запуска планировщика не создаете/удаляете задачи/симафоры/очереди, то heap_1.
|
|
|
|
|
Jul 25 2018, 12:19
|
Профессионал
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075
|
Цитата(Grigorij @ Jul 25 2018, 18:06) Чтобы бездумно не увеличивать размер стека под задачи и, соответственно, размер кучи, посмотрите столько реально каждая задача у вас сейчас потребляет. На хабре есть очень интересная статья по этому поводу - ссылка на статьюспасибо. интересная статья. Цитата(juvf @ Jul 25 2018, 18:14) какая-то кастомная FreeRTOS. Добавлена какая-то configUSE_HEAP_SCHEME , нет xPortGetFreeHeapSize().... лучше та, которая вам нужна. Я обычно использую heap_1.c, мне не нужно динамически задачи создавать и удалять. не будет фрагментации. почитайте про схемы, выберете себе подходящую. Вот тут про память, кучи, стеки разжованно. Если после запуска планировщика не создаете/удаляете задачи/симафоры/очереди, то heap_1. спасибо. у меня были сомнения - не люблю динамическую алокацию. попробую heap_1.
|
|
|
|
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|