eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikalwIP - odbieranie danych przez TCPRe: lwIP - odbieranie danych przez TCP
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.man.lodz.pl!newsfeed.pionier.net.p
    l!2.eu.feeder.erje.net!feeder.erje.net!newsreader4.netcologne.de!news.netcologn
    e.de!peer01.ams1!peer.ams1.xlned.com!news.xlned.com!peer02.ams4!peer.am4.highwi
    nds-media.com!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-02.news.ne
    ostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
    Date: Wed, 5 Oct 2022 17:23:44 +0200
    MIME-Version: 1.0
    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
    Thunderbird/102.3.0
    Subject: Re: lwIP - odbieranie danych przez TCP
    Newsgroups: pl.misc.elektronika
    References: <632f2939$0$455$65785112@news.neostrada.pl>
    Content-Language: en-US, pl
    From: Atlantis <m...@w...pl>
    In-Reply-To: <632f2939$0$455$65785112@news.neostrada.pl>
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    Lines: 52
    Message-ID: <633da180$0$453$65785112@news.neostrada.pl>
    Organization: Telekomunikacja Polska
    NNTP-Posting-Host: 83.27.19.61
    X-Trace: 1664983424 unt-rea-a-02.news.neostrada.pl 453 83.27.19.61:53806
    X-Complaints-To: a...@n...neostrada.pl
    X-Received-Bytes: 3937
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:774677
    [ ukryj nagłówki ]

    Ok, kompletnie nie mam pojęcia co może być powodem takiego zachowania
    projektu. Wyczerpałem już chyba wszystkie pomysły. Na chwilę obecną
    udało mi się sprawdzić następujące kwestie:

    - Dodałem prosty kod do pomiaru ilości bajtów odbieranych w ciągu
    sekundy. Dzięki temu mogłem ustalić, że zaraz po połączeniu z serwerem
    nadającym stream mam transfer około 20 kB/s (co mniej-więcej pasuje do
    bitrate'u 192 kbps), jednak zaraz potem spada on do 1-2 kB i zaczyna się
    "czkawka". Bufor musi się przez dłuższą chwilę napełniać, żeby odtworzyć
    krótki fragment audio.

    - Zakomentowałem wszystkie operacje zapisu odebranych danych do pamięci
    SPI RAM (w razie gdyby faktycznie to ona powodowała problemy). Po prostu
    od razu zwalniam bufor z odebranymi danymi i zgłaszam gotowość do
    odbierania kolejnych. I faktycznie - w tej sytuacji miałem ciągły
    transfer w okolicach 20 kB/s.

    - Już pomyślałem, że winę faktycznie ponosi pamięć SPI, przygotowałem
    więc bufor cykliczny w zwykłej pamięci RAM. Implementacja nie jest może
    idealna, ale sprawdziła się już w innym projekcie (na PIC24). Bufor jest
    co prawda mały - testowałem wariant 4kB i 8kB - ale na wcześniejszych
    wersjach hardware'u tych kilka kB w zupełności wystarczało do płynnego
    odtwarzania. Niestety, po wgraniu tej wersji wrócił problem - prędkość
    dość szybko spada do 1-2 kB.

    - Żeby było ciekawiej zarówno 128kB bufor w pamięci SPI, jak i 8kB bufor
    w zwykłym RAM-ie bez najmniejszego problemu sprawdzają się, gdy karmię
    je danymi z karty SD. Wtedy odtwarzanie działa całkowicie normalnie.

    Podejrzewam, że winę musi ponosić mój własny bład, którego jednak za nic
    nie jestem w stanie namierzyć. Jeśli ktoś ma czas i ochotę żeby rzucić
    okiem, to aktualna wersja jest dotępna na GitHubie:
    https://github.com/marekw1986/InternetRadioSTM32/blo
    b/main/code/Core/Src/vs1003.c

    Kluczowe miejsca:

    Callback obsługujący odbieranie przychodzących danych:
    https://github.com/marekw1986/InternetRadioSTM32/blo
    b/abb4f47bfd4c06ca0d56f6b03b287c5d4a4d9f3f/code/Core
    /Src/vs1003.c#L869

    Miejsce w maszynie stanów, gdzie ładowane są dane do bufora, ale bez
    odtwarzania. Tutaj też realizowany jest opóźniony odbiór tych danych,
    których nie dało się odebrać w callbacku z uwagi na brak miejsca w buforze:
    https://github.com/marekw1986/InternetRadioSTM32/blo
    b/abb4f47bfd4c06ca0d56f6b03b287c5d4a4d9f3f/code/Core
    /Src/vs1003.c#L477

    To samo co powyżej, tylko podczas normalnego odtwarzania:
    https://github.com/marekw1986/InternetRadioSTM32/blo
    b/abb4f47bfd4c06ca0d56f6b03b287c5d4a4d9f3f/code/Core
    /Src/vs1003.c#L509

    Miejsce w którym do bufora cyklicznego ładowane są dane z systemu plików
    (karta SD lub pendrive):
    https://github.com/marekw1986/InternetRadioSTM32/blo
    b/abb4f47bfd4c06ca0d56f6b03b287c5d4a4d9f3f/code/Core
    /Src/vs1003.c#L541


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: