eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaZagwozdka w C Keil. › Re: Zagwozdka w C Keil - wyjaśnienie.
  • Data: 2019-02-13 13:48:39
    Temat: Re: Zagwozdka w C Keil - wyjaśnienie.
    Od: Janusz <j...@o...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    W dniu 2019-02-13 o 11:28, J.F. pisze:
    > Użytkownik "Irek.N."  napisał w wiadomości grup
    > dyskusyjnych:q3vee4$o74$...@n...news.atman.pl...
    >> Na wstępie małe usprawiedliwienie - procedura była napisana na 8051 i
    >> uruchomiona na jednym z pierwszych PLC jakie zrobiłem, w latach 90,
    >> ale stosowana też później*. W tamtych czasach wydawało mi się, że
    >> ogarniam podstawy C :)
    >
    >> W maszynie którą diagnozowałem definicja zmiennej DEL_STEP była o
    >> zgrozo jako unsigned char. Nie zwróciłem na to uwagi, choć zauważyłem,
    >> że sprawdzany jest tylko młodszy - przekazany - bajt zmiennej z którą
    >> wywołano funkcję. Wygląda więc na to, że kompilator miał rację.
    >
    > uzyc niewlasciwy typ - zdarza sie.
    > Ale nie spojrzec jaki to typ przy sprawdzaniu/szukaniu bledu ... czas na
    > lecytyne :-)
    >
    >> Po zmianie definicji na unsigned int kompilator robi OLR na obu
    >> połówkach zmiennej DEL_STEP a następnie sprawdza czy wynik operacji
    >> jest zerowy. Bardzo ładne rozwiązanie moim zdaniem.
    >
    > Typowe.
    >
    >> Zrobiłem jeszcze jedną rzecz. Ponieważ jak zauważyliście, nie ma
    >> gwarancji, że sprawdzenie 16 bitów będzie poprawne w przypadku gdy
    >> przerwanie może je zmienić, podłączyłem oscyloskop, persystencję na
    >> nieskończoną i obserwowałem czas generowany przez procedurę. Zdarzały
    >> się błędnie odliczone interwały, ale nie za często.
    >
    > Czyli potrafi przerwanie trafic miedzy dwie instrukcje ?
    > No w sumie - zawsze miedzy dwie trafia, tylko kwestia
    > prawdopodobienstwa, kiedy trafi miedzy dwie istotne.
    >
    > A tych instrukcji przy ORL byc moze nawet wiecej.
    >
    >> Zrobiłem jak Mateusz podpowiedział - flaga w przerwaniu modyfikującym
    >> zmienną. Nie złapałem żadnego błędnego odliczenia.
    >
    > Rozumiem, ze najpierw zmieniles typ zmiennej na int ?
    >
    > Ale nie bardzo rozumiem - przerwanie ustawia flage, modyfikuje zmienna,
    > gasi flage ?
    > na przetwarzanie w procesie głownym nie ma to znaczenia - sprawdzi
    > sobie, ze flagi nie ma, zacznie czytac zmienna ... i tu przerwanie
    > przychodzi.
    > Co innego gdy uzywa zmiennej przerwanie wyzszego poziomu.
    >
    > Ja bym tam wylaczyl przerwania na czas sprawdzenia, to raptem kilka
    > instrukcji, ale w pojedynczym while zaprogramowac to trudno.
    >
    > A swoja droga - czy Keil sam ich nie wylacza ? Dla zmiennych volatile
    > powinien.
    W avr studio nie wyłącza, i keil pewnie też,
    w gcc jest do tego osobna sekcja, atomic block się nazywa
    i w niej sie takie porównania robi.


    --
    Pozdr
    Janusz

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: