RTV forum PL | NewsGroups PL

FreeRTOS + lwIP + HTTPD - zawieszenie po wejściu na stronę

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - FreeRTOS + lwIP + HTTPD - zawieszenie po wejściu na stronę

Goto page Previous  1, 2

Marek
Guest

Tue Jan 24, 2023 9:48 pm   



On Tue, 24 Jan 2023 21:20:27 +0100, Atlantis <marekw1986NOSPAM_at_wp.pl>
wrote:
Quote:
lwIP. Stronę WWW konwertuje się do tablic C za pomocą odpowiedniego
narzędzia (windowsowy plik exe, jednak działa pod Linuksem z Wine),
podobnie jak miało to miejsce z HTTP2 z MLA na PIC32.

Ło matko, a w Harmony też tak jest? Nie zrobili jeszcze w
"normalnego" httpd serwującego pliki z fatfs + handlery cgi-bin?
Przecież jakakolwiek aktualizacja kontentu strony to rekompilacja
całości, nonsens...

--
Marek

Mirek
Guest

Tue Jan 24, 2023 9:54 pm   



On 24.01.2023 21:20, Atlantis wrote:

Quote:
Mamy więc dwie prawdopodobne możliwości:
- Serwer wiesza się na próbie dostania pobrania pliku
- Serwer wiesza się na próbie wysłania danych

No to wyprintuj tą stronę, będzie wiadomo że ją prawidłowo czyta z tablicy.


Quote:
To drugie wydaje się trochę bardziej prawdopodobne biorąc pod uwagę
fakt, że awaria wykrzacza całą komunikacje sieciową, ale nie powoduje
zawieszenia schedulera RTOS-a.

No coś tam mówiłeś, że nie odpowiada na pingi. A który wątek odpowiada

na pingi?
A pingi z większymi pakietami chodzą?

A w ogóle to masz tam jeszcze coś, co może wysyłać dane? Może jakiś
netcat udp-sender albo coś?

--
Mirek.

Grzegorz Niemirowski
Guest

Tue Jan 24, 2023 10:59 pm   



Marek <fake_at_fakeemail.com> napisał(a):
Quote:
Ło matko, a w Harmony też tak jest? Nie zrobili jeszcze w "normalnego" httpd serwującego pliki z fatfs + handlery
cgi-bin? Przecież jakakolwiek aktualizacja kontentu strony to rekompilacja całości, nonsens...

Nie zawsze masz jakąś pamięć poza Flashem wewnątrz uC.

--
Grzegorz Niemirowski
https://www.grzegorz.net/

Grzegorz Niemirowski
Guest

Tue Jan 24, 2023 11:02 pm   



Marek <fake_at_fakeemail.com> napisał(a):
Quote:
Nie pojmuję co Ty pokazujesz. IwIP jest aż tak niedopracowany/niestabilny czy tylko trudny w poprawnej implementacji
przy pierwszym podejściu??
Myślałem, że to pewna i dobra alternatywa np. dla stosów mchp (MLA/Harmony) a tu takie kwiatki?

Jest dopracowany. To dojrzały projekt, stosowany masowo. Sam też używam. Stawiam na nieumiejętność implementacji.

--
Grzegorz Niemirowski
https://www.grzegorz.net/

Atlantis
Guest

Wed Jan 25, 2023 12:14 am   



On 24.01.2023 21:21, Atlantis wrote:

Quote:
Taki jest plan. Problemem jest mocno ograniczona ilość czasu na
debugowanie tego wieczorami. Wink

Ok, dodałem jeszcze kilka printf-ów w kodzie.
Udało mi się na razie ustalić jeszcze tyle, że:
1. Płytka odbiera i parsuje request GET, wyciągając z niego ścieżkę
dostępu do żądanego pliku.
2. Funkcje fs_open() jest wołana z tą ścieżką jako parametrem.
3. Plik jest znajdowany, ponieważ funkcja zwraca status "ok".
4. Wywoływana jest jeszcze funkcja fs_close.

Atlantis
Guest

Wed Jan 25, 2023 12:47 am   



On 24.01.2023 21:48, Marek wrote:

