logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ATMEGA32 - Kompilator AVR GCC ignoruje część kodu

excray 22 Paź 2013 20:24 1206 5
  • #1 12870601
    excray
    Poziom 41  
    Mam problem z kompilatorem AVR GCC który ignoruje przy kompilacji część kodu tak jakby nigdy nie mógłby być on wykonany. Kod:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Program działa tak:
    - wysyła do maszyny po RS232 komendę aby ta zwróciła zawartość pewnego bloku danych na wskutek czego otrzymujemy przykładowo taki blok "heksów":
    02 10 31 C2 82 62 C2 82 62 C2 82 62 C2 82 62 00 00 20 00 00 54 00 00 59 00 00 20 C2 82 62 C2 82 62 00 00 20 10 32 C2 82 62 C2 82 62 C2 82 62 C2 82 62 00 00 20 00 00 37 03
    interesują mnie ciągi C2 82 62. Muszę policzyć ile jest takich bloków ciągów i ile zawierają poszczególnych znaków. Załóżmy że zamienimy ciąg C2 82 62 na literę X (bez spacji) to otrzymamy:
    02 10 31 XXXX 00 00 20 00 00 54 00 00 59 00 00 20 XX 00 00 20 10 32 XXXX 00 00 20 00 00 37 03
    czyli mamy 3 bloki gdzie mamy odpowiednio 4znaki w pierwszym, dwa w drugim i znowu 4 w trzecim. Chciałbym uzyskać więc w kolejnych komórkach bufora buff cyfry 4, 2, 4. Dodatkowo jest trochę zabezpieczeń na wypadek jakby maszyna zdecydowała się nie odpowiedzieć (pętla na 50*2ms zwłoki) albo swtwierdzić że nie chce ze mną rozmawiać (S_NAK). Istotą problemu jest że całą ta część od "if(key == 2)" do końca tej pętli czyli do "else" nie istnieje po skompilowaniu. Proszę o pomoc z znalezieniu przyczyny tego stanu rzeczy.
  • Pomocny post
    #3 12870644
    tadzik85
    Poziom 38  
    Typowy problem nawiasowy plus dlaczego nie korzystasz a else if?
  • Pomocny post
    #4 12870659
    dondu
    Moderator na urlopie...
    tadzik85 napisał:
    ... dlaczego nie korzystasz a else if?

    Bo jego algorytm jest inny i np. w warunku if(key == 1) ustawia key=2
    a następnie if(key == 2) jest wykonywane.

    Czy to prawidłowe nie analizowałem :)
  • Pomocny post
    #5 12870830
    michalko12
    Specjalista - Mikrokontrolery
    Spróbuj wykorzystać poniższy kod, o ile dobrze jest napisany, idea powinna chyba być zachowana.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Dodano po 26 [minuty]:

    Swoją drogą masz błąd w programie a nie GCC coś ignoruje
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #6 12871314
    excray
    Poziom 41  
    Dziękuję za pomoc. Rzeczywiście takie proste i banalne rozwiązanie że aż mi wstyd. Wystarczyło zamienić kolejność testowania od 3 do 0. Pisząc że kompilator ignoruje oczywiście miałem na myśli nie jego błąd tylko fakt że widzi on bezsens w kodzie którego ja nie dostrzegam i dlatego pomija go przy kompilacji. Docelowo spróbuję wdrożyć kod kolegi michalko12 bo wygląda zdecydowanie mądrzej :-). Dziękuję jeszcze raz.
REKLAMA