www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Programiranje AVR v asemblerju
Pojdi na stran Prejšnja  1, 2, 3, 4, 5  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
spy
Član
Član



Pridružen-a: Sre 06 Sep 2006 20:43
Prispevkov: 403
Aktiv.: 1.76
Kraj: Tržič

PrispevekObjavljeno: Čet Sep 25, 2008 8:58 am    Naslov sporočila:   Odgovori s citatom

Prevajalnik ne more zaznati kdaj sklad povozi uporabne podatke v ramu. Zaznaš pa lahko ti med delovanjem programa, ko se kar naenkrat program obesi. Napaka je precej očitna. Meni se je to zgodilo že nekajkrat, pa sem takoj vedel, kam program "taco moli". Stara serija AVRjev, recimo 901200 je imela 3 nivojski HW sklad - tam šele izgubljaš živce Rolling Eyes

Prvi nivo sklada enostavno prebereš tam, kjer si definiral začetek sklada.

Direktno dostopni registri pri AVRju so vsi, niso pa vsi direktno vpisljivi. Verjetno si to mislil. To ima črno piko tudi pri meni. Vendar se v Cju zaradi tega ne sekiraš več.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Čet Sep 25, 2008 2:51 pm    Naslov sporočila:   Odgovori s citatom

Citiram:

Direktno dostopni registri pri AVRju so vsi, niso pa vsi direktno vpisljivi. Verjetno si to mislil. To ima črno piko tudi pri meni...


Da, to sem mislil.

Načrtovalci mikorokontrolerjev se bi morali združiti. S kombinacijo PIC-a ter AVR-ja bi nastal dober dober mikrokontroler.... Laughing

Sicer hvala za odgovore.

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Ned Okt 19, 2008 5:35 pm    Naslov sporočila:   Odgovori s citatom

Še eno vprašanje glede sklada. (zadevo bom sicer testiral v praksi , ko pridem do delavnice)
Kaj se zgodi, če registra ki smo ga potisnili v sklad v podrutini (rcall) iz sklada ne potegnemo preden rutino zapustimo (ret). Prevajalnik sicer ne javi napake - simulator pa se "čudno" obnaša - skoči na reset vektor. Se procesor dejansko resetira?


PS
Zadeva sicer ni smiselna - ampak taka programska napaka lahko naredi kar nekaj sivih las, ker prevajalnik ne javi napake.

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Glitch
Član
Član



Pridružen-a: Pet 07 Apr 2006 11:40
Prispevkov: 1477
Aktiv.: 6.32

PrispevekObjavljeno: Ned Okt 19, 2008 6:10 pm    Naslov sporočila:   Odgovori s citatom

Zakaj bi prevajalnik javil napako? Kaj pa, če želiš namerno manipulirati s stackom?

Nekaj branja na to temo: http://www.cs.uakron.edu/~margush/306/ppt/06stackNcall.ppt

_________________
Answers: $1, Short: $5, Correct: $25, dumb looks are still free.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Ned Okt 19, 2008 6:24 pm    Naslov sporočila:   Odgovori s citatom

Glitch je napisal/a:
Zakaj bi prevajalnik javil napako? Kaj pa, če želiš namerno manipulirati s stackom?

Nekaj branja na to temo: http://www.cs.uakron.edu/~margush/306/ppt/06stackNcall.ppt


Mogoče sem se narodno izrazil - lahko bi javil opozorilo. Sicer pa sem zadevo poskusil v praksi. Zgoraj napisano privede do reseta mikrokontrolerja-kot to stori simulator. (testiral na tiny13)

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.71
Kraj: Kranj - struževo

PrispevekObjavljeno: Pon Okt 20, 2008 9:18 am    Naslov sporočila:   Odgovori s citatom

Program skoči na tisto lokacijo, ki si jo vpisal v v stack s spremenljivko.
Tako bi lahko naredil programsko "look-up" tabelo.
Začetek tabele + željen offset daš v spremenljivko, narediš PUSH in nato RET. Program bo skočil na vrednost, ki je zapisana na stacku.

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Pon Okt 20, 2008 3:25 pm    Naslov sporočila:   Odgovori s citatom

Aljaž, ne vem, če sva se razumela.

Glej primer takega programa:

.
Koda:
include "tn13def.inc"

.org 0
   rjmp Glavni

.org 0x13
Glavni:
   ldi r16,100
   sts $60,r16
   ldi r16,low(ramend)
   out spl,r16
   ldi r16,1
   push r16
   ldi r16,2
   push r16
   ldi r17,3
   rcall test
   push r17
   pop r16
   ldi r17,4
   push r17
   pop r16
   lds r2,$9d
   nop
   nop
   
test:
      ldi r20,10
      push r20               ;r20 v sklad
     rcall test1
     ret

   
   
 test1:
 nop
 ret



Iz glavne rutine kličem rutino test. V rutini 'test' "potisnem" r20 v sklad.
Nato kličem še eno rutino 'test2'. ret normalno vrača v rutino test. Če tam r20 ne "poberem" potem ret rutine test vrača kazalček na reset.



_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
spy
Član
Član



Pridružen-a: Sre 06 Sep 2006 20:43
Prispevkov: 403
Aktiv.: 1.76
Kraj: Tržič

PrispevekObjavljeno: Pon Okt 20, 2008 4:03 pm    Naslov sporočila:   Odgovori s citatom

Seveda Silvo. Pobrkljal si stack. RCALL ukaz na stack vrže trenutni PC, RET pa iz stacka vzame naslov in ga da v PC (btw, RETI ti poleg še I-bit briše).

Upravljanje s stackom se dopušča zaradi veliko pozitivnih stvari, kot ti jih je recimo omenil Aly. Zato prevajalnik ne zajamra. Vedeti pa moraš kaj delaš. Vsakemu PUSHu mora slediti POP, preden kdo drug kaj počne s stackom. V nasprotnem so skoki nepredvideni (vendar čisto normalni s stališča uC-ja). Poglej, kaj čaka na stacku tik preden pride RET.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Pon Okt 20, 2008 4:09 pm    Naslov sporočila:   Odgovori s citatom

Kako zadeva deluje čisto razumem. Tak "odprt" sklad se da seveda dobro izkoristiti, seveda pa moraš vedeti kaj delaš.
_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Pon Okt 20, 2008 4:48 pm    Naslov sporočila:   Odgovori s citatom

Tale AVR assembler mi je čedalje bolj všeč. Poskusil sem malo "šariti" po skladu, tako da ret iz rutine 'test' vrača PC-5.

Koda:
.org 0
   rjmp Glavni

.org 0x13
Glavni:
   ldi r16,100
   sts $60,r16
   ldi r16,low(ramend)
   out spl,r16
   ldi r16,1
   push r16
   ldi r16,2
   push r16
   ldi r17,3
   rcall test
   push r17
   pop r16
   ldi r17,4
   push r17
   pop r16
   lds r2,$9d
   nop
   nop
   
test:
   in r16,spl
   ldi r17,2
   add r16,r17
   clr zh
   mov zl,r16
   ld r17,z
   subi r17,5
   st z,r17

 rcall test1
 ret

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
spy
Član
Član



Pridružen-a: Sre 06 Sep 2006 20:43
Prispevkov: 403
Aktiv.: 1.76
Kraj: Tržič

PrispevekObjavljeno: Pon Okt 20, 2008 6:35 pm    Naslov sporočila:   Odgovori s citatom

A pri PIC-ih ne moreš takole šariti po stack-u?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Pon Okt 20, 2008 6:51 pm    Naslov sporočila:   Odgovori s citatom

Pri manjsih (ki imajo locen HW stack, do katerega dostopas samo preko cisto specificnih ukazov call/return in retfie) ne, pri vecjih, ki imajo ali dostop do stacka (18F) ali pa stack implementiran v RAMu (24 in dsPIC) pa seveda lahko.
_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Ned Jan 04, 2009 11:21 pm    Naslov sporočila:   Odgovori s citatom

Spet ena assemblerska. Pri Tiny13 bi želel uporabit timer0. Zastavica TOV0 (overflow) se postavi. Kako jo izbrisati, če se ne uporablja prekinitev?
_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Ned Jan 04, 2009 11:24 pm    Naslov sporočila:   Odgovori s citatom

Silvo je napisal/a:
Spet ena assemblerska. Pri Tiny13 bi želel uporabit timer0. Zastavica TOV0 (overflow) se postavi. Kako jo izbrisati, če se ne uporablja prekinitev?


Našel. Sicer malo nelogično - obriše se, ko jo prepišeš z 1 a dela Cool

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
damjanmi
Član
Član



Pridružen-a: Ned 15 Jan 2006 19:19
Prispevkov: 45
Aktiv.: 0.19

PrispevekObjavljeno: Ned Jan 04, 2009 11:27 pm    Naslov sporočila:   Odgovori s citatom

Uporabis lahko sbi (set bit in I/O register).

Ups....malo prepozen odgovor Smile
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2, 3, 4, 5  Naslednja
Stran 4 od 5

 
Pojdi na:  
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
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 492 dni


Powered by phpBB © 2001, 2005 phpBB Group