Здравствуйте. Использую в своём проекте порт FreeRTOS для LPC1343.
Заявленные в топике дефайны configMINIMAL_STACK_SIZE configTOTAL_HEAP_SIZE
1. Не понятны с точки зрения физики: как выделяется память для каждой задачи, куда деваются после этого остатки?
2. Что будет, если общий объем стеков задач в сумме с configTOTAL_HEAP_SIZE превысит объем памяти?
3. Что происходит, когда размеры локальных переменных в таске превышают объём configMINIMAL_STACK_SIZE.
4. Как можно объяснить такое наблюдение: configMININAL_STACK_SIZE 300 configTOTAL_HEAP_SIZE 6*1024
В одной из 3х созданных задач есть структура объемом 216 байт и ещё кое-что по-мелочи. Но самое главное, код работает.
Меняем просто configTOTAL_HEAP_SIZE 5*1024 - и всё умирает.
Впрочем, программа умирает также, когда из трех тасков в двух размер стека задается configMININAL_STACK_SIZE. а в третьей - самой прожорливой configMININAL_STACK_SIZE*2.
Верно ли использование этого дефайна в качестве задаваемого размера стека при создании таска или он может быть и поменьше, а для каждой задачи происходит какая-то проверка, не пытаешься ли ты создать задачу со стеком меньше минимального?
5. Наверное уже набившая оскомину тема с выделением и освобождением памяти внутри тасков: чем отличается использование malloc() и free() от специальных функций pvPortMalloc() и vPortFree().
Буду благодарен за ответы по существу и за ссылки на подробные объяснения в других местах.
|