- 
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.samoylyk.n
et!aioe.org!NZ87pNe1TKxNDknVl4tZhw.user.46.165.242.91.POSTED!not-for-mail
From: a...@m...uni.wroc.pl
Newsgroups: pl.misc.elektronika
Subject: Re: lwIP - odbieranie danych przez TCP
Date: Mon, 26 Sep 2022 03:11:57 -0000 (UTC)
Organization: Aioe.org NNTP Server
Message-ID: <tgr59t$a52$1@gioia.aioe.org>
References: <632f2939$0$455$65785112@news.neostrada.pl>
Injection-Info: gioia.aioe.org; logging-data="10402";
posting-host="NZ87pNe1TKxNDknVl4tZhw.user.gioia.aioe.org";
mail-complaints-to="a...@a...org";
User-Agent: tin/2.4.5-20201224 ("Glen Albyn") (Linux/5.10.0-9-amd64 (x86_64))
Cancel-Lock: sha1:yuudZs3X5DUoqGD2fovXfWlkN3U=
X-Notice: Filtered by postfilter v. 0.9.2
Xref: news-archive.icm.edu.pl pl.misc.elektronika:774567
[ ukryj nagłówki ]Atlantis <m...@w...pl> wrote:
> Chcia?em ostatnio popchn?? troch? do przodu jeden ze swoich poprzednich
> projekt?w - sprz?towe radio internetowe o kt?rym pisa?em ju? wcze?niej,
> tylko tym razem w wersji ze zaktualizowan? cz??ci? hardware'ow?.
> Poprzednia wersja by?a tworzona na PIC32, teraz powoli chcia?em
> przenie?? go na STM32.
>
> Wi?kszo?? softu w?a?ciwie ju? przenios?em, teraz zosta?o najwa?niejsze -
> przeportowanie samej aplikacji odpowiedzialnej za odtwarzanie streamu z
> Internetu. W przypadku biblioteki MLA na PIC32 by?o to relatywnie
> proste. Socket sieciowy dysponuje buforem FIFO o zdefiniowanej
> pojemno?ci - do niego trafiaj? dane przychodz?ce z serwera. Dane te
> pobieram i ?aduj? do bufora audio. Robi? to jednak dopiero wtedy, gdy
> sterownik uk?adu VS1003 stwierdzi, ?e dane s? potrzebne.
>
> W przypadku PIC32 by?o to relatywnie proste. Mia?em kilka funkcji:
> - TCPIsGetReady() - zwraca?a liczb? bajt?w w buforze
> - TCPGetArray() - funkcja zapisywa?a pod podany adres w pami?ci
> okre?lon? maksymaln? liczb? bajt?w z bufora. Zwraca?a liczb? bajt?w,
> kt?re w rzeczywisto?ci uda?o si? pobra?.
>
> Sprawa by?a prosta - wystarczy?o albo pobra? wszystkie dost?pne dane,
> ale (je?li by?o ich za du?o) tylko tyle, ?eby wype?ni? dost?pne miejsce.
> W tym drugim przypadku nadwy?ka pozostawa?a w buforze gniazda sieciowego
> i by?a sukcesywnie uzupe?niania o kolejne przychodz?ce dane, kt?re
> mog?em pobra? wtedy, gdy zn?w by?y potrzebne.
>
> Widz?, ?e w przypadku lwIP (RAW API) sprawa nie jest ju? tak prosta.
> Zamiast tego musz? zarejestrowa? callback, kt?ry jest wo?any za ka?dym
> razem, gdy przyjd? nowe dane. Callback otrzymuje w jednym z parametr?w
> wska?nik do struct ptr, w kt?rej mam m.in.
> - void* paylod
> - int len
> - int tot_len
> - struct pbuf* next
>
> Istnieje wi?c mo?liwo??, ?e wszystko co b?d? musia? zrobi? to pobranie
> skopiowanie len bajt?w spod adresu na kt?ry wskazuje payload. Istnieje
> jednak szansa, ?e danych jest wi?cej - wtedy tot_len > len i kolejnej
> porcji danych trzeba szuka? w kolejnej strukturze, na kt?r? wskazuje
> wska?nik next.
>
> Je?li ju? zako?czymy odczytywa? dane, trzeba zawo?a? tcp_recved
> informuj?c stos, ?e czekamy na kolejn? paczk?. Tu jeszcze jest wszystko
> jasne.
>
> Co jednak w sytuacji, gdy powiedzmy do zako?czenia wype?niania bufora
> pozosta?o mi 100 bajt?w, a w otrzymanej struct pbuf mam ich 500? Na
> PIC32 po prostu pobiera?em 100, a reszta czeka?a na swoj? kolej. W jaki
> spos?b uzyskuje si? podobny efekt na lwIP?
Nie uzywalem lwIP ale zerknelem do dokumentacji.
Z dokumantacji lwIP wychodzi ze to ma byc "zero copy". Czyli trzymasz
buforki tak dlugo jak sa potrzebne, a potem zwalniasz. Jak cos
zostalo to sobie zapamietujesz polozenie bufora i uzywasz przy kolejnym
callbacku. tcp_recved _nie_ zwalnia buforow, wyglada ze musisz to
robic oddzielnie przez pbuf_free.
--
Waldek Hebisch
 
