Dogovoreno. Nadam se da sad nisam bio kompliciran .mojalovaa wrote:Ja bi ipak da vi meni pomognete u BASCOM-u , odnosno kada dodjem do malo kompliciranijih tema....
BASCOM za totalne neznalice.
Moderators: pedja089, stojke369, trax, InTheStillOfTheNight
Re: BASCOM za totalne neznalice.
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
Re: BASCOM za totalne neznalice.
Ma niste , za mene , ako budete ja cu vam reci da malo pojednostavite odgovor.
Re: BASCOM za totalne neznalice.
Evo samo da vam se javim da nisam zaboravio na ovaj forum , jednostavno vreme mi ne dozvoljava na sve strane , nadam se da ce te imati razumjevanje zbog toga , ali cim prije stignem nastavljam sa ovom temom , ne samo radi vas vec i radi mene.
Re: BASCOM za totalne neznalice.
Nadam se moje pitanje nece smetati kreatoru teme .
Uglavnom , zelio bih se poigrat sa interputima u BascomAVR-u . Nije problem napisat kod da kad detektira promjenu na interrupt pinu , skoci na tu i tu labelu .
Vec me interesira , ako koristim 2 interrupta ( koji se aktiviraju vanjskim putem na za to predvidenim pinovima ) te mi se kojim slucajem prvo aktivira prvi interrupt ( i jos k tome taj interrupt ostane aktivira tj. njegov pin) te pocne izvrsavati svoju funkciju , a dok ju izvrsava aktivira se drugi interrupt koji pak ima svoju funkciju , sto ce se dogodit ? Prvi ce se prekinut kad izvrsi svoju funkciju makar bio on aktiviran vanjskim putem te skocit na drugi pa opet na prvi i tako u krug ?
Ako se ne varam interrupt se treba iskljucit prije negoli ude u svoju predvidenu petlju kako bas iz tog razlog ne prekida sebe ?
Unaprijed zahvaljujem .
Uglavnom , zelio bih se poigrat sa interputima u BascomAVR-u . Nije problem napisat kod da kad detektira promjenu na interrupt pinu , skoci na tu i tu labelu .
Vec me interesira , ako koristim 2 interrupta ( koji se aktiviraju vanjskim putem na za to predvidenim pinovima ) te mi se kojim slucajem prvo aktivira prvi interrupt ( i jos k tome taj interrupt ostane aktivira tj. njegov pin) te pocne izvrsavati svoju funkciju , a dok ju izvrsava aktivira se drugi interrupt koji pak ima svoju funkciju , sto ce se dogodit ? Prvi ce se prekinut kad izvrsi svoju funkciju makar bio on aktiviran vanjskim putem te skocit na drugi pa opet na prvi i tako u krug ?
Ako se ne varam interrupt se treba iskljucit prije negoli ude u svoju predvidenu petlju kako bas iz tog razlog ne prekida sebe ?
Unaprijed zahvaljujem .
Re: BASCOM za totalne neznalice.
Maki, malo si "zabucao" tekst:
Možeš raditi i na način da zaustaviš samo taj interrupt koji se trenutno izvršava, brisanjem njegove zastavice u interrupt registru, pa se neće dogodit slučaj da recimo neko istitravanje pokrene isti interrupt više puta. Na kraju rutine, opet dopustiš taj interrupt.
Ako imaš samo jedan interrupt, možeš prilikom ulaska u rutinu, globalno zaustavit sve interrupte, i na kraju rutine ih opet pokrenut.
Prioritet interrupta je zavisan od pozicije na tabeli njihovih vektora, npr:
RESET je na vektoru 0 i ima najveći prioritet, INT0 je na vektoru (adresi) 2 i ima najveći prioritet iza reseta, slijedeći je INT1 do INT7, timer comp2.... itd.
Moraš vodit računa o tome da se interrupti previše ne preklapaju, jer će brzo doći do stack overflow-a. Dakle urednost kod programiranja je bitna.
Osim toga u Bascomu za AVR imaš iza naredbe ON Interrupt 'adresa interrupta' SAVE, SAVEALL, NOSAVE mogućnost spremanja (SAVE ili SAVEALL), ili ne-spremanja (NOSAVE) svih registara. Ako u programu radiš s matematikom s pokretnim zarezom, onda koristiš SAVEALL. SAVE možeš i izostaviti, jer je to defaultna postavka.
Kao i obično, bio sam kompliciran, pa se nadam da ćeš uspjet barem nešto korisno izvuć iz ove litanije
U pravilu, ako je program počeo izvršavat jedan interrupt, a pojavio se drugi, krenut će izvršavat taj drugi, dok će prvi bit na čekanju dok ne završi ovaj drugi. Ovo je u slučaju ako ne blokiraš interrupte prilikom ulaska u interrupt rutinu.Maki wrote:( i jos k tome taj interrupt ostane aktivira tj. njegov pin)
Možeš raditi i na način da zaustaviš samo taj interrupt koji se trenutno izvršava, brisanjem njegove zastavice u interrupt registru, pa se neće dogodit slučaj da recimo neko istitravanje pokrene isti interrupt više puta. Na kraju rutine, opet dopustiš taj interrupt.
Ako imaš samo jedan interrupt, možeš prilikom ulaska u rutinu, globalno zaustavit sve interrupte, i na kraju rutine ih opet pokrenut.
Prioritet interrupta je zavisan od pozicije na tabeli njihovih vektora, npr:
RESET je na vektoru 0 i ima najveći prioritet, INT0 je na vektoru (adresi) 2 i ima najveći prioritet iza reseta, slijedeći je INT1 do INT7, timer comp2.... itd.
Moraš vodit računa o tome da se interrupti previše ne preklapaju, jer će brzo doći do stack overflow-a. Dakle urednost kod programiranja je bitna.
Osim toga u Bascomu za AVR imaš iza naredbe ON Interrupt 'adresa interrupta' SAVE, SAVEALL, NOSAVE mogućnost spremanja (SAVE ili SAVEALL), ili ne-spremanja (NOSAVE) svih registara. Ako u programu radiš s matematikom s pokretnim zarezom, onda koristiš SAVEALL. SAVE možeš i izostaviti, jer je to defaultna postavka.
Kao i obično, bio sam kompliciran, pa se nadam da ćeš uspjet barem nešto korisno izvuć iz ove litanije
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
Re: BASCOM za totalne neznalice.
Da, ne znam jel taj moj tekst pisalo moje ne znanje ili "znanje" , nadam se da je ne znanje .
Sto se tice objasnjenja , mislim da sam sve shvatio ili vecinu ( ako nisam bit ce sigurno jos pitanja ) .
Jos jednom Hvala .
Sto se tice objasnjenja , mislim da sam sve shvatio ili vecinu ( ako nisam bit ce sigurno jos pitanja ) .
Jos jednom Hvala .
Re: BASCOM za totalne neznalice.
Ukratko:
Autoru teksta "Programiranje u BASCOMU" želim puno dobrih komentara i pitanja ćitalaca. Čestitke na hrabrosti da se uopće krene u tako nešto, u opsežan posao koji za sobom povlače takve teme. I naravno, puno više uspjeha od prošla dva slična pokušaja da se popriča o programiranju MCU-a.
Samo da dodam u temu: save i saveall su očito push/pop naredbe assemblera, spremanje u stog vrijednosti radnih registara. Moj je savjet da ih izbjegavate koristiti ako je ikako moguće. Ionako će ih compiler obilato koristiti iz razumljivih razloga jer autor/autori compilera ne mogu predvidjeti sve opcije definicija radnih registara koje će programeri htjeti koristit pa ih zguraju u stog i ponovo vade u svakoj malo "jačoj" rutini.
U principu, ne znam jesam li to već napisao, compileri rijetko kad koriste kompletam skup radnih registara MCU-a a neki od njih su predefinirani u compileru za određenu funkciju.
Pošto je bascom HPL klasa programer ne mora o tome voditi računa, no dobro bi bilo da to zna.
Pozdrav
Autoru teksta "Programiranje u BASCOMU" želim puno dobrih komentara i pitanja ćitalaca. Čestitke na hrabrosti da se uopće krene u tako nešto, u opsežan posao koji za sobom povlače takve teme. I naravno, puno više uspjeha od prošla dva slična pokušaja da se popriča o programiranju MCU-a.
Samo da dodam u temu: save i saveall su očito push/pop naredbe assemblera, spremanje u stog vrijednosti radnih registara. Moj je savjet da ih izbjegavate koristiti ako je ikako moguće. Ionako će ih compiler obilato koristiti iz razumljivih razloga jer autor/autori compilera ne mogu predvidjeti sve opcije definicija radnih registara koje će programeri htjeti koristit pa ih zguraju u stog i ponovo vade u svakoj malo "jačoj" rutini.
U principu, ne znam jesam li to već napisao, compileri rijetko kad koriste kompletam skup radnih registara MCU-a a neki od njih su predefinirani u compileru za određenu funkciju.
Pošto je bascom HPL klasa programer ne mora o tome voditi računa, no dobro bi bilo da to zna.
Pozdrav
Today's scientists have substituted mathematics for experiments, and they wander off through equation after equation, and eventually build a structure which has no relation to reality.
- Nikola Tesla
- Nikola Tesla
Re: BASCOM za totalne neznalice.
Pozdrav
Evo malo vec dugo vremena ova tema stoji ali na zalost ne stizem zbog obaveza , ali nadam se cim malo zahladi i pocnu kise da ce biti vise vremena pa da se krene dalje , do tada svatko tko zeli onako jednostavno i po seljacki da nastavi sa pisanjem ove teme moze slobodno , jer ja trenutno ne stizem i nadam se da ce te imati razumjevanja za to.
Hvala
Evo malo vec dugo vremena ova tema stoji ali na zalost ne stizem zbog obaveza , ali nadam se cim malo zahladi i pocnu kise da ce biti vise vremena pa da se krene dalje , do tada svatko tko zeli onako jednostavno i po seljacki da nastavi sa pisanjem ove teme moze slobodno , jer ja trenutno ne stizem i nadam se da ce te imati razumjevanja za to.
Hvala
- InTheStillOfTheNight
- Odlično uznapredovao
- Posts: 938
- Joined: 01-06-2006, 17:54
- Location: Zagreb
Re: BASCOM za totalne neznalice.
Moram te ispraviti kolega, čisto zbog boljeg razumjevanja AVR-a. Bilo koji dio periferije prilikom skoka na ISR vektor isključiti će globalni I BIT u SREG-u, dakle kada već dođeš u ISR rutinu globalni prekidi su isključeni i ne može se dogoditi niti jedan drugi prekid dok se ovaj ne odradi. O ovome se brine hardware AVR-a, ali naravno, programer može u samoj ISR rutini uključiti I BIT SREG-a i omogućiti ostale prekide.Kukinjos wrote: U pravilu, ako je program počeo izvršavat jedan interrupt, a pojavio se drugi, krenut će izvršavat taj drugi, dok će prvi bit na čekanju dok ne završi ovaj drugi. Ovo je u slučaju ako ne blokiraš interrupte prilikom ulaska u interrupt rutinu.
To je problem HPL-a jer compiler može, a i ne mora uključiti globalne prekide. U C-u je to vrlo jednostavno regulirano običnim atributom NO_BLOCK kojim compileru kažemo da želimo uključivanje globalnih prekida odmah kada dođemo u prekidnu rutinu.
Pojam dolaska u prekidnu rutinu dosta je rastezljiv kada gledamo iz više programerskih kuteva. Predpostavljam da bi se i buco složio sa mnom da smo u ISR rutini gotovo u trenutku kada smo i na vektrou same rutine jer nas dijeli samo jedna RJMP instrukcija od skoka na rutinu, ali... uvijek postoji ali...
Kod HPL-a moramo znati da prva instrukcija u ISR rutini nije ona koju smo mi napisali, pa čak i uključivanje ili isključivanje globalnih prekida. HPL odradi čuvanje SREG-a i registara na stacku prije nego li vi u BASCOMU uopće dođete do prve "Bascom" instrukcije. Sloboda je kreativaca BASCOMA što će oni napraviti za Vas??? Jer oni su ti koji biraju hoće li u ISR rutiti uključiti globalne prekide nakon što ih je hardware isključio samim skokom na rutinu ili neće.
Dakle, da sam ja pisao BASCOM, nikada ne bih uključio globalne prekide dolaskom u ISR. Hardware ih je i isključio s razlogom. A naravno, ako netko baš želi skakati iz ISR-a na novi vektor, to i sam može jer nigdje ne piše da prva instrukcija u ISR-u ne može biti uključivanje globalnih prekida. No, ako Bascom po default u ISR-u dođe sa uključenim I bitom SREG-a. (Enable global interrupts), onda to stvarno nema smisla i trebalo bi ekipiti bascoma poslati opširniji tekst o prednostima jedne ili druge metode, ali ova sa uključenim I bit-om SREG-a po meni je definitivno lošija.
InTheStillOfTheNight
Re: BASCOM za totalne neznalice.
Kolega u pravu si, odlutao sam s objašnjenjem na neke druge procesore , a to, naravno, piše i u helpu od Bascom AVR-a:
When an interrupt is serviced no other interrupts can occur because the processor(not the compiler) will disable all interrupts by clearing the master interrupt enable bit. When the interrupt is serviced the interrupt is also cleared so that it can occur again when the conditions are met that sets the interrupt.
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
- InTheStillOfTheNight
- Odlično uznapredovao
- Posts: 938
- Joined: 01-06-2006, 17:54
- Location: Zagreb
Re: BASCOM za totalne neznalice.
Događa se, pogotovo kad radiš na više MCU-a, i meni se ponekad svi izmješaju da više u ništa nisam siguran...
InTheStillOfTheNight
Re: BASCOM za totalne neznalice.
Zahvaljujem vam se na obilnoj raspravi o necemu , medjutim , decki kao sto vidite ovdje je rjec o bascom 8051 a ne o AVR , a druga stvar veoma bitna , a ukoliko ste to pratili vjerovatno ste primjetili da mi jos nismo dosli ni do programa veceg od 20 reda a vi ga vec presli maloooooooooo oooohhhhhhhoooooo hoooo dalje od toga.
Nadam se da se ne ljutite obadvojica , kuki zna da sam uporan i dosadan tip , ali ako vec zelite pisati molim vas ako mozete onako od pocetka kako sam ja poceo , na zalost ja zbog obaveza trenutno ne stizem , ali ako ne prije onda po zimi cu da nastavim sa ovim sto sam poceo.
Ali kao sto naslov pise ovo je za totalne neznalice , a vi sa svojim pisanjem daleko , ali jakooooooo daleko odstupate od ovog djela " totalne neznalice " i prije bi za vas dvojicu bilo totalne sveznalice.
Nadam se da se ne ljutite obadvojica , kuki zna da sam uporan i dosadan tip , ali ako vec zelite pisati molim vas ako mozete onako od pocetka kako sam ja poceo , na zalost ja zbog obaveza trenutno ne stizem , ali ako ne prije onda po zimi cu da nastavim sa ovim sto sam poceo.
Ali kao sto naslov pise ovo je za totalne neznalice , a vi sa svojim pisanjem daleko , ali jakooooooo daleko odstupate od ovog djela " totalne neznalice " i prije bi za vas dvojicu bilo totalne sveznalice.