Перейти к содержанию
    

Создаю таски

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В FreeRTOSConfig.h есть #define configMINIMAL_STACK_SIZE (200) /* stack size in addressable stack units */ - это для каждого таска или общий размер?

 

HeapSize

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В FreeRTOSConfig.h есть #define configMINIMAL_STACK_SIZE (200) /* stack size in addressable stack units */ - это для каждого таска или общий размер?
так мануалов полно в инете....

 

configMINIMAL_STACK_SIZE - это размер стека ТОЛЬКО для IDLE таска.

общий размер, который ртос отьест для всех задач, семафоров, очередей и т.п, задается параметром configTOTAL_HEAP_SIZE

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тогда я ничего не понимаю - у меня - #define configTOTAL_HEAP_SIZE (24576) /* size of heap in bytes */

Ну дык может это говорит о том, что имеет смысл увеличивать? Создали семафор - заняли heap, создали задачу - заняли heap и т.д.

Ваши 2 задачи уже 8кБ памяти будут отжирать сразу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а что дает 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 ) ) );

 

 

Ну дык может это говорит о том, что имеет смысл увеличивать? Создали семафор - заняли heap, создали задачу - заняли heap и т.д.

Ваши 2 задачи уже 8кБ памяти будут отжирать сразу.

 

увеличил до 32кило - он не заходит в FRTOS1_vApplicationMallocFailedHook но где то бродит по функциям FreeRTOS. Иногда попадает в функции тасков но программа не работает.

 

ой. заработало. спасибо.

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

какой хип? 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) */

 

а какой лучше?

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Отладчиком религия не позволяет пользоваться ?

 

отладчик плохо работает с фриартосом. нужно ставить плагин.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чтобы бездумно не увеличивать размер стека под задачи и, соответственно, размер кучи, посмотрите столько реально каждая задача у вас сейчас потребляет. На хабре есть очень интересная статья по этому поводу - ссылка на статью

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

какая-то кастомная FreeRTOS. Добавлена какая-то configUSE_HEAP_SCHEME , нет xPortGetFreeHeapSize()....

 

а какой лучше?
лучше та, которая вам нужна. Я обычно использую heap_1.c, мне не нужно динамически задачи создавать и удалять. не будет фрагментации. почитайте про схемы, выберете себе подходящую.

 

Вот тут про память, кучи, стеки разжованно. Если после запуска планировщика не создаете/удаляете задачи/симафоры/очереди, то heap_1.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чтобы бездумно не увеличивать размер стека под задачи и, соответственно, размер кучи, посмотрите столько реально каждая задача у вас сейчас потребляет. На хабре есть очень интересная статья по этому поводу - ссылка на статью

 

спасибо. интересная статья.

 

какая-то кастомная FreeRTOS. Добавлена какая-то configUSE_HEAP_SCHEME , нет xPortGetFreeHeapSize()....

 

лучше та, которая вам нужна. Я обычно использую heap_1.c, мне не нужно динамически задачи создавать и удалять. не будет фрагментации. почитайте про схемы, выберете себе подходящую.

 

Вот тут про память, кучи, стеки разжованно. Если после запуска планировщика не создаете/удаляете задачи/симафоры/очереди, то heap_1.

 

спасибо. у меня были сомнения - не люблю динамическую алокацию. попробую heap_1.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

отладчик плохо работает с фриартосом. нужно ставить плагин.

Даже не знаю, что и сказать на это замечание.

 

Наверное так - отладчику наплевать на FreeRTOS.

Как и всё остальное. Что скажешь, то и делает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...