Zásobník

Z MAM wiki

(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
m (link)
m (bold, překlad)
 
Řádka 1: Řádka 1:
'''Zásobník''' (stack) slouží především k ukládání návratových adres při volání podprogramů. U nejmenších procesorů je realizován několika speciálními registry, u větších je v [[RAM]]. Pokud vám program v malém AVR fungoval a ve velkém se nevrací z podprogramů, chybí inicializace Stack Pointru.
'''Zásobník''' (stack) slouží především k ukládání návratových adres při volání podprogramů. U nejmenších procesorů je realizován několika speciálními registry, u větších je v [[RAM]]. Pokud vám program v malém AVR fungoval a ve velkém se nevrací z podprogramů, chybí inicializace Stack Pointru.
-
Stack pointer je realizován dvojicí registrů SPH:SPL, do kterých je možno zapisovat instrukcí OUT a číst je lze instrukcí IN. V jednoduchém programu potřebujeme jen inicializaci instrukcemi OUT na začátku programu. Inicializace je opravdu nutná třeba u procesoru [[ATmega8]], který má po zapnutí ve stack pointru nulu, tedy adresu mimo RAM. Novější [[ATmega88 a ATmega168]] tam mají hodnotu RAMEND, kterou lze ponechat beze změny a zásobník rovnou začít používat bez inicializace. Starší malé procesory jako ATtiny15L také nepotřebovaly inicializaci stack pointru, ba ani to nebylo možné, protože zásobník vůbec nebyl v RAM - měl jen několik úrovní a byl realizován speciálními registry. ATtiny25, který je doporučenou náhradou za ATtiny15L, je již v tomto ohledu stejný jako [[ATmega88]].
+
'''Stack pointer''' (ukazatel zásobníku) je realizován dvojicí registrů SPH:SPL, do kterých je možno zapisovat instrukcí OUT a číst je lze instrukcí IN. V jednoduchém programu potřebujeme jen inicializaci instrukcemi OUT na začátku programu. Inicializace je opravdu nutná třeba u procesoru [[ATmega8]], který má po zapnutí ve stack pointru nulu, tedy adresu mimo RAM. Novější [[ATmega88 a ATmega168]] tam mají hodnotu RAMEND, kterou lze ponechat beze změny a zásobník rovnou začít používat bez inicializace. Starší malé procesory jako ATtiny15L také nepotřebovaly inicializaci stack pointru, ba ani to nebylo možné, protože zásobník vůbec nebyl v RAM - měl jen několik úrovní a byl realizován speciálními registry. ATtiny25, který je doporučenou náhradou za ATtiny15L, je již v tomto ohledu stejný jako [[ATmega88]].

Aktuální verze z 12. 1. 2011, 11:14

Zásobník (stack) slouží především k ukládání návratových adres při volání podprogramů. U nejmenších procesorů je realizován několika speciálními registry, u větších je v RAM. Pokud vám program v malém AVR fungoval a ve velkém se nevrací z podprogramů, chybí inicializace Stack Pointru.

Stack pointer (ukazatel zásobníku) je realizován dvojicí registrů SPH:SPL, do kterých je možno zapisovat instrukcí OUT a číst je lze instrukcí IN. V jednoduchém programu potřebujeme jen inicializaci instrukcemi OUT na začátku programu. Inicializace je opravdu nutná třeba u procesoru ATmega8, který má po zapnutí ve stack pointru nulu, tedy adresu mimo RAM. Novější ATmega88 a ATmega168 tam mají hodnotu RAMEND, kterou lze ponechat beze změny a zásobník rovnou začít používat bez inicializace. Starší malé procesory jako ATtiny15L také nepotřebovaly inicializaci stack pointru, ba ani to nebylo možné, protože zásobník vůbec nebyl v RAM - měl jen několik úrovní a byl realizován speciálními registry. ATtiny25, který je doporučenou náhradou za ATtiny15L, je již v tomto ohledu stejný jako ATmega88.

Osobní nástroje