Jakou zvolit strategii programu
Pavel Troller
patrol@sinus.cz
Pátek Březen 30 07:33:46 CEST 2007
> Veľmi mi to pripomína situáciu, ktorú som kedysi riešil na kontrolu obrátok
> turbíny vodnej elektrárne. Tiež som použil dve prerušenia. Tomu častejšiemu
> som priradil menšiu prioritu, pričom sa sleduje dokončenie tejto rutiny. Ak
> sa stretnú, tá častejšia sa nedokončí a bude použitá hodnota z minulého
> merania.
> Najskôr som mal tiež obavy, no niekoľko rokov to chodí celkom v pohode.
> Merané impulzy sú 20ms (kmitočet v sieti) a 100ms z čidla turbíny. Tiež
> používam meranie periódy, každá veličina má vlastný časovač. Ja som vtedy
> použil VEĽMI pomalý procesor. Pri akomkoľvek dnešnom si kľudne možete
> dovoliť prerušenia nezahodiť, ale jednoducho vykonať jeden po druhom. Ak v
> ňom iba odložíte stav príslušného časovača a nanovo ho spustíte, bude aj pri
> "stretnutí prerušení" oneskorenie (a teda chyba merania) podľa mňa celkom
> nepodstatná a teda zanedbateľná.
>
>
> Milan Mlynarčík
Toto je presne muj nazor. Zabyvam se sice programovanim ustreden, ne motoru,
ale takova ustredna je taky docela real-time a nektere veci potrebuje merit
docela dost presne.
Rozhodne bych pouzil 2 preruseni - v preruseni od cidla bych pouze
sejmul aktualni hodnotu free-running counteru, odecetl od ni minuly stav
(s osetrenim preteceni), ulozil vysledek a aktualni stav (vysledek by byl ten
rozdil a byl by globalne dostupny, aktualni stav by byl jen lokalni promennou
te interrupt rutiny) a sel bych pryc. To se zvladne v radu jednotek
mikrosekund, takze pri pouziti vhodne konstanty free-running counteru a pri
zname minimalni periode mezi pulsy v radu stovek mikrosekund by to melo byt
zanedbatelne, ikdyz by bylo vykonani nahodou pozdrzeno kolizi s tou druhou
rutinou (neznam PIC, v ustrednach se nepouzivaji, ale doufam, ze ma neco jako
priority preruseni a ze kdyz prijdou 2 naraz, umi jejich osetreni
serializovat).
S pozdravem Pavel Troller
Další informace o konferenci Hw-list