Версия для печати темы
Форум разработчиков электроники ELECTRONIX.ru _ FreeRTOS _ Настройки FreeRTOS
Автор: Jenya7 Jul 25 2018, 09:28
Создаю таски
Код
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 */ - это для каждого таска или общий размер?
Автор: SyncLair Jul 25 2018, 09:46
Цитата(Jenya7 @ Jul 25 2018, 13:28)
В FreeRTOSConfig.h есть #define configMINIMAL_STACK_SIZE (200) /* stack size in addressable stack units */ - это для каждого таска или общий размер?
HeapSize
Автор: juvf Jul 25 2018, 09:51
Цитата(Jenya7 @ Jul 25 2018, 14:28)
В FreeRTOSConfig.h есть #define configMINIMAL_STACK_SIZE (200) /* stack size in addressable stack units */ - это для каждого таска или общий размер?
так http://electronix.ru/redirect.php?https://freertos.org/Documentation/FreeRTOS_Reference_Manual_V10.0.0.pdfполно в инете....
configMINIMAL_STACK_SIZE - это размер стека ТОЛЬКО для IDLE таска.
общий размер, который ртос отьест для всех задач, семафоров, очередей и т.п, задается параметром configTOTAL_HEAP_SIZE
Автор: Jenya7 Jul 25 2018, 11:18
тогда я ничего не понимаю - у меня - #define configTOTAL_HEAP_SIZE (24576) /* size of heap in bytes */
Автор: juvf Jul 25 2018, 11:33
а что дает xPortGetFreeHeapSize() до xTaskCreate()?
Автор: Arlleex Jul 25 2018, 11:37
Цитата(Jenya7 @ Jul 25 2018, 15:18)
тогда я ничего не понимаю - у меня - #define configTOTAL_HEAP_SIZE (24576) /* size of heap in bytes */
Ну дык может это говорит о том, что имеет смысл увеличивать? Создали семафор - заняли heap, создали задачу - заняли heap и т.д.
Ваши 2 задачи уже 8кБ памяти будут отжирать сразу.
Автор: Jenya7 Jul 25 2018, 11:55
Цитата(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. Иногда попадает в функции тасков но программа не работает.
ой. заработало. спасибо.
Автор: juvf Jul 25 2018, 11:57
какой хип? heap_1.c, heap_2.c...or heap_4.c?
Автор: Jenya7 Jul 25 2018, 12:02
Цитата(juvf @ Jul 25 2018, 17:57)
какой хип? heap_1.c, heap_2.c...or heap_4.c?
#define configUSE_HEAP_SCHEME 4 /* either 1 (only alloc), 2 (alloc/free), 3 (malloc), 4 (coalesc blocks), 5 (multiple blocks), 6 (newlib) */
а какой лучше?
Автор: x893 Jul 25 2018, 12:04
Отладчиком религия не позволяет пользоваться ?
Автор: Jenya7 Jul 25 2018, 12:06
Цитата(x893 @ Jul 25 2018, 18:04)
Отладчиком религия не позволяет пользоваться ?
отладчик плохо работает с фриартосом. нужно ставить плагин.
Автор: Grigorij Jul 25 2018, 12:06
Чтобы бездумно не увеличивать размер стека под задачи и, соответственно, размер кучи, посмотрите столько реально каждая задача у вас сейчас потребляет. На хабре есть очень интересная статья по этому поводу - http://electronix.ru/redirect.php?https://habr.com/post/352782/
Автор: juvf Jul 25 2018, 12:14
какая-то кастомная FreeRTOS. Добавлена какая-то configUSE_HEAP_SCHEME , нет xPortGetFreeHeapSize()....
Цитата
а какой лучше?
лучше та, которая вам нужна. Я обычно использую heap_1.c, мне не нужно динамически задачи создавать и удалять. не будет фрагментации. почитайте про схемы, выберете себе подходящую.
Вот http://electronix.ru/redirect.php?http://www.kit-e.ru/articles/micro/2012_11_93.php про память, кучи, стеки разжованно. Если после запуска планировщика не создаете/удаляете задачи/симафоры/очереди, то heap_1.
Автор: Jenya7 Jul 25 2018, 12:19
Цитата(Grigorij @ Jul 25 2018, 18:06)
Чтобы бездумно не увеличивать размер стека под задачи и, соответственно, размер кучи, посмотрите столько реально каждая задача у вас сейчас потребляет. На хабре есть очень интересная статья по этому поводу - http://electronix.ru/redirect.php?https://habr.com/post/352782/
спасибо. интересная статья.
Цитата(juvf @ Jul 25 2018, 18:14)
какая-то кастомная FreeRTOS. Добавлена какая-то configUSE_HEAP_SCHEME , нет xPortGetFreeHeapSize()....
лучше та, которая вам нужна. Я обычно использую heap_1.c, мне не нужно динамически задачи создавать и удалять. не будет фрагментации. почитайте про схемы, выберете себе подходящую.
Вот http://electronix.ru/redirect.php?http://www.kit-e.ru/articles/micro/2012_11_93.php про память, кучи, стеки разжованно. Если после запуска планировщика не создаете/удаляете задачи/симафоры/очереди, то heap_1.
спасибо. у меня были сомнения - не люблю динамическую алокацию. попробую heap_1.
Автор: x893 Jul 25 2018, 12:54
Цитата(Jenya7 @ Jul 25 2018, 15:06)
отладчик плохо работает с фриартосом. нужно ставить плагин.
Даже не знаю, что и сказать на это замечание.
Наверное так - отладчику наплевать на FreeRTOS.
Как и всё остальное. Что скажешь, то и делает.
Автор: Arlleex Jul 25 2018, 12:58
Цитата(x893 @ Jul 25 2018, 16:54)
Даже не знаю, что и сказать на это замечание.
Наверное так - отладчику наплевать на FreeRTOS.
Как и всё остальное. Что скажешь, то и делает.
Полностью согласен.
Ну если пользоваться какими-нибудь халокубами, то, наверное, какой-то плагин и нужен... В Keil же есть какой-то Software Package при старте проекта. Похоже на что-то подобное.
Автор: juvf Jul 25 2018, 13:50
В чем ртос поставяется? в исходниках? тогда для дебага не нужны ни какие плуги.
Цитата
Ну если пользоваться какими-нибудь халокубами то, наверное, какой-то плагин и нужен..
в кубе чистая фриртос, без FRTOS1. И куб добавляет в проект фриртос в виде исходников (как и остальные компаненты).
Автор: Jenya7 Jul 25 2018, 14:51
Цитата(juvf @ Jul 25 2018, 19:50)
В чем ртос поставяется? в исходниках? тогда для дебага не нужны ни какие плуги.
в кубе чистая фриртос, без FRTOS1. И куб добавляет в проект фриртос в виде исходников (как и остальные компаненты).
у меня проект создан с ProcessorExpert (дерьмо редкостное). у него своя обертка под FreeRTOS.
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)