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

[atmega128] [atmega128]/[C] - Reset programu przy nawigacji w menu powyżej 100 pozycji

azoizo 28 Gru 2013 11:27 1557 7
REKLAMA
  • #1 13106564
    azoizo
    Poziom 9  
    Witam

    Po wielodniowym pisaniu oprogramowania mini sterownika do akwarium napotkałem dziwny problem, mianowicie. Utworzone menu zawierało 94 pozycje razem z podmenu zdefiniowane strukturze.

    Przechodzenie pomiędzy stanami realizowane jest enkoderem obsługiwanym w pętli głównej programi i ładnie działa. Problem pojawił się w chwili gdy postanowiłem dodać kolejne podmenu odpowiedzialne za kalibrację pomiarów. Ilość pozycji menu i podmenu zwiększyła się do 108. Podczas nawigacji po menu po dojściu do pozycji powyżej 100 program się resetuje i nie wiem dlaczego. Czy może ktoś na to spojrzeć. Będę wdzięczny za pomoc.

    Ponieważ program zawiera 3500 linii zamieszczam jedynie fragmenty.
    Kompilacja przebiega bez błędów i ostrzeżeń, zużyte zasoby pamięci:
    Program Memory Usage : 41928 bytes 32,0 % Full
    Data Memory Usage : 3092 bytes 75,5 % Full

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 13106769
    excray
    Poziom 41  
    Po pierwsze kod umieszczaj w tagach "syntax". Po drugie w jakim programie i jakiej wersji to kompilujesz, a po trzecie 75% zajętości RAM źle wróży. Moim zdaniem przepełniasz stos.
  • REKLAMA
  • #3 13107032
    GienekS
    Poziom 32  
    Przenieś całe menu do pamięci programu.
  • #4 13108069
    azoizo
    Poziom 9  
    Dziękuję za podpowiedź. Prosiłbym (bo jestem nowicjuszem) o wskazówki jak przenieść menu do pamięci programu czyli jak rozumiem flash. Kompiluję w AVR Studio 6.1 i co zrobić żeby nie przepełnić stosu? Z góry dziękuję.
  • REKLAMA
  • REKLAMA
  • #6 13109365
    azoizo
    Poziom 9  
    Dzięki za podpowiedź. Niestety po dodaniu atrybutu do stringów opisy menu importowane z struktury się rozjechały - pokazuje jakieś krzaki. pamiętając co po czym występuje stwierdzam że niepomogło choć: Data Memory Usage : 2252 bytes 55,0 % Full, a więc coś jest na rzeczy. Dlaczego występują krzaki?

    Dodano po 20 [minuty]:

    A jeszcze dodałem atrybut do definicji menu

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    i skończyło się wyświetlanie na LCD...
  • #7 13109691
    excray
    Poziom 41  
    Kolego już raz Ci pisałem. Ile razy trzeba Cie upominać abyś kod umieszczał otagowany. A co do programu to nie przeczytałeś dokładnie opisu z załączonej strony. Jeśli coś definiujesz jako PROGMEM to później dostęp do tego jest przez np. pgm_read_word(). Tutaj:
    https://www.elektroda.pl/rtvforum/topic2391551.html#11372391
    masz prawie gotowca.
  • #8 13109921
    azoizo
    Poziom 9  
    Sorki, jak widzisz próbowałem "otagować", ale mi nie wyszło.
REKLAMA