Quote:
Ło matko, a w Harmony też tak jest? Nie zrobili jeszcze w "normalnego"
httpd serwującego pliki z fatfs + handlery cgi-bin? Przecież jakakolwiek
aktualizacja kontentu strony to rekompilacja całości, nonsens...

Jeszcze nie zagłębiałem się w ten temat za bardzo. Na razie jedynie
włączyłem serwer HTTP na płytce z PIC32MZ i zobaczyłem, że działa (to
znaczy zwraca 404).

Jednak z tego co widzę w opcjach to działa to w ten sposób, że możesz po
prostu wskazać katalog w systemie plików, w którym będzie trzymana nasza
strona.

Jeśli chodzi o system plików, to Harmony czerpie z uniksowych konwencji.
Chociaż FAT obsługiwany jest za pomocą FatFS-a, to framework dostarcza
własne wrappery. W efekcie np. karta SD jest widoczna jako /dev/mmcblk1
a dysk USB jako /dev/sda1. Montujesz je również do katalogu, np.
/mnt/myDrive0.
Harmony zawiera także biblioteki do obsługi innych nośników, np. pamięci
Flash na SPI czy NVM we wbudowanym flashu. Poza FAT-em są też jakieś
dodatkowe systemy plików, bodajże littlefs i jakiś system od Microchipa,
ale im się jeszcze nie przyglądałem.

Co do aktualizacji zawartości strony to z tego co widzę można to robić
przez sieć, np. za pomocą FTP albo HTTP.

Co do lwIP to odnoszę wrażenie, że ten ich serwer HTTPD jest traktowany
trochę po macoszemu i stanowi raczej dodatek. W Internecie trudno nawet
o jakieś materiały albo instrukcje. Z tego co widzę frameworki do
obsługi ESP8266/ESP32 dostarczają własny serwer HTTP, pomimo korzystania
ze stosu lwIP.

Atlantis
Guest

Wed Jan 25, 2023 9:46 am   



Hmm... Szukając rozwiązania trafiłem jeszcze na coś takiego:

https://community.st.com/s/question/0D53W00001iI95pSAC/http-request-to-stm32-lwip-results-that-ping-stops-working

"The mentioned bug is confirmed.
It is due to Hardware limitation, in fact the Ethernet MAC does not have
access to the Flash (in STM32F407 device) to download http's data."

Tłumaczyłoby to dlaczego problem dotyka tylko nowej wersji płytki,
wyposażonej w STM32F407, podczas gdy stara wersja na STM32F107 działa
poprawnie. Przyznaję, że brzmi to dziwnie. Ethernet nie jest zdolny do
transferów DMA danych z flasha? Tylko czy przypadkiem te strony i tak
nie powinny być przechowywane w jakiejś skompresowanej formie, a przed
wysłaniem trafiać do bufora w RAM-ie?

Jest też sugerowane rozwiązanie:

"The solution is to move HTTP files to SRAM in by removing the const. (...)
In httpserver.c file (lines 32, 35, 42) remove the keyword const ."

Tylko tutaj nie pasuje ani nazwa pliku (httpd.c zamiast httpserver.c)
ani numery linii (u mnie w tej części wypadają jeszcze komentarze z
opisem zawartości pliku).

Marek
Guest

Wed Jan 25, 2023 10:09 am   



On Tue, 24 Jan 2023 22:59:07 +0100, "Grzegorz Niemirowski"
<grzegorz_at_grzegorz.net> wrote:
Quote:
Nie zawsze masz jakąś pamięć poza Flashem wewnątrz uC.

Wiem, ale nie rozważam takich opcji jako mało użyteczne.

--
Marek

Grzegorz Niemirowski
Guest

Wed Jan 25, 2023 10:35 pm   



Marek <fake_at_fakeemail.com> napisał(a):
Quote:
Wiem, ale nie rozważam takich opcji jako mało użyteczne.

Wszystko zależy od potrzeb. Realizowałem takie projekty i tam akurat potrzeba rekompilacji przy zmianie w kodzie strony
nie była problemem.

--
Grzegorz Niemirowski
https://www.grzegorz.net/

Grzegorz Niemirowski
Guest

