скрытое меню

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 для своих нужд.

Первые два варианта похожи тем , что изначально они на этапе компиляции резервируют себе большие куски памяти SRAM. Отсюда возникает вопрос , а не слишком ли жирновато так использовать память?

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

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