-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.chmurka.net!eternal-september.org!
news.eternal-september.org!.POSTED!not-for-mail
From: Jacek Radzikowski <j...@s...die.die.die.piranet.org>
Newsgroups: pl.misc.elektronika
Subject: Re: Dziwny problem z kodem w C (gcc mips/pic32)
Date: Wed, 17 May 2023 15:43:10 -0400
Organization: A noiseless patient Spider
Lines: 69
Message-ID: <u43aoe$3vb05$1@dont-email.me>
References: <a...@n...icm.edu.pl>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Wed, 17 May 2023 19:43:10 -0000 (UTC)
Injection-Info: dont-email.me; posting-host="e22c2945c03a76bb2daa3fe7d41c2731";
logging-data="4172805";
mail-complaints-to="a...@e...org";
posting-account="U2FsdGVkX1/uFbFFO9jV5bLn2XnqXDVJRFwy0w7eEQw="
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
Thunderbird/102.11.0
Cancel-Lock: sha1:1313SS5il2nD/v7elqG7XCTid5A=
In-Reply-To: <a...@n...icm.edu.pl>
Content-Language: en-US, pl
Xref: news-archive.icm.edu.pl pl.misc.elektronika:780596
[ ukryj nagłówki ]On 5/17/23 15:23, Marek wrote:
> 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...
Nie testowałem, ale na pierwszy rzut oka to w deklaracji brakuje jednego
consta:
https://stackoverflow.com/questions/28320538/creatin
g-a-const-array-of-const-elements#28320734
W obecnej formie masz tablicę, która wskazuje na stringi we flashu. To
jest inicjowana stała, więc można by przypuszczać ze zawsze będzie miała
taką samą zawartość, ale czasami coś się popsuje.
Sprawdź w jakim segmencie jest umieszczona tablica, i jeśli w RAMie, to
zacznij szukać gdzie masz bląd w programie, bo najprawdopodobniej coś
gdzieś wyjeżdża poza zaalokowany obszar i nadpisuje losowe rejony pamięci.
Jacek
Następne wpisy z tego wątku
- 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
- 18.05.23 14:14 Dawid Rutkowski
Najnowsze wątki z tej grupy
- 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
- Czym obecnie programuje się EPROM-y?
- zagadka sieciowa
- W Polsce powstaje grawitacyjny magazyn energii
Najnowsze wątki
- 2025-09-10 Wściekli obywatele spalili budynek parlamentu Nepalu [bo odcięli im amerykańskie serwery społecznościowe - przyp. JMJ]
- 2025-09-10 NxtPaper
- 2025-09-10 Gdańsk => Starszy programista oprogramowania C++ <=
- 2025-09-10 Łódź => Starszy Specjalista ds. Nowoczesnej Księgowości / Samodzi
- 2025-09-10 Programiści nie przestają zadziwiać świat
- 2025-09-09 Lublin => Delphi Programmer <=
- 2025-09-09 Lublin => Programista Delphi <=
- 2025-09-09 Warszawa => Specialist in Administration <=
- 2025-09-09 Warszawa => Programista Microsoft Dynamics 365 Finance & Operations (D
- 2025-09-09 Warszawa => Specjalista/tka ds. Administracji <=
- 2025-09-08 Długi kabel zasilający a na końcu procek
- 2025-09-08 Dużo niższe temperatury procesora po obudzeniu komputera... tak ma być czy jest coś nie tak?
- 2025-09-08 Warszawa => Senior Fullstack Developer <=
- 2025-09-08 Warszawa => Head of Technology <=
- 2025-09-08 Pozbawianie obywatelstwa: Rosja olewa konstytucyjny zakaz "jak RP3"?