Zásobník

Z MAM wiki

(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(inicializace stack pointru)
(Inicializace stack pointru v různých AVR)
Řá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.
+
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.

Verze z 22. 12. 2010, 17:32

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.

Osobní nástroje