eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikalwIP - odbieranie danych przez TCP › Re: lwIP - odbieranie danych przez TCP
  • 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

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: