|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
71GA Član
Pridružen-a: Tor 16 Jun 2009 18:53 Prispevkov: 391 Aktiv.: 2.16 Kraj: Ljubljana
|
Objavljeno: Tor Feb 08, 2011 12:11 pm Naslov sporočila: Kaj je register in kaj je stack? |
|
|
Ž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 |
|
|
NUFAN Član
Pridružen-a: Pon 05 Apr 2004 21:39 Prispevkov: 947 Aktiv.: 4.25 Kraj: Žalec
|
Objavljeno: Tor Feb 08, 2011 12:32 pm Naslov sporočila: |
|
|
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 |
|
|
Mihec Član
Pridružen-a: Pet 24 Mar 2006 20:10 Prispevkov: 412 Aktiv.: 1.87 Kraj: Mengeš
|
Objavljeno: Tor Feb 08, 2011 6:28 pm Naslov sporočila: |
|
|
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 |
|
|
chaos Član
Pridružen-a: Sob 16 Sep 2006 22:12 Prispevkov: 1063 Aktiv.: 4.96 Kraj: Zagorje ob Savi
|
Objavljeno: Tor Feb 08, 2011 8:43 pm Naslov sporočila: |
|
|
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:
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 |
|
|
71GA Član
Pridružen-a: Tor 16 Jun 2009 18:53 Prispevkov: 391 Aktiv.: 2.16 Kraj: Ljubljana
|
Objavljeno: Čet Feb 17, 2011 10:17 am Naslov sporočila: |
|
|
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 |
|
|
71GA Član
Pridružen-a: Tor 16 Jun 2009 18:53 Prispevkov: 391 Aktiv.: 2.16 Kraj: Ljubljana
|
Objavljeno: Čet Feb 17, 2011 10:27 am Naslov sporočila: |
|
|
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 |
|
|
brum Član
Pridružen-a: Čet 04 Nov 2010 16:33 Prispevkov: 82 Aktiv.: 0.50 Kraj: Kras
|
Objavljeno: Čet Feb 17, 2011 11:19 am Naslov sporočila: |
|
|
Tukaj imaš skripto od prof. Muniha . mikroračunalniški sistemi.
Opis: |
Mikroračunalnipki sistemi |
|
Download |
Ime datoteke: |
mikroracunalniski.sistemi.rar |
Velikost datoteke: |
3.88 MB |
Downloadano: |
31 krat |
|
|
Nazaj na vrh |
|
|
71GA Član
Pridružen-a: Tor 16 Jun 2009 18:53 Prispevkov: 391 Aktiv.: 2.16 Kraj: Ljubljana
|
Objavljeno: Ned Feb 20, 2011 2:40 pm Naslov sporočila: |
|
|
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 |
|
|
vilko Član
Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3351 Aktiv.: 15.02 Kraj: Dragomer
|
Objavljeno: Ned Feb 20, 2011 6:31 pm Naslov sporočila: |
|
|
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 |
|
|
brum Član
Pridružen-a: Čet 04 Nov 2010 16:33 Prispevkov: 82 Aktiv.: 0.50 Kraj: Kras
|
Objavljeno: Pon Feb 21, 2011 5:18 pm Naslov sporočila: |
|
|
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 |
|
|
|
|
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
|