STM32L162 reset time

Josef Štengl ok1ced na nagano.cz
Pondělí Únor 10 20:36:21 CET 2014


C ze specifikace předpokládá, že všechny statické a globální proměnné jsou před main() inicializovány na nulu. Je to 
výchozí stav a zajišťuje to překladač.

Takže, pokud to vyhodíte, tak jste si měl být jistý, že máte všechny tyto proměnné inicializované a někde s tím nepočítáte.

Pokud používáte cizí knihovny, tak inicializovat jen oblast paměti těchto knihoven.

ced

PS.:
L_loopDW: vypadá na inicializaci proměnných knihovny.

dalo by se to trošku optimalizovat:
nevím, proč je to čtené po bytech; asi kvůli překladu, protože, jestli si dobře vzpomínám, může být problém na některých 
armech načítat nezarovnaný kód z flešky. Můžete vyzkoušet místo LDRB dát LRD (resp STRB /STR) a přičítat 4. Pokud se to 
sekne, tak to nejde, ale zde je to zarovnáno, tak by to mohlo jít.

L_loopFZs: začít od 0486
-> R11      0x 2000 0486

Ale je to jen 1/12 času.

pokud ARM mode, tak je ještě možno použít STM funkci podobně jako pro stack, má to menší latence. Ale tím si nejsem jistý, 
protože cortex M jsem moc nestudoval; má jinou sběrnici. Ale zase o dost kratší manuál :-)



Dne 10.2.2014 19:31, Fanda Kopriva napsal(a):
> Pro zajimavost ,ale jestli tomu dobre rozumim ???
> Na zacatku nuluje vsechny promenne od R11 do R10  po longintech asi 10ms
> to by se asi dalo vyhodit ,ale zatim nevim jak a nevim jestli s tim nepocitaji jejich knihovny
> R9        0
> R11      0x 2000 0000
> R10      0x 2000 36AC       posledni moje promenna
>
> L_loopFZs:
> 0xA81E        0xF84B9B04  STR        R9, [R11], #4      R11++ = 0
na adresu R11 se zapíše R9  a R11 se inkremente o 4 (word)
> 0xA822        0xEBBB0F0A  CMP        R11, R10, LSL #0
Porovná se R11 a R10. To LSL je nějaké divné, platná hodnota je mezi 1 a 31 (takže ignorovat)
> 0xA826        0xD1FA    BNE L_loopFZs                                                    asi 3500 pruchodu
dokud se to nerovná tak ... přesně 3500 průchodu :-)
>
> potom kopiruje po bytech  neco z flash(asi nakonci programu)  do zacatku RAM  asi 5ms
> to by se asi dalo delat po longintech ale taky nevim jak to tam dostat
> R11  0x2000 0000
> R12  0xCA84
> R10  0x2000 0485
>
> L_loopDW:
> 0xA7F2        0xF81C9B01  LDRB        R9, [R12], #1
nahraje se z adresy R12 do R9 a inc R12 o 1
> 0xA7F6        0xF80B9B01  STRB        R9, [R11], #1 R11++ = R12++
uloží se do adresy R11 hodnota z R9 a R11 se inc o 1
> 0xA7FA        0xEBBB0F0A  CMP        R11, R10, LSL #0
Porovná se R11 a R10.
> 0xA7FE        0xD1F8    BNE        L_loopDW asi  1200 pruchodu
dokud se to nerovná tak ... 1158x
>
> Je to v knihovne    Lib_System_15X.c   a  ta nema zdrojak.
> Zkusim neco vyradit natvrdo v tom prelozenym souboru
>
> Fanda
>
>
>
>
> Dne 10.2.2014 16:35, Jan Waclawek napsal(a):
>> A to nie je Vase pole ako premenna v C? Mozno dotiahnuta nejakou kniznicou?
>>
>>> poslednich 15ms je na ucet MIKROE kde inicializuje nejaky velky pole.
>> wek
>>
>>
>> ----- Original Message ---------------
>>
>>> Dne 10.2.2014 14:27, Jan Waclawek napsal(a):
>>>>> proto¾e je ten reset pin pøipojen pøes RC èlen s
>>>>> nábìhem cca 5ms,
>>>> Ozaj, a taketo nieco (velky C na reset pine) nemoze byt pricina povodneho
>>>> problemu?
>>> Tak diky vsem za ochotu.
>>> prvni 3ms jsou dany asi procesorem
>>> dalsich 30ms jsem si kopnul sam kondenzatorem 1uF v NRST
>>> a poslednich 15ms je na ucet MIKROE kde inicializuje nejaky velky pole.
>>> Je to knihovna v ASM pripojena na zacatek programu tak to zkusim nejak
>>> obejit.
>>> Fanda
>>>
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>>
>
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>


Další informace o konferenci Hw-list