скрытое меню

HTTP server RAW LWIP 2.x.x (без FreeRTOS)

Это кое-как вымученный первый проект HTTP сервера на LWIP 2.1.2 под Atollic True Studio.

Это самый простой вариант LWIP RAW (не NETCONN) и без всяких FreeRTOS.

Задача была : попробовать реализовать HTTP сервер , просто чтобы он хоть как-то начал работать.

Первый опыт использования LWIP RAW вызвал неподдельное желание наконец-то изучить и понять какие и зачем ethernet пакеты бегают по сети. LWIP RAW это не для многопоточных ОС типа freertos.

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

Установка значения в контроллере

Посылаем GET запрос контроллеру 192.168.7.1/ctl.cgi?par1=val1

Контроллер получает и отрабатывает по следующему пути функции :

main()
usb_polling() [my_app.c] // это наш файл
//перенаправляет поток ethernet <-> usb
  ethernet_input() [ethernet.c]
    ip4_input() [ip4.c]
      tcp_input() [at tcp_in.c]
        altcp_tcp_recv() [altcp_tcp.c]
          http_recv() [httpd.c]
            http_parse_request() [httpd.c]
              http_find_file() [httpd.c] // ctl.cgi
                http_init_file() [httpd.c] // выделение ?par1=val1 
                // и передача на обработку
                  httpd_cgi_handler() [cgi_ssi.c] // это наш обработчик
                  // здесь мы сохраняем во flash AT45 пару  par1=val1 
             http_send() // отдаем контент по шаблону

Вот так примерно выглядит наш http сервер. Мы можем менять настройки контроллера STM32 через http GET запросы, что очень удобно :

фотка 1

По идеалогии LWIP мы сами подключаем необходимые файлы к нашему http серверу. Например как аналог JQuery у нас используется файл zepto.min.js (Zepto v1.1.6) . Все эти файлы надо сначала закомпилировать в выходной файл fsdata.c.

Но есть одно "НО" - вариант LWIP RAW для FreeRTOS не подойдет без доработки LWIP и настройки FreeRTOS (вариант статик).

Ниже представленный проект пока только показал необходимость разбираться дальше с кодом LWIP. Хоть он и работает , но надо еще понять как работает выделение памяти, как работает TCP (где он хранит информацию о соединениях) и еще много чего.

Файлы для скачивания