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 

Kaj je register in kaj je stack?

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programiranje embedded sistemov
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
71GA
Član
Član



Pridružen-a: Tor 16 Jun 2009 18:53
Prispevkov: 391
Aktiv.: 2.16
Kraj: Ljubljana

PrispevekObjavljeno: Tor Feb 08, 2011 12:11 pm    Naslov sporočila:  Kaj je register in kaj je stack? Odgovori s citatom

Živijo, mene pa zanima, kaj je to register in kaj je stack? Ali mi lahko kdo pove malo več o tem kje se nahaja kateri izmed obeh.

Hvala.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
NUFAN
Član
Član



Pridružen-a: Pon 05 Apr 2004 21:39
Prispevkov: 947
Aktiv.: 4.25
Kraj: Žalec

PrispevekObjavljeno: Tor Feb 08, 2011 12:32 pm    Naslov sporočila:   Odgovori s citatom

Tukaj je Silvov citat iz te teme.
Silvo je napisal/a:
Še o CALL ter RETURN:
PIC ima 8 nivojski hardverski sklad. To pomeni, da je lahko CALL v globino "vgreznjena" 8X. (v podrutinah je spet dovoljena uporaba istrukcije CALL 8X v "globino" - pa se bo program še vedno znal vrniti nazaj) Torej, če smo poklicali neko rutino z ukazom CALL se vrednost trenutnega programskega števca shrane v "sklad" Ko v tej rutini naletimo na ukaz RETURN (vrnitev) se iz sklada prebere stanje od kot je bila rutina klicanna. Vrši se skok nazaj. Program se nadaljuje v naslednji vrstici. Trajanje instrukcije CALL, GOTO ter RETURN porabi dva ukazna ciklusa. Pri oscilatorju 4Mhz je to 2S


Register si pa lahko predstavljaš kot omaro s predali, v katere lahko shranjuješ podatke, informacije,...

_________________
Roke spadajo k telesu, ne k delu.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Mihec
Član
Član



Pridružen-a: Pet 24 Mar 2006 20:10
Prispevkov: 412
Aktiv.: 1.87
Kraj: Mengeš

PrispevekObjavljeno: Tor Feb 08, 2011 6:28 pm    Naslov sporočila:   Odgovori s citatom

71GA: Če še nisi, svetujem ogled literature profesorja Muniha iz FE. Ima kar lepo napisano "skripto" za ARM7 na višješolskem programu avtomatike. Predmet je Mikroračunalniški sistemi.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
chaos
Član
Član



Pridružen-a: Sob 16 Sep 2006 22:12
Prispevkov: 1063
Aktiv.: 4.96
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Tor Feb 08, 2011 8:43 pm    Naslov sporočila:   Odgovori s citatom

Register je shramba oz. pomnilnik, ki se nahaja v samem jedru procesorja. Načeloma jih je več, in so del t.i. regfile-a. Regfile je ponavadi hardversko implementiran kot posebna vrsta pomnilnika z dvema bralnima in enim pisalnim portom.

Večinoma so procesorji narejeni tako, da zna ALU delati samo z registri - se pravi kakršnakoli logična, aritmetična ali pogojna operacija se izvaja samo nad vrednostmi v registrih (in "takojšnjimi" - immediate vrednostmi). Torej v registrih so shranjene vse spremenljivke, ki jih tvoj program uporablja. Za to, da se spremenljivke nahajajo v registru (ali več njih), bo poskrbel prevajalnik tako, da jih bo pravočasno naložil iz pomnilnika, in po operaciji shranil nazaj v pomnilnik. Če pišeš v zbirniku, jih naložiš sam, npr.

Koda:

ld r1, 0x00100 % naloži pomnilniški naslov 0x00100 v register 1
add r1, 0x1      % povečaj vrednost v registru 1 za 1
st r1, 0x00100  % shrani vrednost v registru 1 na naslov 0x00100


C-jevska koda, ki se približno prevede v zgornji zbirnik, je:
Koda:
val = val + 1;



Stack oz. sklad je ponavadi področje v pomnilniku (ponavadi na koncu pomnilnika), ki se lahko po potrebi veča. Uporablja se za shranjevanje registrov in drugih vrednosti v pomnilnik, kadar npr. v C-ju kličemo funkcijo. Ker ima ta funkcija npr. neke lokalne spremenljivke, je potrebno narediti prostor v registrih, in zato njihove trenutne vrednosti shranimo v stack, in jih po končani funkciji preberemo nazaj. Stack je t.i. LIFO - last in, first out. Z njim se ponavadi dela samo z dvema ukazoma:
- push, ki naloži vrednost v konec stacka (in pomanjša oz. poveča stack pointer)
- pop, ki pobere zadnjo vrednost iz stacka (in popravi stack pointer)
Definitivno rabiš stack, ko se pokliče interrupt handler - takrat moraš namreč shraniti vsaj vse registre, ki se uporabljajo v interrupt handlerju.

Stack se lahko uporablja tudi za funkcijske parametre - odvisno od ABI-ja določenega procesorja.


Še en pomemben konstrukt je pa heap oz. kopica, ki se uporablja za dinamično alocirane spremenljivke.


