-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin1!goblin.
stu.neva.ru!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-02.new
s.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
From: "J.F." <j...@p...onet.pl>
Newsgroups: pl.misc.elektronika
References: <q3q59d$hp9$1@node1.news.atman.pl> <q3vee4$o74$1@node1.news.atman.pl>
In-Reply-To: <q3vee4$o74$1@node1.news.atman.pl>
Subject: Re: Zagwozdka w C Keil - wyjaśnienie.
Date: Wed, 13 Feb 2019 11:28:08 +0100
MIME-Version: 1.0
Content-Type: text/plain; format=flowed; charset="iso-8859-2"; reply-type=response
Content-Transfer-Encoding: 8bit
X-Priority: 3
X-MSMail-Priority: Normal
Importance: Normal
X-Newsreader: Microsoft Windows Live Mail 16.4.3528.331
X-MimeOLE: Produced By Microsoft MimeOLE V16.4.3528.331
Lines: 62
Message-ID: <5c63f185$0$476$65785112@news.neostrada.pl>
Organization: Telekomunikacja Polska
NNTP-Posting-Host: 83.26.68.34
X-Trace: 1550053766 unt-rea-a-01.news.neostrada.pl 476 83.26.68.34:55544
X-Complaints-To: a...@n...neostrada.pl
Xref: news-archive.icm.edu.pl pl.misc.elektronika:740973
[ ukryj nagłówki ]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 późniejszych wersjach kodu (trochę inna wersja PLC) już była
>poprawna definicja jako typ 16 bitowy, czyli kiedyś to zauważyłem,
>poprawiłem i zapomniałem :(
Ale o co chodzi - powiekszyles wartosc opoznienia ponad 255, i sie
okazalo, ze nie czeka tyle co powinien ?
J.
Następne wpisy z tego wątku
- 13.02.19 13:48 Janusz
- 13.02.19 16:22 stary grzyb
- 13.02.19 21:13 Irek.N.
- 13.02.19 21:18 Irek.N.
- 13.02.19 21:21 Grzegorz Niemirowski
- 13.02.19 21:28 Irek.N.
- 13.02.19 22:03 Janusz
- 13.02.19 22:37 Queequeg
- 13.02.19 22:47 Queequeg
- 13.02.19 22:56 J.F.
- 13.02.19 22:59 Janusz
- 13.02.19 22:59 Queequeg
- 13.02.19 23:01 Queequeg
- 13.02.19 23:06 Queequeg
- 13.02.19 23:07 Grzegorz Niemirowski
Najnowsze wątki z tej grupy
- [newbie] Jaki multimetr za 2-4 stówy?
- szafka sieciowa
- Raspberry Pi 5 + dyski SATA
- lutownica na węgiel
- Znów czary (albo niewiedza) - tym razem fotowoltaika
- Chess
- Vitruvian Man - parts 7-11a
- przeźroczyste koszulki
- Re: Win 10/11 nie lubi OKI
- Programator czasowy TUYA.
- Dlaczego energia elektryczna jest droga i cały czas drożeje
- twardy dysk stuka
- Oclenie alkalicznych akumulatorów
- Powerbank jednonapieciowy, a trzynapieciowy
- Lustra w maszynie ASML
Najnowsze wątki
- 2024-05-09 Chess
- 2024-05-09 Vitruvian Man - parts 7-11a
- 2024-05-09 Drukara laserowa
- 2024-05-09 Chess
- 2024-05-09 sedzia Szmydt
- 2024-05-09 Chess
- 2024-05-09 [newbie] Jaki multimetr za 2-4 stówy?
- 2024-05-09 Chcą poł. tunelem Europę z Afryką - 27km za 6GEUR
- 2024-05-09 Gorzów Wielkopolski => Konsultant/Wdrożeniowiec Comarch ERP XL <=
- 2024-05-09 Kraków => Senior PHP Developer (Symfony) <=
- 2024-05-09 Vitruvian Man - parts 7-11a
- 2024-05-09 Vitruvian Man - parts 7-11a
- 2024-05-09 Chess
- 2024-05-09 Vitruvian Man - parts 7-11a
- 2024-05-09 szafka sieciowa