-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!fu-berlin.de!2.eu.feeder.erje.net!feede
r.erje.net!weretis.net!feeder8.news.weretis.net!news.mixmin.net!npeer.as286.net
!npeer-ng0.as286.net!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.ams4
!peer.am4.highwinds-media.com!news.highwinds-media.com!newsfeed.neostrada.pl!un
t-exc-02.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POS
TED!not-for-mail
Date: Sun, 22 Jan 2023 13:36:32 +0100
MIME-Version: 1.0
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
Thunderbird/102.6.0
Newsgroups: pl.misc.elektronika
Content-Language: en-US, pl
From: Atlantis <m...@w...pl>
Subject: FreeRTOS + lwIP + HTTPD - zawieszenie po wejściu na stronę
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Lines: 71
Message-ID: <63cd2dd0$0$19617$65785112@news.neostrada.pl>
Organization: Telekomunikacja Polska
NNTP-Posting-Host: 83.30.162.90
X-Trace: 1674390992 unt-rea-a-02.news.neostrada.pl 19617 83.30.162.90:41352
X-Complaints-To: a...@n...neostrada.pl
X-Received-Bytes: 4984
Xref: news-archive.icm.edu.pl pl.misc.elektronika:777354
[ ukryj nagłówki ]Po uporaniu się z (banalnym jak się okazało) problemem z Ethernetem na
płytce z PIC32MZ zabrałem się za podobny układ na STM32F407. Tutaj znów
trafiłem na dziwny problem, tym razem jednak prawie na 100% software'owy.
Sytuacja wygląda następująco: jakiś czas temu zaprojektowałem płytkę pod
proste radio internetowe na STM32F107 + DP83848 + VS1003. Płytka działa
idealnie. Na chwilę obecną mam na niej FreeRTOS + lwIP + FatFS + własną
aplikację klienta TCP do odbierania streamów z Internetu. Jest też
serwer HTTPD (ten z pakietu lwIP, włączony przez kliknięcie odpowiedniej
opcji w CubeMX). Serwer na chwilę obecną udostępnia jedynie kilka
statycznych stron, w wolnej chwili będe musiał dopisać funkcje CGI.
Na chwilę obecną wszystko to działa poprawnie i stabilnie, jednak płytka
dość szybko okazała się być zbyt ciasna - w tej chwili wykorzystanie
pamięci RAM dochodzi do 90% i chociaż jeszcze nie powoduje to problemów
ze stabilnością, postanowiłem przenieść się na coś większego.
W jeden weekend powstała więc kolejna rewizja, z STM32F407.
Przeniesienie projektu nie powodowało większych problemów. Konfigurację
pinów i peryferiów wyklikałem na nowo w CubeMX i wygenerowałem kod.
Ethernet ruszył z miejsca. Potem zacząłem uruchamiać kolejne
funkcjonalności i przenosić swój kod. Wszystko działało poprawnie.
Do momentu, aż nie postanowiłem odpalić także serwera HTTPD. Kliknąłem
opcję w CubeMX, wygenerowałem kod, dodałem plik fsdata.c (obraz
udostępnianych stron), dodałem wywołanie httpd_init(). Wszystko tak jak
w starym projekcie.
Po wgraniu skompilowanego kodu na płytkę okazało się, że serwer nie
tylko nie chce działać, ale także zawiesza całą resztą. W momencie próby
wejścia na stronę oprogramowanie przestaje reagować - nie wykonuje się
mój kod a urządzenie przestaje być widoczne w sieci i nie odpowiada na
pingi. Jeśli tylko zakomentuję wywołanie httpd_init(), problem znika.
Przyjrzałem się bliżej problemowi, podpiąłem debugger żeby zobaczyć, czy
przypadkiem program nie utyka w jakiejś nieskończonej pętli, jednak
wszystko wskazywało na to, że FreeRTOS nadal działa.
Spróbowałem więc innego podejścia i dodałem w różnych taskach cyklicznie
wywoływane printy.
W tej chwili mam dwa taski utworzone przeze mnie:
MainTask - priorytet "Normal", tam odbywają się wszystkie operacje
związane z moją aplikacją.
IoTask - priorytet "Idle", jak sama nazwa wskazuje przeznaczony do
obsługi interfejsu użytkownika. W tej chwili jest tam kilka operacji, a
na końcu każdego przebiegu pętli wywoływane jest osDelay(20).
Do tego w tle swoje własne taski tworzy m.in. lwIP oraz sterownik USB.
Okazało się, że w momencie podjęcia próby wejścia na stronę przestają
wykonywać się printy z MainTask, ale te z IoTask nadal są wykonywane.
Pierwsza myśl jaka przyszła mi do głowy to problemy ze stosem, jednak:
- TOTAL_HEAP_SIZE w FreeRTOS/Config parameters w jest ustawiony na 20kB.
W starym projekcie było trochę ponad 14kB.
- Stosy tasków mają rozmiary takie jak w projekcie z działającej płytki,
wliczając w to rozmiary stosów bibliotek, które mogę ustawić w ich
konfiguracji.
- Próbowałem manipulować rozmiarami stosów i TOTAL_HEAP_SIZE, w pewnym
momencie zwiększając je dwukrotnie. Nie pomogło.
- Nie pomogły też eksperymenty z różnymi opcjami Memory Management
scheme. W tej chwili jest domyślna (heap_4) - ta sama co w starej wersji
projektu.
- Próbowałem też podnieść rozmiar MEM_SIZE w ustawieniach lwIP z
domyślnych 1600 bajtów do 10 kB. Nie pomogło.
Przeglądałem konfiguracje starego i nowego projektu, ale żadna istotna
różnica nie rzuca mi się w oczy. Pewnie chodzi o jakiś drobiazg, którego
nie potrafię zauważyć. Jest tutaj ktoś, kto na podstawie przedstawionych
objawów mógłby wskazać potencjalne źródło problemu?
Następne wpisy z tego wątku
- 22.01.23 17:16 Mirek
- 22.01.23 20:13 Atlantis
- 23.01.23 19:46 Mirek
- 23.01.23 23:45 Atlantis
- 24.01.23 00:00 Adam Górski
- 24.01.23 10:11 Marek
- 24.01.23 11:07 Atlantis
- 24.01.23 12:23 Adam Górski
- 24.01.23 20:15 Marek
- 24.01.23 20:16 Marek
- 24.01.23 20:34 Mirek
- 24.01.23 21:05 Atlantis
- 24.01.23 21:20 Atlantis
- 24.01.23 21:21 Atlantis
- 24.01.23 21:48 Marek
Najnowsze wątki z tej grupy
- Moduł BT BLE 5.0
- Pomiar amplitudy w zegarku mechanicznym
- ale zawziętość i cierpliwość
- Chiński elektrolizer tester wody
- Dzisiaj Bentlejem czyli przybieżeli sześciu Króli do Rysia na kasie
- ciekawy układ magnetofonu
- Mikroskop 3D
- Jak być bezpiecznym z Li-Ion?
- Szukam monitora HDMI ok. 4"
- Obcinaczki z łapaczem
- termostat do lodowki
- SEP 1 kV E
- Aku LiPo źródło dostaw - ktoś poleci ?
- starość nie radość
- Ataki hakerskie
Najnowsze wątki
- 2024-12-30 Moduł BT BLE 5.0
- 2024-12-30 Łódź => Application Security Engineer <=
- 2024-12-30 Lublin => Inżynier bezpieczeństwa aplikacji <=
- 2024-12-30 Nowy Outlander PHEV w PL
- 2024-12-30 Warszawa => Key Account Manager <=
- 2024-12-30 Katowice => Key Account Manager (ERP) <=
- 2024-12-28 Śmiechu KOOOOOOPA ;-)
- 2024-12-29 Pomiar amplitudy w zegarku mechanicznym
- 2024-12-28 Antyradar
- 2024-12-28 Deweloper przegral w sadzie musi zwrócic pieniądze Posypia sie kolejne pozwy?
- 2024-12-28 Warszawa => Full Stack .Net Engineer <=
- 2024-12-28 Warszawa => Sales Assistant <=
- 2024-12-28 Warszawa => Programista Full Stack .Net <=
- 2024-12-28 Warszawa => Full Stack web developer (obszar .Net Core, Angular6+) <=
- 2024-12-28 Katowice => Head of Virtualization Platform Management and Operating S