LP!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
71GA
Član
Član



Pridružen-a: Tor 16 Jun 2009 18:53
Prispevkov: 391
Aktiv.: 2.16
Kraj: Ljubljana

PrispevekObjavljeno: Čet Feb 17, 2011 10:17 am    Naslov sporočila:   Odgovori s citatom

Hvala vsem za razlago. V assemblerju večkrat srečam stavek, ki je opisan spodaj.
Koda:

        .set  UND_STACK_SIZE, 0x00000004

        .set  ABT_STACK_SIZE, 0x00000004

        .set  FIQ_STACK_SIZE, 0x00000004

        .set  IRQ_STACK_SIZE, 0X00000080

        .set  SVC_STACK_SIZE, 0x00000004

Iz zgornje kode sklepam, da velikost stacka določim sam, ali lahko določim tudi lokacijo stacka v pomnilniku in ali lahko določim več stackov? Zanima me, zakaj je zgoraj stack za IRQ večji kot stack za ostale načine delovanja?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
71GA
Član
Član



Pridružen-a: Tor 16 Jun 2009 18:53
Prispevkov: 391
Aktiv.: 2.16
Kraj: Ljubljana

PrispevekObjavljeno: Čet Feb 17, 2011 10:27 am    Naslov sporočila:   Odgovori s citatom

Mihec je napisal/a:
71GA: Če še nisi, svetujem ogled literature profesorja Muniha iz FE. Ima kar lepo napisano "skripto" za ARM7 na višješolskem programu avtomatike. Predmet je Mikroračunalniški sistemi.


Hvala za priporočilo. ali mi lahko mogoče prilepiš link. Drugače pa trenutno berem tole .
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
brum
Član
Član



Pridružen-a: Čet 04 Nov 2010 16:33
Prispevkov: 82
Aktiv.: 0.50
Kraj: Kras

PrispevekObjavljeno: Čet Feb 17, 2011 11:19 am    Naslov sporočila:   Odgovori s citatom

Tukaj imaš skripto od prof. Muniha . mikroračunalniški sistemi.


mikroracunalniski.sistemi.rar
 Opis:
Mikroračunalnipki sistemi

Download
 Ime datoteke:  mikroracunalniski.sistemi.rar
 Velikost datoteke:  3.88 MB
 Downloadano:  31 krat

Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
71GA
Član
Član



Pridružen-a: Tor 16 Jun 2009 18:53
Prispevkov: 391
Aktiv.: 2.16
Kraj: Ljubljana

PrispevekObjavljeno: Ned Feb 20, 2011 2:40 pm    Naslov sporočila:   Odgovori s citatom

brum je napisal/a:
Tukaj imaš skripto od prof. Muniha . mikroračunalniški sistemi.

Sem si prebral priporočeno literaturo. Res je dobro razložen branching in pa tabela klicev. Ugotovil sem tudi, da stack lahko postavimo kjerkoli v pomnilniku, kjer moramo paziti, da en stack ne prepiše drugega.

Hvala res za priporočilo. Me pa zanima, ali imaš kako priporočilo za kako skripto v kateri bi bila razložen postopek bootanja mikroprocesorja. To potrebujem, ker bom izdeloval bare metal programe za ARM9 in potrebujem napisati sam svoj startup file. Me zanima ali kdo ve ali se najprej izvede low level initialization ali startup file. To sta po dosedaj prebranem 2 ključna fajla stvari initializacije.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3351
Aktiv.: 15.02
Kraj: Dragomer

PrispevekObjavljeno: Ned Feb 20, 2011 6:31 pm    Naslov sporočila:   Odgovori s citatom

Hja, ne vem, ampak pri Atmelu je stack vedno na koncu RAM-a. No vsaj Bascom ga položi tja, je najmanj sitnosti, kajti ne smeš ga prekriti z spremeljivkami.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
brum
Član
Član



Pridružen-a: Čet 04 Nov 2010 16:33
Prispevkov: 82
Aktiv.: 0.50
Kraj: Kras

PrispevekObjavljeno: Pon Feb 21, 2011 5:18 pm    Naslov sporočila:   Odgovori s citatom

71GA je napisal/a:
brum je napisal/a:
Tukaj imaš skripto od prof. Muniha . mikroračunalniški sistemi.

Sem si prebral priporočeno literaturo. Res je dobro razložen branching in pa tabela klicev. Ugotovil sem tudi, da stack lahko postavimo kjerkoli v pomnilniku, kjer moramo paziti, da en stack ne prepiše drugega.

Hvala res za priporočilo. Me pa zanima, ali imaš kako priporočilo za kako skripto v kateri bi bila razložen postopek bootanja mikroprocesorja. To potrebujem, ker bom izdeloval bare metal programe za ARM9 in potrebujem napisati sam svoj startup file. Me zanima ali kdo ve ali se najprej izvede low level initialization ali startup file. To sta po dosedaj prebranem 2 ključna fajla stvari initializacije.


Toliko se pa žal še nisem poglobil v to...
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 -> Programiranje embedded sistemov Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
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: 78 dni


Powered by phpBB © 2001, 2005 phpBB Group