Differences

This shows you the differences between two versions of the page.

ohjeita:avr-gcc [2014/12/06 06:00]
hrst
ohjeita:avr-gcc [2014/12/06 06:04] (current)
hrst
Line 19: Line 19:
 ===== main-funktion push/pop ===== ===== main-funktion push/pop =====
  
-Mikrokontrollerimaailmassa main-funktion ympärillä ei ole mitään sellaista prosessorin tilaa, joka täytyisi säilyttää, mutta tätä kääntäjä ei automaattisesti ymmärrä. Kääntäjä noudattaa tiukasti C-standardia, ja varmuuden vuoksi tallentaa kaikki mainissa käytetyt rekisterit stackiin. Tämä vie ohjelmamuistia mutta erityisesti tämä vie rammia tavalla, joka on ohjelmoijan vaikea ymmärtää/muistaa/tietää muuta kuin vilkaisemalla assembly-listausta ja näkemällä kasan täysin järjettömiä PUSHeja. Asia korjaantuu seuraavasti:+Mikrokontrollerimaailmassa main-funktion ympärillä ei ole mitään sellaista prosessorin tilaa, joka täytyisi säilyttää, mutta tätä kääntäjä ei automaattisesti ymmärrä. Kääntäjä noudattaa tiukasti C-standardia, ja varmuuden vuoksi tallentaa kaikki mainissa käytetyt rekisterit stackiin. Tämä vie ohjelmamuistia mutta erityisesti tämä vie rammia tavalla, joka on ohjelmoijan vaikea ymmärtää/muistaa/tietää muuta kuin vilkaisemalla assembly-listausta ja näkemällä kasan täysin järjettömiä PUSHeja. Esim. Tiny25:ssä on 128 tavua rammia josta tämä ominaisuus voi syödä jopa 20%! Asia korjataan seuraavasti:
  
 <code>int main() __attribute__((noreturn)); <code>int main() __attribute__((noreturn));
 
ohjeita/avr-gcc.txt · Last modified: 2014/12/06 06:04 by hrst
 
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki