-
Data: 2022-08-10 00:06:33
Temat: Re: Biblioteka MQTT i dziwny kod w C
Od: Atlantis <m...@w...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Sprawa ciągle nie daje mi spokoju, wiec przyjrzałem się jeszcze raz
trochę bliżej działaniu funkcji MQTTReadPacket(). Nadal nie wiem jak
rozwiązać problem, ale sprawa przynajmniej się trochę wyjaśniła.
W uproszczeniu korzystanie z tej funkcji wygląda następująco:
case MQTT_CONNECT_ACK
WORD len = MQTTReadPacket();
if (len >= 2) {
//Tutaj wykonują się główne operacje
//Tylko tutaj może zostać zmieniony stan maszyny stanów
}
break;
Funkcja może być wywołana w tym miejscu wielokrotnie i dalej przejdziemy
dopiero wtedy, gdy zwróci ona dwa lub więcej (wartość ta oznacza liczbę
bajtów zapisanych do bufora). Sama funkcja MQTTReadPacket również
posiada swoją własną maszynę stanów, której wartość jest zapisywana w
lokalnej zmiennej statycznej. Od stanu tej maszyny zależy co funkcja zwróci.
Dopisałem do kodu kilka printf-ów, żeby zobaczyć co się tam dzieje.
Wynik wygląda następująco:
Tutaj wywolujemy MQTTReadPacket() w MQTT_CONNECT_ACK
m_state=0 <- stan po wywołaniu funkcji w MQTT_CONNECT_ACK
len=2 <- wartość zwrócona
Tutaj wywołania w innych częściach programu
m_state=2
m_state=3
m_state=0
Tutaj wywolujemy MQTTReadPacket() w MQTT_CONNECT_ACK
m_state=2 <- stan po wywołaniu funkcji w MQTT_CONNECT_ACK
len=0 <- wartość zwrócona
Tutaj wywolujemy MQTTReadPacket() w MQTT_CONNECT_ACK
m_state=3 <- stan po wywołaniu funkcji w MQTT_CONNECT_ACK
len=0 <- wartość zwrócona
Tutaj wywolujemy MQTTReadPacket() w MQTT_CONNECT_ACK
m_state=0 <- stan po wywołaniu funkcji w MQTT_CONNECT_ACK
len=2 <- wartość zwrócona
Tutaj wywołania w innych częściach programu
m_state=2
m_state=3
m_state=0
Jak widać maszyna stanów przy kolejnych wywołaniach funkcji
MQTTReadPacket() posiada wartości 0, 2 albo 3.
Jeśli funkcja zostanie wywołana gdy jej maszyna będzie w stanie 0, to
zwrócona zostanie wartość 2 - spowoduje to, że będziemy mogli wejść do
ifa i wykonać operacje przewidziane dla MQTT_CONNECT_ACK.
Jeśli jednak w momencie wywołania funkcji jej maszyna stanów będzie
ustawiona na 2 albo 3, zwrócone zostanie zero. If się nie wywoła, a wiec
nie opuścimy MQTT_CONNECT_ACK i wrócimy do tego samego miejsca w
kolejnym obiegu pętli.
Co więcej - wywołania MQTTReadPacket w innych miejscach programu również
biorą udział w tym cyklu.
Kolejny wniosek jest taki, że "magiczne liczby" w switch/case wewnątrz
MQTTReadPacket to tak naprawdę kolejne etapy pracy maszyny stanów tej
funkcji.
Więc główny problem polega teraz na tym, żeby w tym miejscu nie było
zwracane 2, ale 4. Do MQTTBuffer powinny trafiać cztery bajty, a
ostatnio z nich będzie kodem wyniku, przesyłanym w pakiecie CONNACK.
Konieczna będzie dokładniejsza analiza tego, co właściwie ta funkcja
robi. :)
Następne wpisy z tego wątku
- 10.08.22 00:13 JDX
- 10.08.22 09:52 J.F
- 10.08.22 09:59 Grzegorz Niemirowski
- 10.08.22 19:25 Atlantis
- 10.08.22 20:41 heby
- 10.08.22 22:06 Marek
- 10.08.22 22:43 Grzegorz Niemirowski
- 10.08.22 23:26 heby
- 12.08.22 11:25 Piotr Gałka
- 16.08.22 13:20 Atlantis
- 17.08.22 18:58 Mirek
- 18.08.22 11:03 Atlantis
Najnowsze wątki z tej grupy
- Prostownik
- Nowy akumulator Donut Lab
- Pilot do zamka/bramy
- Jaka myjka ultradźwiękowa?
- Retro organizer ale współcześnie
- Skąd diody LED 1,5V?
- Apollo Comm
- PICkit3 mnie pokonał
- LEDy na choinkę zdechły
- Wtopa LED
- Miało być zniesienie abonamentu RTV, a jest podwyżka!!!
- Microsoft, C/C++ na Rust - news
- Pierwsza mapa kosmosu w 102 długościach fal podczerwieni! To początek nowej ery w astronomii
- Rosjanie chwalą się prototypem komputera kwantowego. "Najważniejszy projekt naukowy Rosji"
- zasilacz
Najnowsze wątki
- 2026-01-10 Prostownik
- 2026-01-09 EKOFASZYŚCI DO NAUKI Chiny odpaliły reaktor na tor. Zachód przespał ten moment? - AstroSzort
- 2026-01-09 Sebastian M
- 2026-01-09 weto nowelizacji ustawy o ś.u.d.e. (wz. DSA)
- 2026-01-09 Warszawa => Dynamics 365 Commerce/POS Developer <=
- 2026-01-09 Ładowanie w 13 minut
- 2026-01-08 Umiejętność tankowania na egzaminie z prawa jazdy
- 2026-01-08 Nowy akumulator Donut Lab
- 2026-01-08 Komenda policji nie ma nic wspólnego ze sprawą zgwałcenia policjantki
- 2026-01-08 Pilot do zamka/bramy
- 2026-01-08 Ślad węglowy
- 2026-01-08 Prezydent SZAP/USONA Trump ułaskawił prezydenta Hondurasu Hernandeza skazanego na 45 lat więzienia
- 2026-01-08 Prezydent SZAP/USONA Trump ułaskawił prezydenta Hondurasu Hernandeza skazanego na 45 lat więzienia
- 2026-01-08 Agora zwalnia grupowo, mimo że w firmie pojawiły się zyski, czyli załoga zapracowała na siebie
- 2026-01-08 Agora zwalnia grupowo, mimo że w firmie pojawiły się zyski, czyli załoga zapracowała na siebie




5 Najlepszych Programów do Księgowości w Chmurze - Ranking i Porównanie [2025]