megszakítás megszakítása

Hogyha sikeresen O/PLED illetve hagyományos alfanumerikus - esetleg tán grafikus kijelzővel gyűlik meg a baja valakinek:)
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

megszakítás megszakítása

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

Volna e tipp erre tisztelt uraim
-fut egy hosszabb folyamat, ami kit tudja hányadik fügvényt hívta
-elindul a megszakítási rutin és ott mongjuk nyomógomb figyelés van akkor helyes gombnyomásnál felyezzen be miden futó folyamatot és kezdje az elején a fő do loop ciklussal.

Mert ha return-el tér vissza akkor csak akkor tudom kiértékeni a gombot ha vége az épp futó valaminek(az nem jó), vagy a folyamataim közben folyton figyelnem kell a gombokat, ez sem tetszik.

-ha gotoval otthagyom a megszakítási rutint azt nem szereti
Avatar
nobody_hun
Bitfaragó
Hozzászólások: 425
Csatlakozott: 2005. november 14. hétfő, 7:00

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

Én jelzőbitet használnék.

Kód: Egész kijelölése

Szabadonfut=1
Do
   Call Sub1
   Call Sub2
   Call Sub3
'Valamilyen feltétellel visszaállítjuk a szubrutinok futását
   If Ujra=0 Then Szabadonfut=1   
Loop

End

Megszakit:
   If gombnyom=0 then 
       Szabadonfut=0
       Return
   End if
Return

Sub Sub1
  If Szabadonfut=0 Then Exit Sub
'Innen jön a sub feladata
End sub

Sub Sub2
  If Szabadonfut=0 Then Exit Sub
'Innen jön a sub feladata
End sub

Sub Sub3
  If Szabadonfut=0 Then Exit Sub
'Innen jön a sub feladata
End sub
"Az IC-k füsttel működnek. Ha kijön belőlük a füst, nem működnek tovább." - ismeretlen szerző
"Az ID:FFFFFF egyenlő az Atmel még nem kiadott processzorával."
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

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

Amit írtál szerintem kimeríti az általam kizárt lehetőséget, miszerint minden eljárásban ellenőriznem kell a befejezés lehetőségét. De kezdetnek nem rossz. :D
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

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

