Hogyan kezdjük elölről a ciklust?
Hogyan kezdjük elölről a ciklust?
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?
Re: Hogyan kezdjük elölről a ciklust?
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
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
Re: Hogyan kezdjük elölről a ciklust?
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!
Re: Hogyan kezdjük elölről a ciklust?
É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...
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...
Re: Hogyan kezdjük elölről a ciklust?
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....
Veretartalmat közvetlenül nem piszkálgatunk...
Ahogy for ciklusban sem állítgatjuk a belső változót....
Re: Hogyan kezdjük elölről a ciklust?
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.
Ó, azok a szép dos-os, assembly-s ídők...
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.
Ó, azok a szép dos-os, assembly-s ídők...
Re: Hogyan kezdjük elölről a ciklust?
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)
A FLASH memória ASMben írható, ha akarod
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)