ATmega, zachovaní promxJtubsO9Y2go resetu

Petr Stehlik petr.stehlik na atlas.cz
Úterý Březen 24 17:21:26 CET 2015


Díky za popis

Dne 24.3.2015 11:43, Jan Waclawek napsal(a):
> Co sa tyka avr-gcc, nulovanie neinicializovanych premennych tak, ako to
> vyzaduje C99, je zabezpecene tym, ze ich kompilator uklada do sekcie
> COMMON, ktora je zhodna so sekciou .bss, pre ktoru linker vytvori symboly
> pre hranice (explicitne inicializovane premenne idu do sekcie .data, pre
> ktoru tiez linker vytvori symboly pre jej hranice a ulozi ich obsah do
> programovej pamate za samotny program = .text). Tieto symboly vyuziva
> startup kod, ktory oblast medzi tymito hranicami vyplni nulami (a podobne
> inicializuje oblast .data). Tento je ulozeny vo forme object (.o, t.j.
> prelozeny) pre kazdy model individualne v [avr-gcc]/avr/lib/avrN/crtM.o.
> Zdroj je jediny asemblerovsky subor v zdrojakoch avr-libc v
> [avr-libc-src]/crt1/gcrt1.S . Linkovanie startupu sa da potlacit
> prepinacom -nostartfiles.
>
> Ako bolo napisane, v default linker skripte je vytvorena v SRAM sekcia
> .noinit, kam sa daju umiestnovat (explicitnym predpisom atributom
> premennej alebo typu __attribute__((section(".noinit"))) ) premenne ktore
> maju ostat pocas resetu nezmenene; toto je najlahsie a vo vacsine pripadov
> aj najlepsie riesenie. Samozrejme si kazdy moze pre svoj projekt
> napisat/zmodifikovat z defaultneho svoj linker script a v nom vytvorit
> tolko a takych sekcii, kolko chce. Dalsou moznostou je zmodifikovat
> startup kod alebo zmanipulovat symboly rozmedzi sekcie .bss.
>
> wek
>


Další informace o konferenci Hw-list