|
Svet elektronike Revija za prave elektronike
|
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Čet Feb 12, 2004 4:42 pm Naslov sporočila: BASCOM8051 on interrupt nosave vprašanje |
|
|
Pozdravljeni, BASCOM mojstri!
Mali procesorček 2051 ali 4051 ima maaalooo rama, samo 128 bajtov, in še tega lahko uporabljamo šele od naslova H30 dalje. Če potem še uporabljamo prekinitve, vsaka prekinitev vrže na sklad (stack) celih 20 bajtov. Če uporabljam dve prekinitvi, tako serijsko kot tudi timer, se zgodi, da ena prekine drugo, in potem gre 40 bajtov na sklad, in potem če ga je premalo, program umre.
Vem, da je teoretično možno z NOSAVE parametrom preprečiti, da se ob prekinitvi spravijo vsi registri na varno. Ali mi ve kdo konkretno povedati, da če v timer prekinitveni rutini imam samo ukaze
incr stevec 'štejemo intervale
load timer1 190 'ponovno nastavimo interval
return
smem uporabiti NOSAVE? Bojim se, da ne, saj load verjetno uporabi nekaj registrov, ki bi njih izgubljena vsebina imela lahko za posledico, da prekinjeni program gre v maloro.
Za sugestije se priporočam.
Vilko |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Čet Feb 12, 2004 8:22 pm Naslov sporočila: sklad (stack) |
|
|
Tole s skladom (stackom) je vrag. Testiram program z hardwarskim simulatorjem, kjer je uporabljen 8252 (ki ima 256 bajtov rama) in program dela. Ko program pretočim na 4051 pa se program zaštrika kmalu za restartom...
Predpostavljam, da ne more biti drugo kot pomanjkanje RAM-a.
Program Report mi pove da je start sklada na naslovu H5A, vemo pa, da je najvišji naslov, ki ga 4051 prenese H7F. Pravzaprav bi moralo biti 35 bajtov sklada dovolj, toda, ne vemo, kdo vse troši sklad. Sedaj ugotavljam, da troši sklad tudi wait ukaz, tudi lcd ukaz, in lepo bi bilo vedeti vnaprej koliko.
No, ja, treba bo preprogramirati ....
Vilko |
|
Nazaj na vrh |
|
|
Svijet elektronike Gost
|
Objavljeno: Pet Feb 13, 2004 8:26 am Naslov sporočila: BASCOM8051 on interrupt nosave vprašanje |
|
|
Ove dvije Bascom naredbe se prevode u asemblerske naredbe
INC 021H
MOV TL1,#042H
MOV TH1,#042H
Niti jedna od ovih naredbi ne koristi registre, pa ih nije potrebno spremati. Dakle, ovaj put moze s NOSAVE.
Opcenito, s tim treba biti oprezan. Vise o tome, kako saznati u sto se prevode pojedine Bascom naredbe, napisano je u knjizi "Programiranje mikrokontrolera programskim jezikom Bascom", koju mozete naruciti u firmi AX elektronika (a mozda je ima i u pojedinim knjizarama).
Vladimir Mitrovic |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Pet Feb 13, 2004 8:44 am Naslov sporočila: Hvala, gospod Mitrović |
|
|
Prav čakal sem, da se javite tudi Vi na naš forum. Imam vašo knjigo, in prav dobrodošli boste v forumu.
Tudi jaz sem disasembliral mali programčič, napisan samo v to svrho, da vidim, kaj mi generira bascom v tem slučaju in sem prišel do istega zaključka. Hvala vam.
Imam sledeč problem: Program mi na emulatorju 4051, opisan je tudi v vaši knjigi poglavlje 6.4, dela brez problema. Zato sem sumil, da gre za problem stack.
Zmanjšal sem porabo stack-a na minimum. Obe interrupt rutini sem specificiral NOSAVE. Timer interrupt rutina tako ne koristi registrov, Serial interrupt rutino pa se ENABLEa le, kadar gre glavni program v WAIT, potem pa se spet disable-a in analizira sprejeta informacija.
Tako spremenjen program mi še vedno dela prez problema na emulatorju, in še vedno ne dela na čipu 4051.
Tudi definicije variable sem zmanjšal na minimum, tako imam sedaj
startstack na H42, kar je mislim, dovolj nizko.
Tako sklepam, da mora biti poleg stack-a še kakšna dodatna razlika med obema čipoma.
Prosim, za sugestije.
Pozdrav
Vilko Sustič |
|
Nazaj na vrh |
|
|
SimonS Profesionalec
Pridružen/-a: Pon Jan 2004 17:52 Prispevkov: 181 Kraj: Kobarid
|
Objavljeno: Pet Feb 13, 2004 7:33 pm Naslov sporočila: |
|
|
Pozdrav
Tudi sam sem imel ogromno tezav z bascomom, ko je rutina postala malo dalsa. Pojava si enostavno ne znam razlagati. Najvecje tezave nastopijo prav pri delu s serijskim portom. Sam sem resil to z opcijo NOSAVE ter rocno shranil registre. Sicer pa poiskusi kaj se dogaja s SW simulatorjem. Ta dela na BASCOMU zelo dobro in nasel bos marsikatiro napako. _________________ Skupaj smo mocnejsi
LP Simon |
|
Nazaj na vrh |
|
|
Svijet elektronike Gost
|
Objavljeno: Pon Feb 16, 2004 10:53 am Naslov sporočila: 8252&4051 |
|
|
Zaista, 8252 ima 2x vise RAM-a od 4051, ali mi je tesko zamisliti program koji bi toliko intenzivno koristio stog da "pojede" sav raspolozivi prostor, posebno ako se koristi NOSAVE. Stog koristi Gosub za pospremanje adrese, ali to je zanemarivo (osim ako se nekako ne zavrti u petlji)... Volio bih vidjeti program, molim posaljite ga na
svijet.elektronike@kc.tel.hr
Vladimir Mitrovic |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu You cannot attach files in this forum You cannot download files in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|