скрытое меню

LWIP HTTP server на FreeRTOS

Первая попытка реализации HTTP сервера в сети за RNDIS адаптером. Используем STM32F205VG под Atollic True Studio и FreeRTOS v1 .

Мы иcпользуем HTTP server вариант RAW библиотеки LWIP. Тот вариант, что по логике исходников LWIP вроде бы не предназначен для OS (FreeRTOS). Но тем не менее почему бы и не попробовать. И ведь поначалу даже работает. В коде у нас #define NO_SYS 1 .

#define NO_SYS                          1
#define SYS_LIGHTWEIGHT_PROT            0
#define LWIP_NETCONN                    !NO_SYS //!! = 0 
#define LWIP_SOCKET                     !NO_SYS   //!! = 0 
#define LWIP_NETCONN_FULLDUPLEX         LWIP_SOCKET
#define LWIP_NETBUF_RECVINFO            0
#define LWIP_HAVE_LOOPIF                0
#define TCPIP_THREAD_TEST

На самом деле LWIP для многопоточных систем типа FreeRTOS имеется вариант реализации НЕ RAW , а так называемый NETCONN , с которым кстати не все гладко (мягко говоря). А точнее похоже он явно глючен.

Канал USB у нас является физической средой передачи данных. Работает управление каналом USB ( как и любой USB) только в одном направлении (от хоста к девайсу) , на девайсе вызывая USB прерывание .

Главные проблемы при интеграции своего кода во FreeRTOS связаны с выделением памяти . FreeRTOS использует свою модель управления памятью. У нас используется heap_4 вариант.

С другой стороны LWIP http server RAW например использует свои модели памяти . Выделение памяти через функуию pbuf_alloc .

А код стандартной реализации USB из HAL Cube MX использует иногда malloc для своих нужд.

Freertos и lwip похожи тем , что изначально они на этапе компиляции резервируют себе большие куски памяти SRAM. Отсюда возникает вопрос , а не слишком ли жирновато так использовать память? Но если мы хотим отрабатывать одноаременно 3-4 tcp соединения при запросе ресурса с нашего сервера, то память sram в 50Кб по-видимому цифра вполне реальная.

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

В итоге для контроллеров под FREERTOS однозначно надо отказываться от malloc , саму Freertos надо создавать статически и тогда есть надежда , что LWIP RAW можно запустить нормально под freertos.