eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaProblem lekko OT, ale w WinAVR ;-) › Re: Problem lekko OT, ale w WinAVR ;-)
  • Data: 2009-06-13 10:31:18
    Temat: Re: Problem lekko OT, ale w WinAVR ;-)
    Od: Grzegorz Kurczyk <g...@c...slupsk.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Użytkownik T.M.F. napisał:
    > Skad masz makra sei() i cli()? To twoja wlasna definicja czy z
    > biblioteki avr-glibc - pliku interrupts.h?
    > Zakladam, ze twoja wlasna, stad problemy. Oryginalna prawidlowa
    > definicja wyglada tak:
    > #define sei() __asm__ __volatile__ ("sei" ::)

    Niestety oryginalne z interrupt.h i są one tam zdefiniowane dokładnie
    tak jak Kolega napisał.

    > Zwroc uwage na slowo volatile. Swoja droga przeczytaj jak volatile
    > dziala to rozwiaze sie wiele twoich dziwnych klopotow.

    W dużym uproszczeniu ogranicza kompilatorowi możliwości optymalizacji. W
    stosunku do zmiennej wymusza bezwarunkowe każdorazowe czytanie aktualnej
    wartości zmiennej z pamięci przed wykonaniem jakichkolwiek operacji na
    zmiennej. Czyli kompilatorowi nie wolno dla uproszczenia/przyśpieszenia
    kodu banglać przez cała procedurę na wartości skopiowanej do rejestrów.
    Inaczej mówiąc zmienna ma być tak traktowana jakby jej zawartość mogła
    się w każdej chwili zmienić (np. przez inny wątek programu). W
    kontekście powyższego (chyba, że jest jednak inna definicja volatile)
    nadal nie mogę zrozumieć z jakiej paki rozkaz sei() umieszczony na końcu
    funkcji znalazł się nagle na jej początku.


    Pozdrawiam
    Grzegorz

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: