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

ATmega8 - Zawieszanie się uC przy tworzeniu termometru LED - analiza kodu

Icey 18 Paź 2014 19:09 843 5
  • #1 14052719
    Icey
    Poziom 13  
    Witam! Ostatnio kombinuje sobie termometr LED i mam taki problem że procek się zawiesza. Oto kod:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Co może być przyczyną? Kod zawiesza się pod 1 sek czyli po tym co wpiszę w linijkę:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Co do podłączenie nie mam wątpliwości - inny kod bez ADC działa poprawnie.
  • #2 14052731
    vonar
    Poziom 28  
    Icey napisał:
    Co może być przyczyną? Kod zawiesza się pod 1 sek czyli po tym co wpiszę w linijkę:
    Kod: text
    Zaloguj się, aby zobaczyć kod
    Właśnie zdiagnozowałeś swój problem :D , patrz dalej:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    Powracasz z funkcji main i sterowanie ląduje – w przypadku AVR-GCC – w (ukrytej) nieskończonej pętli na końcu programu.
  • #3 14052836
    Icey
    Poziom 13  
    O cholerka! Dzięki! Już wiem nawet jak to się stało, kompilator wyrzucał problem że brakuje mu klamry, a ja głupi dałem ją... w złym miejscu :D
    A jeszcze tak z ciekawości..
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Niby liczy poprawie, ale pamięci trochę też zżera.. Masz może pomysł jak zrobić aby to zoptymalizować? :D
  • #4 14052894
    vonar
    Poziom 28  
    Unikaj liczb zmiennoprzecinkowych (jak powyżej 2.56), jeśli zakres wartości jest znany i ograniczony to zamiast ułamków możesz zastosować odpowiednio większe liczby całkowite (np. tutaj 2560 mV zamiast 2,56 V).
    Słowo-klucz: „arytmetyka stałoprzecinkowa”.
  • #5 14052897
    Icey
    Poziom 13  
    Dzięki, jeszcze z ciekawości, duża jest różnica w poborze prądu? Mówię o operacjach na liczbach zmiennoprzecinkowych i całkowitych
  • #6 14052913
    vonar
    Poziom 28  
    W przypadku prostych rdzeni, jak te w mikrokontrolerach, powinna być w przybliżeniu proporcjonalna do różnicy w czasie obliczeń. A ile ta będzie wynosić – możesz sprawdzić ;) .
REKLAMA