eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaDlaczego ATmega128 przekłamuje?Dlaczego ATmega128 przekłamuje?
  • Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!lub
    lin.pl!news.lublin.pl!not-for-mail
    From: "Darkac" <d...@w...pl>
    Newsgroups: pl.misc.elektronika
    Subject: Dlaczego ATmega128 przekłamuje?
    Date: Tue, 13 Oct 2009 14:37:54 +0200
    Organization: lubman
    Lines: 30
    Message-ID: <hb1sbu$qoq$1@news.lublin.pl>
    NNTP-Posting-Host: host148.echoson.com.pl
    Mime-Version: 1.0
    Content-Type: text/plain; format=flowed; charset="iso-8859-2"; reply-type=original
    Content-Transfer-Encoding: 8bit
    X-Trace: news.lublin.pl 1255437502 27418 217.113.147.148 (13 Oct 2009 12:38:22 GMT)
    X-Complaints-To: a...@n...lublin.pl
    NNTP-Posting-Date: Tue, 13 Oct 2009 12:38:22 +0000 (UTC)
    X-Priority: 3
    X-MSMail-Priority: Normal
    X-Newsreader: Microsoft Outlook Express 6.00.2900.5843
    X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:573223
    [ ukryj nagłówki ]

    Piszę program na ATmega128 za pomocą edytora AVRSide i kompilatora WinAVR.
    Program jest juz trochę rozbudowany i zawiły. Jest obsługa przerwań
    czasowych co mniej więcej 1ms i używane jest sporo zmiennych globalnych.
    Program obrabia równolegle dwa sygnały A i B z przetwornika A/C.
    Jeśli sygnał A lub B spełni pewien warunek badany w przerwaniu, w pętli
    głównej wchodzi w odpowiadającą swojemu kanałowi jedną z dwóch bliźniaczych
    procedur (dość zawiłych).
    Jedna ze zmiennych ustawiana jest w menu (wyświetlacz LCD i klawiatura
    multipleksowana) i przyjmuje wartości 1 lub 0.

    Dziwne zjawisko występuje, kiedy program wejdzie w wykonywanie procedury
    tylko dla kanału B. W trakcie jej wykonywania powoduje samoistne wyzerowanie
    wspomnianej wcześniej zmiennej. Zmienna ta nie występuje w ogóle w tej
    procedurze. W całym programie jej wartość może być zmieniana ręcznie tylko w
    pewnym menu które trzeba specjalnie wywołać sekwencją działań.
    Podejrzewałem że może jest za mało pamięci RAM (zajętość 83%) i coś zaczyna
    głupieć. Testowo wywaliłem pewne tabele zajmujące sporo RAM-u i uzyskałem
    52% zajętości. Zjawisko się nie zmieniło. Sprawdziłem użycie tablic i
    nigdzie nie jest przekroczony ich rozmiar.

    Zmienna nie jest używana w przerwaniach, ale dla próby dałem ją jako
    volatile - bez poprawy.
    Szukanie dokładnie miejsca w procedurze w którym następuje zmiana wartości
    tej zmiennej, to żmudna czasochłonna praca. Procedura jest duża i
    pokiełbaszona z wieloma rozgałęzieniami typu case. Przydałaby się jakaś
    wskazówka do szukania winnego.

    Co może powodować ingerencję w wartość zmiennej przez procedurę, w której ta
    zmienna nie występuje?

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: