-
Data: 2023-05-17 21:23:00
Temat: Dziwny problem z kodem w C (gcc mips/pic32)
Od: Marek <f...@f...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Pierwszy raz się spotkałem z czymś takim, o to problematyczny
fragment kodu:
const char *connectionFailureStrings[] = {
"NULL",
/* 0 - not used */
"NULL",
/* 1 - not used */
"WF_JOIN_FAILURE",
/* 2 */
"WF_AUTHENTICATION_FAILURE",
/* 3 */
"WF_ASSOCIATION_FAILURE",
/* 4 */
"WF_WEP_HANDSHAKE_FAILURE",
/* 5 */
"WF_PSK_CALCULATION_FAILURE",
/* 6 */
"WF_PSK_HANDSHAKE_FAILURE",
/* 7 */
"WF_ADHOC_JOIN_FAILURE",
/* 8 */
"WF_SECURITY_MISMATCH_FAILURE", /* 9 */
"WF_NO_SUITABLE_AP_FOUND_FAILURE", /* 10 */
"WF_RETRY_FOREVER_NOT_SUPPORTED_FAILURE"/*11*/
};
static void OutputConnectionFailedMsg(UINT16 eventInfo)
{
UINT8 status;
UINT8 reason;
status = (UINT8)(eventInfo >> 8);
reason = (UINT8)(eventInfo & 0xff);
printf (" status %d
%p\r\n",status,connectionFailureStrings[status]);
printf("WF_Event: Connection Failed: %s
",connectionFailureStrings[status]);
}
Mamy tablicę stringów umieszczoną we flash (pamięci stałej) dzięki
const. Niestety w losowych przypadkach drugi printf generuje wyjątek
adresu z poza zakresu. Zmienna status nie przekracza zakresu i zawsze
nawet jak jest wyjątek ma wartość 3. Okazuje się, że gdy jest
wyjątek to wskaźnik (%p w pierwszym printf) pokazuje jakiś bzdurny
adres, co oczywiście doprowadza do wyjątku w drugim printf. Jak to
możliwe, że adres jest bzdurny??
Przecież tablica jest we flash, adres tutaj powinien być stały i
wygenerowany na etapie kompilacji. Oczywiście w większości przypadków
gdy wszystko jest OK printf pokazuje prawidłowy adres 3 indeksu w tej
tablicy. Ale raz na 10 startów kodu nie... Co ciekawe wygląda na to,
że bzdurny adres pojawia się przy pierwszym uruchomieniu kodu po
flashowaniu mcu ale też nie za każdym razem...
Cały kod jest dość obszerny (75 tys linii), nie ma innych problemów,
to jedyne miejsce, więc chyba można wykluczyć problem z mcu/flash...
--
Marek
Następne wpisy z tego wątku
- 17.05.23 21:43 Jacek Radzikowski
- 17.05.23 22:02 Zbych
- 17.05.23 22:05 Marek
- 17.05.23 22:16 Marek
- 18.05.23 08:55 Janusz
- 18.05.23 12:18 Marek
- 18.05.23 12:44 Janusz
- 18.05.23 13:05 Marek
- 18.05.23 13:08 Dawid Rutkowski
- 18.05.23 13:22 J.F
- 18.05.23 13:29 Grzegorz Niemirowski
- 18.05.23 13:49 heby
- 18.05.23 13:54 Grzegorz Niemirowski
- 18.05.23 14:01 Marek
- 18.05.23 14:13 Dawid Rutkowski
Najnowsze wątki z tej grupy
- Kod zniżkowy w TME do 26.09.2025
- SFP, 10G, simplex sc/apc
- [słabe wiatry powodują - przyp. JMJ] Energetyczny paraliż w Niemczech
- NxtPaper
- Programiści nie przestają zadziwiać świat
- Długi kabel zasilający a na końcu procek
- Dlaczego nam nie idzie
- Co czujnik to inna temperatura
- Jak naprawić pilota
- Dlaczego TMP wer. 2.0 nie może być sprzedawany jako patyk USB lub karta PCIe 1x?!?
- produkcja w UE
- Pamięć SRAM nie działa z Z80182
- plyta indukcyjna - naprawa
- założyłem kamerę
- syrenki alarmów
Najnowsze wątki
- 2025-09-18 Warszawa => Senior Account Manager <=
- 2025-09-18 Warszawa => OSS System Administrator <=
- 2025-09-18 Kraków => Koordynator Produkcji / Przedstawiciel ds. rozwoju produktu
- 2025-09-18 Ostrów Wielkopolski => Specjalista ds. Marketingu Online (PPC) <=
- 2025-09-18 pierwszy tel kupiłem za 1250zł
- 2025-09-17 jak się kupuje elektryczny?
- 2025-09-17 Kod zniżkowy w TME do 26.09.2025
- 2025-09-17 Ukraińcy uważają polski sys. antydronowy za najlepszy na Świecie, a rząd w III Rzeczy (pospolitej) woli sys. niemiecki
- 2025-09-17 Ukraińcy uważają polski sys. antydronowy za najlepszy na Świecie, a rząd w III Rzeczy (pospolitej) woli sys. niemiecki
- 2025-09-17 Warszawa => Dyrektor pionu IT <=
- 2025-09-17 Rzeszów => International Freight Forwarder <=
- 2025-09-16 China => Production Coordinator / Representant Product Dev <=
- 2025-09-16 Warszawa => Project Manager (AI and innovation) <=
- 2025-09-15 "Jeden telefon z Waszyngtonu i nasze samoloty nie wystartują" - czyli to co każdy koder wie
- 2025-09-15 UE chce uruchomić SI "Chat Control" na kompach wszystkich euroPejczyków