Następne wpisy z tego wątku
- 26.09.22 09:09 Atlantis
 - 26.09.22 17:33 Atlantis
 - 27.09.22 15:35 J.F
 - 27.09.22 17:12 Mateusz Viste
 - 27.09.22 17:22 Cezar
 - 28.09.22 09:30 Atlantis
 - 28.09.22 09:35 Atlantis
 - 28.09.22 10:52 Mateusz Viste
 - 28.09.22 13:06 Atlantis
 - 28.09.22 18:39 J.F
 - 29.09.22 01:26 Atlantis
 - 29.09.22 10:58 Cezar
 - 29.09.22 16:48 Atlantis
 - 29.09.22 17:05 Atlantis
 - 30.09.22 09:49 J.F
 
Najnowsze wątki z tej grupy
- William Shockley, co-inventor of the transistor
 - Gazowy kocioł CO regulacja cyklingu i regulacja pogodowa
 - Zamek elektroniczny
 - szablon do pasty DIY
 - Głośnik potrzebny
 - Silikonowy przewód ekranowany
 - Wtyk bananowy ekranowany
 - Co może być gorsze od pożaru elektryka?
 - daltonizm
 - Mały Linux
 - Superkondensator. Czy to się uda?
 - Stare filmy o technice
 - Zasilanie własnych konstrukcji przez PoE
 - Jak działa domofon?
 - Co oni mierzą miernikiem
 
Najnowsze wątki
- 2025-11-03 Gwarancja na używane AUTO. Czy dziś WARTO?
 - 2025-11-03 Znowu jakiś goooownoprawnik uważający się za KONSTYTUCJONALISTĘ
 - 2025-11-03 ABW już nie blokuje RT.com?
 - 2025-11-03 Czy ROZDANIE KPO śród swoich i nie swoich spowodowało KORZYŚĆ POLITYCZNĄ?
 - 2025-11-03 Warszawa => Starszy Konsultant SAP - obszar PP <=
 - 2025-11-03 Warszawa => International Freight Forwarder <=
 - 2025-11-03 Białystok => Programista React ze znajomością C++ <=
 - 2025-11-03 Warszawa => Generative AI Engineer <=
 - 2025-11-03 Warszawa => Gen AI Engineer <=
 - 2025-11-03 Białystok => Programista Delphi <=
 - 2025-11-03 Warszawa => Spedytor Międzynarodowy <=
 - 2025-11-02 totalna kontrola podatników?
 - 2025-11-02 Trzymacie pieniądze w bankach?
 - 2025-11-02 Bo sędzia prokuratorowi nie odmawia "niezawiśle" [rzepa: wnioski o areszt]
 - 2025-11-02 Michał Wawrykiewicz: "Prokuratura barszczyka bierze pod uwagę również INTENCJE uchwalaczy prawa
 




Elektromobilność dojrzewa. Auta elektryczne kupujemy z rozsądku, nie dla idei