megszakítás megszakítása
megszakítás megszakítása
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
-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
- nobody_hun
- Bitfaragó
- Hozzászólások: 425
- Csatlakozott: 2005. november 14. hétfő, 7:00
É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."
"Az ID:FFFFFF egyenlő az Atmel még nem kiadott processzorával."
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
- nobody_hun
- Bitfaragó
- Hozzászólások: 425
- Csatlakozott: 2005. november 14. hétfő, 7:00
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.
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."
"Az ID:FFFFFF egyenlő az Atmel még nem kiadott processzorával."
- nobody_hun
- Bitfaragó
- Hozzászólások: 425
- Csatlakozott: 2005. november 14. hétfő, 7:00
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).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
"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."
"Az ID:FFFFFF egyenlő az Atmel még nem kiadott processzorával."
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.
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.
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
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
- nobody_hun
- Bitfaragó
- Hozzászólások: 425
- Csatlakozott: 2005. november 14. hétfő, 7:00
- nobody_hun
- Bitfaragó
- Hozzászólások: 425
- Csatlakozott: 2005. november 14. hétfő, 7:00
Ez igaz, ezért van a mintában 3 Return:kapu48 írta:Ami elötte van azt is el kellene olvasni!
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."
"Az ID:FFFFFF egyenlő az Atmel még nem kiadott processzorával."
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 !

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!

É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 !
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!