-
Data: 2022-08-09 08:36:38
Temat: Re: Biblioteka MQTT i dziwny kod w C
Od: Atlantis <m...@w...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On 09.08.2022 07:13, JDX wrote:
> Ewidentny błąd - pokazuje dlaczego należy kompilować z -Wall (oraz
> ewentualnie -pedantic) i nie ignorować ostrzeżeń. Aczkolwiek w
Przy próbie kompilacji z -Wall kompilator (xc32-gcc) wywala kilka błędów
w bibliotece GCC, ale dotyczą one takich rzeczy jak niewykorzystane
zmienne albo niejawne rzutowanie z char* na BYTE* w argumencie funkcji.
Do tej konkretnej konstrukcji z pustą listą parametrów się akurat nie
czepia.
> przytoczonym kontekście nie ma znaczenia - zmienna llen ma zasięg
> lokalny ograniczony do wnętrza if-a i poza wywołaniem MQTTReadPacket()
> nigdzie nie jest tam później używana.
Chodziło mi o inne miejsce - od linii 787. Tam zmienna llen jest
przekazywana do funkcji MQTTReadPacket w taki sam sposób, a potem bierze
udział w wyliczaniu indeksów do MQTTBuffer.
Chociaż z drugiej strony wszystkie z tych operacji to sumowanie. Zmienna
llen jest zmienną lokalną, a wiec jest domyślnie inicjalizowana
wartością 0. Jeśli przekazanie jej przez wskaźnik do funkcji o pustej
liście parametrów nie ma żadnego wpływu na jej wartość, to nie będzie
też miało na późniejsze wyliczenia.
Czyżby pozostałość po jakichś wcześniejszych wersjach kodu, gdzie
faktycznie w parametrze był wskaźnik? A potem autor to przepisał, na
wersję bezparametrową i zamiast dać void wyczyścił listę parametrów, nie
poprawiając wcześniejszych wywołań?
> No i proponuję też zamienić
> switch(rxBF[1]) { //MQTTBuffer
> na
> switch(MQTTBuffer[1]) { //MQTTBuffer
To była pierwsza rzecz jaką sprawdziłem. Wychodzi na to, że:
1) MQTTReadPacket() wołane bezpośrednio przed tym switchem zwraca 2.
2) MQTTBuffer[01] w tym miejscu zwraca wartość 0x02. Zawsze, niezależnie
od tego czy dane do logowania były prawidłowe, czy nie. Postanowiłem
więc sprawdzić co mamy w MQTTBuffer[0] i sprawa się rozjaśniła - mamy
tam 0x20. Razem te dwa bajty stanowią więc prawidłowy nagłówek
wiadomości CONNACK. Dalej powinny iść jeszcze dwa bajty, z których
ostatni stanowi reurn code informujący o stanie autoryzacji. Serwer
istotnie wysyła całą wiadomość - sprawdziłem tcpdump i wiresharkiem.
3) Spróbowałem więc po prostu sprawdzać MQTTBuffer[3] ale niestety - nie
znajduję tam return code. Wygląda to faktycznie tak, jakby
MQTTReadPacket w tym miejscu odczytywało tylko dwa pierwsze bajty, co
zgadzałoby się z wartością zwracaną przez funkcję.
Następne wpisy z tego wątku
- 09.08.22 09:47 Grzegorz Niemirowski
- 09.08.22 10:16 JDX
- 09.08.22 10:29 Atlantis
- 09.08.22 10:53 Atlantis
- 09.08.22 19:13 J.F
- 09.08.22 20:38 Atlantis
- 10.08.22 00:06 Atlantis
- 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
Najnowsze wątki z tej grupy
- Rejestrator temperatur - termopara, siec
- Router LTE z możliwością zmian MTU
- Fajny film widziałem...
- Jaka ładowarka sieciowa do Iphona?
- Taśma izolacyjna do prac elektrycznych
- Recenzja 3.1A ;) w 6 gniazdach...
- Re: Recenzja 3.1A ;) w 6 gniazdach...
- Re: Recenzja 3.1A ;) w 6 gniazdach...
- Re: Recenzja 3.1A ;) w 6 gniazdach...
- Wkrętarki, wiertarki...
- Zasilacz impulsowy 12V 10A, coś godnego uwagi jako zamiennik akumulatora wkrętarki
- Mouser - koszt wysyłki
- [OT] Jak wycinac ksztalt w piance lub styropianie?
- FV--> ciepła woda w kranie
- Szok
Najnowsze wątki
- 2025-07-11 Rejestrator temperatur - termopara, siec
- 2025-07-11 DPD, przeniesienie numerów z a2mobile i z Orange
- 2025-07-11 Warszawa => Account Manager - Sprzedaż Usług Rekrutacyjnych <=
- 2025-07-11 Poznań => Senior Key Account Manager IT <=
- 2025-07-11 Warszawa => Strategic Account Manager <=
- 2025-07-11 Warszawa => International Freight Forwarder <=
- 2025-07-11 Warszawa => Spedytor Międzynarodowy <=
- 2025-07-11 MObywatel - fantazja poniosła
- 2025-07-11 Białystok => Programista Kotlin <=
- 2025-07-11 Kraków => PHP Developer (Full Stack) <=
- 2025-07-11 Warszawa => Specialist in Administration <=
- 2025-07-11 Warszawa => Specjalista/tka ds. Administracji <=
- 2025-07-11 Warszawa => Senior Product Manager <=
- 2025-07-11 Szczecin => Key Account Manager IT <=
- 2025-07-11 Łódź => Programista Mainframe (z/OS, Assembler) <=