суббота, 11 марта 2017 г.

Война с DHCP на LWIP+FreeRTOS после генерации проекта STM32Cube

В общем, решил я поднять как-то свой старый китайский девборд под управлением STM32F107VCT и сделать небольшой проект с использованием сети. Причем именно упороться и сгенерировать проект в STM32Cube. Ну и конечно куда без FreeRTOS ? Но вот загвоздка. DHCP включен, FreeRTOS включен адрес на DHCP сервере резервируется, но не подтверждается устройством. Интересно то, что если не использовать RTOS, а просто в бесконечном цикле вызывать сгенерированную кубом функцию MX_LWIP_Process, то все работает. "Значит не работает обработчик сети" - подумал я. В конечном итоге оказалось, что проблема в размере кучи. 

Стандартный размер кучи у FreeRTOS для Cube 4096. Этого оказывается категорически мало с учтом, что почему-то LWIP по умолчанию запускает целых 2 потока для обслуги себя любимого, резервируя под каждый 1024 слова.
В итоге, как победил. Захожу в настройки LWIP->Key options и режу настройки TCPIP_THREAD_STACKSIZE, DEFAULT_THREAD_STACKSIZE до 128. 
Настройки LWIP

Далее, в настройках FreeRTOS увеличиваю размер кучи в 2 раза до 8192 и минимальный размер стека со 128 до 64.
Настройки FreeRTOS

Пересобираем проект и все работает. 





Комментариев нет:

Отправить комментарий