ezek szerint lehet hogy nem lehet büntetlenül módosítani a megszakítási rutin elhagyását? :(
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

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

Ja Kapu pont a minap magyarázta el hogy rutinban ne használjak kettő RETURN-t mert nem okés.

Kód: Egész kijelölése

Megszakit: 
   If gombnyom=0 then 
       Szabadonfut=0 
       Return 
   End if 
Return 

Avatar
nobody_hun
Bitfaragó
Hozzászólások: 425
Csatlakozott: 2005. november 14. hétfő, 7:00

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

Lehet úgy is, hogy a Do - Loop között figyeled, akkor nem kell minden sub-ban ellenőrizni. Viszont akkor, ha az If-en belül jön a megszakítás, akkor előbb lefut az összes sub, csak utána áll meg.

Nem tudom, én a fenti eljárást már alkalmaztam, hibát nem okozott. Nyilván ez nem azt jelenti, hogy így tökéletes, de adott helyzetben ez volt a legegyszerűbb.
"Az IC-k füsttel működnek. Ha kijön belőlük a füst, nem működnek tovább." - ismeretlen szerző
"Az ID:FFFFFF egyenlő az Atmel még nem kiadott processzorával."
Avatar
nobody_hun
Bitfaragó
Hozzászólások: 425
Csatlakozott: 2005. november 14. hétfő, 7:00

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

SanyiSay írta:Ja Kapu pont a minap magyarázta el hogy rutinban ne használjak kettő RETURN-t mert nem okés.

Kód: Egész kijelölése

Megszakit: 
   If gombnyom=0 then 
       Szabadonfut=0 
       Return 
   End if 
Return 

Bascom help-ben is így van az "On interrupt" felyezetben, sőt ott 3 return van a megszakításon belül (RET, RETI, RET). :D
"Az IC-k füsttel működnek. Ha kijön belőlük a füst, nem működnek tovább." - ismeretlen szerző
"Az ID:FFFFFF egyenlő az Atmel még nem kiadott processzorával."
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Ezt csak assemblerben tudod megoldani.
Ha Nosave-nek deklarálod a megszakítás rutint akkor nem menti el a regisztereket a Bascom.
Ha úgysem a megszakításnál akarod folytatni akkor talán a regiszter tartalmakat nem muszáj megőrizni?
De ilyenkor neked kel vigyáznod a vermek helyes kezelésére.

'we use the int0 interrupt to detect that our slave is addressed
On Int0 Isr_int0 Nosave

Isr_int0:
……

Int0-ra a hwstack-ba kerül a visszatérési cím, amit rutinból kilépés előtt elkel távolítani.
És újra engedélyezni kel a megszakításokat.
Utána jöhet a:
Goto mainprogram.
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

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

Még jó hogy mindenki itt van, akkor mi van ezzel a returnal. Mert Kapu is írta reti-t bár a magyarázatot nem értettem csak hogy nem szabad, bár nekem eddig ment gond nélkül.


A megszakításos dolgot épp emésztem amúgy timer1 a megszakítás amit szakítanék. Az is Capture1.
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

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

Nem tűnik egyszerűnek.
kapu48 írta: Int0-ra a hwstack-ba kerül a visszatérési cím, amit rutinból kilépés előtt elkel távolítani.
de csak módosítani nem lehet? mert akkor minden maradhatna eredetiben.
Persze tudni kellene az új címet. Azt is honnan.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Ami elötte van azt is el kellene olvasni!

Az az első RETURN nyilatkozat, amivel vagyis találkoznak egy feltételen kívül, létrehozni fog egy RETI utasítást. Neked csak egy ilyen RETURN nyilatkozatod lehet a megszakításkezelő rutinodban, mert a szerkesztő helyreállítja a nyilvántartásokat és létrehoz egy RETI utasítást, amikor ez találkozik egy RETURN nyilatkozattal az ISRben. Minden másik RETURN nyilatkozatot átváltanak egy RET utasítássá.
:!:
Csak a RETI engedélyezi újra az előzőleg letiltott INT-et
Avatar
nobody_hun
Bitfaragó
Hozzászólások: 425
Csatlakozott: 2005. november 14. hétfő, 7:00

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

A Pravda elég részletesen leírja a "Finally tips"-nél.

Ha gond az angol, szólj, lefordítom.
"Az IC-k füsttel működnek. Ha kijön belőlük a füst, nem működnek tovább." - ismeretlen szerző
"Az ID:FFFFFF egyenlő az Atmel még nem kiadott processzorával."
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

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

Mostmár értem a returnt, de még mindig ellenkezőt írtok. Mert ugye vissza tér, csak a tiltások nem lesznek feloldva az meg ugye nem szerencsés, hacsak nem figyel rá az ember.
Avatar
nobody_hun
Bitfaragó
Hozzászólások: 425
Csatlakozott: 2005. november 14. hétfő, 7:00

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

kapu48 írta:Ami elötte van azt is el kellene olvasni!
Ez igaz, ezért van a mintában 3 Return:
1., If-en belüli Return: akkor veszi figyelembe, ha a feltételnek megfelel (RET)
2., Ez generálja a RETI-t, ha nem felel meg a feltételnek
3., Ez pedig a cimke lezáró RET

A fordítás pedig pontosabban így szól:
Lehetőség szerint csak egy ilyen RETURN utasítás legyen a megszakítás rutinodon belül, mert a fordító...
"Az IC-k füsttel működnek. Ha kijön belőlük a füst, nem működnek tovább." - ismeretlen szerző
"Az ID:FFFFFF egyenlő az Atmel még nem kiadott processzorával."
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Ha már ennyire érted az angolt miért nem folytattad? Mert utána jönne a lényeg!

És rendbe teszi a regisztereket.
Ez valahogy így néz ki, (de fejből nem tudom pontosa melyik regisztereket menti)

Pop R15 ' restore registers
Pop R14
Pop R13
Pop R12
RETI ’Restore INT. ez a jó RETURN !

8)
Ha csak a RET-tel térsz vissza az összes szemét ott marad a veremben!
1 – 2 szer még elmegy, de már a sokadik int-nél elszáll a vermed!
:twisted:
Válasz küldése