Начинаем настраивать lwip

По итогам изучения версии 1.4.1 и 2.1.2 оказалось, что общая логика библиотек сохраняется , то есть общие принципы , названия функций , структур и последовательность вызовов функций не изменяются.

Имеет смысл внимательно изучить все дефайны, все функции и в дальнейшем с минимальными правками использовать в своих проектах. Код открытый настраиваемый и его можно адаптировать под любое железо.
Но надо понимать язык С и с вниманием относится к каждой букве кода.

Практика LWIP

Все это язык С . Куча файлов , которые кстати не все нужны. Надо выбирать нужные под нужный вам результат, например, нам нужен HTTP сервер. Чтобы настраивать свой контроллер STM32 через Web интерфейс , да еще и по USB.

Лучше не удалять файлы с ненужным функционалом , чтобы не резать библиотеку , а просто отключать от сборки . Делается это в Atollic True Studio просто выставлением галочки в свойствах файла или каталога:

фотка 1

За пример взяли с гитхаба готовый пример LRNDIS от Сергея Фетисова и на нем начали изучать код. Код не сразу скомпилировался (конечно же).

makefsdata - что это за ....

Тут есть такой нюанс сразу , что надо исключить из сборки каталог makefsdata . Так как он как бы из другого проекта, его цель сгенерировать файл fsdata.c по данным web файлов index.html, state.cgi и т.д. Можно и свои файлы подсовывать.

Иначе появляются ошибки компиляции.

Первое ,что надо сделать после удачной сборки - добавить трассировку

Выставляем сначала нужны уровень подробности трассировки :

Глобально включаем отладочные сообщения :


#define LWIP_DBG_TYPES_ON LWIP_DBG_ON

#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_ALL

#define LWIP_DBG_MASK_LEVEL LWIP_DBG_LEVEL_ALL

Просто где-нибудь в начале файла debug.h вставить #define LWIP_DEBUG 1 . Потом переопределить вывод отладочных сообщений :

#define LWIP_PLATFORM_DIAG(x) do {printf x;} while(0)
// у нас в printf все уходит

Далее везде где хотим получить вывод отладки в консоль SWO меняем #define XXXXXX LWIP_DBG_OFF на LWIP_DBG_ON .

Также можно и скорее всего на начальном этапе нужно включить ASSERT в файле debug.h (отлавливание сбойных значений и остановка программы) :

#define LWIP_NOASSERT

Обратите внимание на макросы замены для функции printf

Смысл такой , чтобы можно было переопределить %d %u %x . Например %x в %0.2x .

#if !LWIP_NO_INTTYPES_H
#include 
#ifndef X8_F
#define X8_F  "02X" //PRIx8
#endif
#ifndef U16_F
#define U16_F "u" //PRIu16
#endif
#ifndef S16_F
#define S16_F "d" //PRId16
#endif
#ifndef X16_F
#define X16_F "X" // PRIx16
#endif
#ifndef U32_F
#define U32_F "u" //PRIu32
#endif
#ifndef S32_F
#define S32_F "d" //PRId32
#endif
#ifndef X32_F
#define X32_F "X" //PRIx32
#endif
#ifndef SZT_F
#define SZT_F PRIuPTR
#endif
#endif

DHCP сервер

Но вот , что на самом деле нехорошо - это то ,что похоже в LWIP (даже последней версии 2.1.2) есть только реализация только DHCP клиента, а он нам вообще-то не нужен, т.к. наш RNDIS адатор сам должен быть DHCP сервером.