Первая попытка реализации 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 , с которым кстати не все гладко (мягко говоря). А точнее похоже он явно глючен, почему не работает LWIP 2.1.2.
Канал 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.