Wed Jan 25, 2023 10:57 pm   



Atlantis <marekw1986NOSPAM_at_wp.pl> napisał(a):
Quote:
Ethernet nie jest zdolny do transferów DMA danych z flasha?

Używałem FreeRTOS i socketów na F407, więc nie spotkałem się z tym problemem, ale zerkam sobie na notę aplikacyjną
AN4031. Zobacz obrazek 7. O ile dobrze czytam matrycę, to Ethernet ma dostęp do SRAM1, SRAM2 i FSMC. Do Flasha nie. Dla
szybszego dostępu zrzut ekranu: https://i.imgur.com/nG3dGxS.png

Quote:
Tylko czy przypadkiem te strony i tak nie powinny być przechowywane w jakiejś skompresowanej formie, a przed wysłaniem
trafiać do bufora w RAM-ie?

Nie wiem czy zawsze powinny, ale ogólnie jest to dobry pomysł. Nawet napisałem sobie własną wersję programu makefsdata,
która wszystkie pliki gzipuje a dopiero potem robi z nich tablice w kodzie C. W ten sposób mój serwer od razu serwuje
skompresowane pliki. Przeglądarki je sobie rozkompresowują.

Quote:
Jest też sugerowane rozwiązanie:
"The solution is to move HTTP files to SRAM in by removing the const.
(...) In httpserver.c file (lines 32, 35, 42) remove the keyword const ."
Tylko tutaj nie pasuje ani nazwa pliku (httpd.c zamiast httpserver.c) ani numery linii (u mnie w tej części wypadają
jeszcze komentarze z opisem zawartości pliku).

Stawiam na roztargnienie postującego, zapewne chodziło mu o fsdata.c.

--
Grzegorz Niemirowski
https://www.grzegorz.net/

Atlantis
Guest

Thu Jan 26, 2023 12:06 pm   



On 25.01.2023 22:35, Grzegorz Niemirowski wrote:

Quote:
Wszystko zależy od potrzeb. Realizowałem takie projekty i tam akurat
potrzeba rekompilacji przy zmianie w kodzie strony nie była problemem.

Swoją drogą przyjrzałem się temu HTTPD dołączonemu do lwIP z STM32CubeMX
(na działającej płytce z STM32F107) i bynajmniej nie jestem pod
wrażeniem. Stworzony dekadę temu HTTP2 od Microchipa wygrywa z nim
zdecydowanie. Sposób obsługi statycznych stron wygląda podobnie
(generujemy plik zawierający tablice C z danymi stron) ale jednocześnie
znacznie lepiej zrealizowano komunikację pomiędzy przeglądarką i MCU.

W HTTP2 dużo lepiej wyglądała kwestia przekazywania parametrów w
requestach GET i POST. Mogłem też dośc wygodnie tworzyć sobie adresy do
dynamicznego pobierania informacji o stanie aplikacji w formie JSON-a,
dzięki czemu interfejs w przeglądarce mógł działać jak interaktywna
aplikacja.

HTTPD właściwie narzuca przestarzałe podejście z przeładowywaniem stron
i przekierowywaniem do kolejnego adresu po wywołaniu cgi. Możliwość
przekazywania parametrów przez GET też jest dość mocno ograniczona. Może
da się to zrobić lepiej, ale raczej nie w sposób oczywisty i najlepiej
udokumentowany w internecie.

Już dużo lepiej wygląda serwer na ESP32/ESP8266. Tam co prawda na
starcie trzeba było trochę pokombinować, np. ręcznie napisać funkcje do
odczytywania i odsyłania statycznych stron z FS-a i osobne do tych
dynamicznie generowanych (np. odsyłających JSON-a) ale za to już samą
stronę łatwo się pisało i przenosiło. Serwer właściwie wymuszał
stosowanie AJAXa. Będę musiał zobaczyć czy nie jest gdzieś dostęopny i
czy przypadkiem nie dałoby się go zaimplementować w projekcie na STM32...

Goto page Previous  1, 2

elektroda NewsGroups Forum Index - Elektronika Polska - FreeRTOS + lwIP + HTTPD - zawieszenie po wejściu na stronę

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map