-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.chmurka.net!.POSTED.aags138.neoplu
s.adsl.tpnet.pl!not-for-mail
From: "J.F" <j...@p...onet.pl>
Newsgroups: pl.misc.elektronika
Subject: Re: lwIP - odbieranie danych przez TCP
Date: Mon, 10 Oct 2022 10:36:22 +0200
Organization: news.chmurka.net
Message-ID: <m...@4...net>
References: <632f2939$0$455$65785112@news.neostrada.pl>
<6339401f$0$448$65785112@news.neostrada.pl>
<1...@4...net>
<634072a4$0$474$65785112@news.neostrada.pl>
NNTP-Posting-Host: aags138.neoplus.adsl.tpnet.pl
Mime-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit
Injection-Info: news.chmurka.net; posting-account="jfoxwr";
posting-host="aags138.neoplus.adsl.tpnet.pl:83.4.174.138";
logging-data="20605";
mail-complaints-to="abuse-news.(at).chmurka.net"
User-Agent: 40tude_Dialog/2.0.15.1
Xref: news-archive.icm.edu.pl pl.misc.elektronika:774740
[ ukryj nagłówki ]On Fri, 7 Oct 2022 20:40:36 +0200, Atlantis wrote:
> On 6.10.2022 17:18, J.F wrote:
>> Ciekawe co na to serwer - nie moze ci wyslac danych odpowiednio
>> szybko, buforowac tez nie moze w nieskonczonosc - powinien gdzies u
>> siebie przeskakiwac na aktualne dane.
>
> I wszystko wskazuje na to, że tak to właśnie działa. Przynajmniej
> odnoszę wrażenie, że dźwięki które słyszę z przerwami nie są kolejnymi
> fragmentami tego samego strumienia audio, ale raczej "okienkami" które
> aktualnie udaje się odebrać.
>
>> W przypadku radia moze byc inaczej, jesli nie ma u siebie bufora
>> danych. No ale nawet wtedy te ~20kB/s szybko uzbiera, a Ty nie
>> nadążasz odebrac.
>
> Tak. Pytanie tylko dlaczego nie nadążam tego odebrać. Można było
> teoretyzować o niskiej przepustowości pamięci SPI RAM (co i tak było
> wątpliwe, bo 18 MHz to naprawdę szybka transmisja) ale ta teoria padła w
> momencie, gdy identyczny problem udało się stwierdzić także w przypadku
> zastosowania bufora cyklicznego w RAM-ie.
>
>> Z grubsza mozliwe, ale patrz nizej.
>> A moze przerwania sa blokowane ?
>
> Jakie przerwania? W moim kodzie w ogóle nie używam przerwań związanych z
> Ethernetem. Używam gotowych sterowników dostarczanych przez producenta
> mikrokontrolera oraz gotowego stosu (lwIP). W rozsądnym projekcie
> użytkownik nie powinien w ogóle przejmować się przerwaniami - powinny
> one w tle ładować dane do jakiegoś FIFO. Zresztą nigdzie w dokumentacji
> nie znalazłem ani jednej wzmianki o przerwaniach.
> O ile informacje na jakie udało mi się trafić w Internecie są poprawne,
> to procedura odbioru jest następująca:
> - Stos wywołuje zarejestrowana wcześniej funkcję obsługi callbacku
> odbiorczego.
> - Do tej funkcji przekazywany jest wskaźnik na struct pbuf. Struktura
> zawiera dynamicznie alokowany bufor na payload. Może też zawierać
> wskaźniki do kolejnych struktur tego samego typu.
Zeby wywolac funkcje i przekazac bufor, to musi wiedziec, ze jakies
dane przyszly. Czyli przerwanie.
A jak funkcja dlugo obsluguje ... moze przerwania sa wyłączone, dopóki
nie skonczy.
> - Z jednej lub kilku struktur trzeba pobrać dane i gdzieś je zapisać.
> - Jeśli już skończyliśmy tę operację, wywołujemy pbuf_free() aby zwolnić
> pamięć oraz tcp_recved() aby zwiększyć rozmiar okna (poinformować
> serwer, że może przesłać więcej).
>
> U mnie może się zdarzyć sytuacja, że otrzymanych danych będzie więcej
> niż miejsca w buforze. Wtedy nie mogę ich odebrać od razu - muszę się z
> tym wstrzymać do czasu, aż dekoder MP3 wyjmie z bufora odpowiednią ilość
> danych. Wtedy odbiór tej konkretnej paczki jest opóźniony i odbywa się w
> pętli głównej.
I tu masz pare ryzyk:
a) przy niewielkim buforze opoznienie w wyslaniu potwierdzenia moze
skutkowac za duzym spowolnieniem transmisji,
b) bufory ci sie przepelniają, bo parametr TCP_window jest za duzy,
i serwer na poczatku przysyla ci za duzo danych,
> W żadnym miejscu nie mam do czynienia z przerwaniami.
Dekoder karmiony w petli glownej?
A moze tam sie zdarzaja duze opoznienia na inne akcje ?
>> Troche wątpie. Przy zgubieniu pakietu timeout sie wlacza, i to mogą
>> byc grube sekundy. Chyba bys nie uzyskal 5-11 kB/s.
>
> Kiedy transmisja zaczyna mulić to nie jest 5-11 kB/s, a 0-2kB/s.
A to juz moze byc, szczegolnie jesli widzisz, ze dociera kilka
pakietow, a potem dluga przerwa ..
>> Raczej bym sie spodziewal problemu w jakims opoznieniu w wyslaniu
>> potwierdzenia. Ale zeby az tak to SPI zwalniało? 18MHz wydaje sie
>> sporo ... a ogladales oscyloskopem? Albo czy mierzyles
>> przepustowosc/czas zapisu pakietu?
>
> Nie, bo wydawało mi się to nie mieć sensu. Udało mi się ustalić, że wina
> nie leży po stronie pamięci SPI. Przemawiają za tym dwa argumenty:
> - Pamięć SPI doskonale sprawdza się przy buforowaniu streama z karty SD.
> - Ten sam problem występuje, jeśli dane przychodzące przez TCP próbuję
> zapisywać do bufora cyklicznego ulokowanego w zwykłym RAM-ie.
To drugie w zasadzie wyjasnia, ale oscyloskop i tak moze pomoc.
Tu nawet nie oscyloskop, ale analizator logiczny za kilkadziesiąt zl.
>> A w ogole ... masz tam jakies zabezpieczenie kolejnosci w tej
>> bibliotece? Bo powiedzmy przychodzą pakiety nr 1, 2, 3, a nr 4 nie
>> przychodzi. Ale przychodzi nr 5, 6, 7 ... i co wtedy - nie dostaniesz
>> callbacka z nr 5, a bufory 5, 6, 7 zostaną skasowane ?
>
> Wydaje mi się, że przecież chyba TCP ogarnia kwestię pakietów
> przychodzących w złej kolejności i użytkownik nie musi się przejmować tą
> kwestią podczas pisania aplikacji.
TCP tak, pytanie, czy masz pelne TCP ..
> Ten problem pojawia się dopiero w
> przypadku zastosowania UDP.
> Tak czy inaczej lwIP ma opcję związana właśnie z tą kwestią. Jeśli
> dobrze rozumiem to można wybrać jak ma się zachować stos. W przypadku
> zgubienia któregoś z pakietów w sekwencji można albo trzymać nadmiarowe
> do momentu otrzymania brakującego, albo poprosić jeszcze raz o wysłanie
> całej sekwencji licząc, że tym razem przyjdą wszystkie i po kolei.
> Próbowałem obydwu ustawień.
Tak ogolnie TCP dziala tak, ze jak znikl jeden pakiet, to trzeba go
retransmitowac. A po nim wysylane sa ponownie wszystkie nastepne.
Po otrzymaniu pakietu "niekolejnego", stos odbiorczy byc moze moze
chwile poczekac - moze akurat "kolejny" przyjdzie, a nastepny juz
czeka w buforze.
Przy czym raczej nie podejrzewam, zeby niekolejne byly twoim
problemem.
> Swoją drogą, czy ktoś może mi wyjaśnić w jaki sposób skonfigurować lwIP,
> żeby mieć dostatecznie duży bufor odbiorczy? W stosie od Microchipa po
> prostu ustawiało się wielkość bufora nadawczego i odbiorczego dla
> konkretnego gniazda. Tutaj cała masa opcji, które nic mi wprost nie mówią...
>
> https://github.com/marekw1986/InternetRadioSTM32/blo
b/main/code/LWIP/Target/lwipopts.h
Nie znam, nie poradze.
J.
Najnowsze wątki z tej grupy
- Gniazdo + wtyk
- Aliexpress zaczął oszukiwać na bezczelnego.
- OpenPnP
- taka skrzynka do kablowki
- e-paper
- 60 mA dużo czy spoko?
- Dziwne zachowanie magistrali adresowej w 8085
- Współczesne mierniki zniekształceń nieliniowych THD audio, produkują jakieś?
- Jaki silikon lub może klej?
- Smar do video
- Litowe baterie AA Li/FeS2 a alkaliczne
- "ogrodowa linia napowietrzna"
- jaki zasilacz laboratoryjny
- jaki zasilacz laboratoryjny
- Puszka w ziemię
Najnowsze wątki
- 2025-02-25 Tak wiem.... To oczywiste ale jak oni dzisiaj dziadują na materiale
- 2025-02-25 rozliczenia policji
- 2025-02-25 Echhhhhh. Marzy mi się SWAP Audi A2 z 1.8 T ;-)
- 2025-02-25 Warszawa => Analityk Biznesowo-Systemowy <=
- 2025-02-25 Warszawa => SQL Developer <=
- 2025-02-25 Zbigniew Ziobro śmie sugerować "niedostatki niezawisłości" sędzi (wątpliwości co do bezstronności)
- 2025-02-25 Kraków => DevOps Engineer (Junior/Regular) <=
- 2025-02-25 Kraków => Front-end Developer <=
- 2025-02-25 Szpital
- 2025-02-24 Gniazdo + wtyk
- 2025-02-24 Dyrektor Toyoty miał rację. Elektryki to ślepa uliczka
- 2025-02-24 Białystok => System Architect (Java background) <=
- 2025-02-24 Białystok => System Architect (background deweloperski w Java) <=
- 2025-02-24 Białystok => Solution Architect (Java background) <=
- 2025-02-24 Warszawa => Data Engineer (Tech Leader) <=