Skocz do zawartości

Dobry serwer HTTP pod lwIP + FreeRTOS


atlantis86

Pomocna odpowiedź

Od paru tygodni próbuję uruchomić serwer HTTP na STM32F407, posługując się systemem FreeRTOS, stosem lwIP oraz bibliotekami HAL - wszystko według konfiguracji wygenerowanej za pomocą STM32CubeMX. Część swoich doświadczeń opisałem tutaj. Od tamtego czasu udało mi się ustalić, że przyczyna niestabilności którą obserwowałem była prawdopodobnie sprzętowa. Okazuje się, że STM32F407 nie jest w stanie przesyłać za pomocą DMA dane pomiędzy flashem oraz Ethernetem. Ponieważ strony są przechowywane we flashu, a podczas wysyłania odpowiedzi dane nie są kopiowane do RAM-u, tak więc pojawia się błąd. To tłumaczyłoby, dlaczego serwer nie chce działać na STM32F407, ale na STM32F107 problem już nie wystęopuje.

Co prawda mógłbym próbować grzebać w kodzie biblioteki żeby to naprawić (albo czekać aż ktoś w STM sie za to weźmie) ale jednak średnio mam na to ochotę - serwer HTTP dołączony przez STM32CubeMX jest wyjątkowo ubogi funkcjonalnie i niezbyt wygodny jeśli idzie o obsługę (np. w przypadku dynamicznego generowania treści). Leciwy HTTP2 z bibliotek MLA dla PIC32 wygląda w porównaniu z nim nieporównywalnie lepiej, nie wspominając nawet o nowym HTTP NET z biblioteki Harmony, Niestety z oczywistych względów żaden z nich nie jest dostępny na mikrokontrolery STM32.

Czy istnieje jakaś lepsza alternatywa? W końcu lwIP, FreeRTOS oraz FatFS dostarczają standardowy interfejs, na którym można by zbudować przyzwoity serwer HTTP. Istnieje coś, co spełniałoby następujące warunki?

  1. Udostępnianie plików z lokalnego nośnika (np. karta SD lub PenDrive) obsługiwanego za pomocą biblioteki FatFS.
  2. Obsługa zapytań GET i POST z parametrami.
  3. Możliwość podpięcia funkcji dynamicznie generującej odpowiedź (np. JSON).
  4. Ewentualnie możliwość podpięcia funkcji podmieniającej jakiś token w statycznych plikach na generowaną dynamicznie treść (najlepiej o dowolnej długiości).

Ktoś orientuje się jaki serwer HTTP jest stosowany w bibliotekach dołączanych do SDK dla ESP8266 albo ESP32? Tam również wykorzystywany jest lwIP + FreeRTOS, jednak z całą pewnością nie jest to ta sama biblioteka co pod STM32.

Szukałem jakichś lepszych serwerów HTTP dla STM32, jednak na GitHubie znajduję jedynie jakieś programistyczne wprawki, będące de facto podstawowymi przykładami obsługi gniazd i parsowania requestów  HTTP.

Link do komentarza
Share on other sites

15 godzin temu, atlantis86 napisał:

Ktoś orientuje się jaki serwer HTTP jest stosowany w bibliotekach dołączanych do SDK dla ESP8266 albo ESP32?

To akurat jakaś prościzna. Ale: istnieje coś takiego jak ESPAsyncWebServer (co prawda dla Arduino ale to chyba najmniejszy problem) - ten na 100% sobie poradzi, tylko nie wiem jak z portowaniem.

  • Lubię! 1
Link do komentarza
Share on other sites

Tak bajdełej jest taki zestaw ZL26ARM stworzony do tego - przypuszczam, że źródła też udostępnione i wszystko hula - taki mój nadmiarowy zakup, użyłem 2 razy żeby programować USB MSC, a nie jako serwer sieciowy LOL

 

ZL26ARM.thumb.jpg.8048f7b7268865f6a7ddd52db73643bc.jpg

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.