Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум разработчиков электроники 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)