Interrupt AVR

Miroslav Mraz mraz na seznam.cz
Pátek Duben 11 12:32:40 CEST 2014


Když už jsme u toho, proč on to ten překladač vlastně dělá ? Jak jsem 
zběžně koukal do toho, co gcc vyplodí za asm (pro ARM, ale pro AVR to 
asi bude podobné), tak na začátku funkce uloží na zásobník jen ty 
registry, které se v průběhu funkce mění a na konci je opět obnoví, což 
je konzistentní i při vnořeném volání. Tedy pokud je ABI nepoužívá k 
předání parametrů funkce nebo návratové hodnoty. Takže po volání void 
funkce (void) jsou registry ve stavu jako před ním. A z tohoto hlediska 
je přerušení void funkce (void) stejná jako jakákoli jiná, jen nevíme 
odkud je volána. Ale to je celkem fuk.
Marně přemýšlím, proč by se tedy mělo v přerušení ukládat ještě něco 
jiného, když po návratu z něj budou popsaným způsobem registry vždy v 
původním stavu. Asi mi něco uniká.

Mrazík

On 04/11/2014 08:26 AM, HUDA volny wrote:
> Dobrý den,
>
> používám GCC překladač pro ATTiny a potřeboval bych
> mu říct, aby u jednoho přerušení neukládal automaticky
> registry. Obsluhu napíšu v asm. Jsou to 4 řádky.
> Překladač to ale obalí push a pop instrukcemi, které
> jsou delší než vlastní kód.
>



Další informace o konferenci Hw-list