[elektro] PIC18 számláló
Nemka
nemka at nemka.hu
Thu Jun 13 13:19:06 CEST 2013
> 2013.06.13. 13:03 Kiss Gabor:
> On 06/13/2013 10:24 AM, Nemka wrote:
>> Én így szoktam:
>>
>> - tiltsd le a timer megszakítást
>> - olvasd ki a timer értékét
>> - ellenőrizd a timer megszakítás flag-et
>> -- ha a flag aktív, akkor ellenőrizd a timerből kiolvasott érték legfelső bitjét
>> --- ha a legfelső bit 0, akkor növeld eggyel a szoftveres számlálódat és
>> töröld a megszakítás flag-et
>> - olvasd ki a szoftveres számlálódat
>> - engedélyezd a timer megszakítást
> Most már csak óvatosan merek megnyikkanni. :-)
> Mi van, a következő hipotetikus esetben?
> A számláló felső szavát inkrementáló IT rutin elindul. Már növelte is.
> Épp készül törölni az Overflow bitet (TMR0IF), mikor beüt egy magasabb
> prioritású interrupt, és elkezdi kiolvasni a számlálót a fentiek
> szerint. Az IT rutinban tehát nem mindegy a sorrend.
> Ha így csinálja, duplán inkrementálódik a felső szó.
> Szóval vigyázni kell, sokkal több rossz megoldás van, mint jó. :-)
> Jól meg kell vizsgálni a peremfeltételeket.
> (Csak hangosan gondolkodom...)
A FI által leírt esetre írtam választ. Ott szerepel, hogy van
lehetőség letiltani a megszakítást, tehát a) nem megszakítás rutinban
van a kiolvasó rész, b) nem magasabb prioritású megszakítás rutinban
van a kiolvasó rész.
Az általad felvetett esetre az a megoldás, hogy a timer megszakítást
magasabb prioritásúra kell beállítani (hiszen az innen kapott érték az
alapja a kiolvasó rész további műveleteinek), mint a kiolvasó rutint és
így már nem is lesz probléma.
Nemka
---> http://www.nemka.hu <---
More information about the Elektro
mailing list