Hogyan kezdjük elölről a ciklust?

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
holex
Biztosítékgyilkos
Hozzászólások: 70
Csatlakozott: 2013. október 29. kedd, 1:35

Hogyan kezdjük elölről a ciklust?

Hozzászólás Szerző: holex »

Van a loopban egy elágazás: ha a főmenüben vagyok, akkor kiírja a hőmérsékletet a kijelzőre, ha nem, akkor pedig nem írja ki. A gond az, hogy ha már túljutottunk a feltételvizsgálaton és a feltétel igaz (tehát a főoldalon vagyunk), de még nem írta ki a hőmérsékletet, mert addig még nem jutott el a végrehajtás és közben érkezik egy megszakítás (egy gombnyomás, amivel átmegy egy másik menübe), akkor a menü végére szépen odabiggyeszti a hőmérsékletet. Hogy lehetne azt megoldani, hogy ha jött megszakítás, akkor a loop-ot elölről kezdje?
Avatar
winnerbt
Elektronbűvölő
Hozzászólások: 907
Csatlakozott: 2007. március 25. vasárnap, 6:00

Re: Hogyan kezdjük elölről a ciklust?

Hozzászólás Szerző: winnerbt »

Az ilyen INT-ek miatt én máshogy csinálom:
A "gombolvasó" INT csak jelzőbiteket ad vissza (1.: a gomb állapota, 2.: megnyomták a gombot, csak bebillenteni tudja)
Általában, ha van, egy 7-14Hz-es INTel elég olvasgatni a gombokat és nem pereg.
A ciklusod normálisan fut és amikor minden kiíródott, a legvégén vizsgálod
a gomb-biteket és ugrasz a megfelelő másik menüre.
Így mindig teljesen lefut a do-loop, nem lesz félkiírás.
A gomb-INT persze így meg tudja csinálni az autorepeat-et is meg mindent úgy,
hogy a főprogramod nem vesz észre semmit belőle.
...csak egy ötlet...

JAni
holex
Biztosítékgyilkos
Hozzászólások: 70
Csatlakozott: 2013. október 29. kedd, 1:35

Re: Hogyan kezdjük elölről a ciklust?

Hozzászólás Szerző: holex »

Köszi, én is gondoltam erre a megoldásra, de azt hittem van valami más. De akkor ez lesz, köszi a segítséget!
Avatar
irak
Biztosítékgyilkos
Hozzászólások: 73
Csatlakozott: 2005. november 2. szerda, 7:00

Re: Hogyan kezdjük elölről a ciklust?

Hozzászólás Szerző: irak »

Érdekességképpen, ha nagyon alacsonyszinten ásunk, akkor van egy lehetőség.
Ugyanis Irq híváskor a verem tetején van a félbeszakadt kód címe, ha átírod, akkor a reti után ott folytatódik a program.
De csak mint érdekesség...
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Hogyan kezdjük elölről a ciklust?

Hozzászólás Szerző: Robert »

Hát, ez az amitől a kód igen hamar érdekes hibákat fog csinálni...
Veretartalmat közvetlenül nem piszkálgatunk...


Ahogy for ciklusban sem állítgatjuk a belső változót....
Avatar
irak
Biztosítékgyilkos
Hozzászólások: 73
Csatlakozott: 2005. november 2. szerda, 7:00

Re: Hogyan kezdjük elölről a ciklust?

Hozzászólás Szerző: irak »

Nyilván.
A verem az kuka, mivel egyáltalán nem biztos hogy a főprogram szakadt meg.
A hardverek állapota is bármi lehet.

Ha nem flash-ban lenne a program, akkor a következő ötletem az önmódosító kód lenne.:D
Ó, azok a szép dos-os, assembly-s ídők...:D
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Hogyan kezdjük elölről a ciklust?

Hozzászólás Szerző: Robert »

Pedig lehet azt is....
A FLASH memória ASMben írható, ha akarod :) LPM/SPM utasításokkal...
Igaz, 10.000 írást blokkonként simán tudsz. Ha meg a kódolás/dekódolás a flash több részén szétszórva, azzal lehet védelmet építeni...
Sőt, néhány AVR chip belső sorozatszámot tartalmaz - hardwarekulcs gyanánt... (pl. Mega32U4)
Válasz küldése