Re: ATmega, zachovaní promxJtubsO9Y2go resetu

Jan Waclawek konfera na efton.sk
Úterý Březen 24 11:43:36 CET 2015


>> >HM, a jste si 100% jistý, ľe tu inicializaci neprovádí AVRko 
>> >hardwarově?
>> >
>> >P.T.
>
>Hm, ok, tak jsem koukal do datashitu (mega 8) a jestli tomu spravne
>rozumim, tak to nuluje jen i/o registry. (Ale ja vedel, ze to neco nuluje :-) )
>

Ak mame byt presni, tak reset
- registre io priestoru nastavuje na pociatocne hodnoty (to neznamena
nulovanie)
  - pre porty to robi okamzite hned ako reset prejde do aktivnej hodnoty,
bez ohladu na hodiny
- nuluje program counter

SRAM ostava pri reste nezmenena, inak by sa nedal dosiahnut startup behom 6
hodin oscilatora, len za cenu komplikovanejsej SRAM (citaj: vyrazne
drahsieho cipu). 

Este som sa nestretol s mcu, kde by sa SRAM pri resete hardwarovo nulovala.
Viem si predstavit adresovaci hardware ktory by ju nuloval rychlejsie ako
software (nieco ako DMA), ale IMO nema zmysel ho aktivovat automaticky pri
resete.

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