[elektro] Nuvoton Cortex-M0
hg12345
hg12345 at freemail.hu
Thu Nov 10 19:16:53 CET 2011
Info <info at kiralyelektronika.hu> írta:
>> Az optimalizálás szempontjából teljesen mindegy mit csinál a>
> forditó, ha az NVIC vagy WIC automatikusan menti az első négy>
> regiszert + R12,LR,PC és SP-t, ezen csak ronthat futási időben, de>
> kódban nem :-)>
>
> A CORTEX mag esetén az ASM vagy C programból nem>
> megkülönböztethető a IT vagy függvényhívás, az utomatikus regiszter>
> mentés miatt. (Nem feltünő ez elején a PUSH és végén a POP). Ha nem>
> használsz más regisztert a fenti 8-on kivül akkor bármely függvény>
> lefut mint IT :-) Elvileg a legtöbb perifériánál még az IT>
> nyugtázást is megoldja az NVIC....>
>
No most légy szíves ne terjeszd a butaságot :)>
Mindenkitől egy nagy-nagy elnézést!
Tőled idézek:>
"Ha nem használsz más regisztert a fenti 8-on kivül...">
Igen, mert ha használsz akkor bizony a C forditó PUSH/POP párossal kiegészíti a rutint :-)
Amúgy egy C forditó esetén miközöm van ahhoz, hogy mennyi regisztert használ a forditó?
Lényeg, ha egy rutin kicserélem a nevét (KEIL CMSIS) környezetben egy elöre definiált IT-névre akkor az minden változtatás nélkül lefut. Azt nem mondom, hogy minden uC ez müködik de itt igen!
Lenne egy kérdésem, egy tipusról beszélünk CORTEX M* magról?????
Ennél a tipusnál minden IT automatikus mentéssel kezdödik, ha nem bizol meg a mentésben akkor nyugodtan duplikálhatod az első négy regiszter mentését ez csak 2*5 óraciklusodba kerül IT-nként....
>
tehát benne a HA szócska>
aztán pedig:>
"bármely függvény lefut mint IT">
>
Szóval magad is tudod, hogy a fordító használhatja a többi regisztert>
amit nem feltétlen ment le a fordító/linker. Például van kapcsoló>
arra, hogy egyáltalán ne mentsen: általában __task néven. Ha írok egy>
taszkot ezzel kezdem, így megspórolom a push-pop párost a kódból.>
Továbbra is fontosnak tartom, hogy a fordítóval tudatni kell mely>
funkció fogja félbeszakítani a fő kódot az optimalizálások miatt. Nem>
véletlenül van ez a __interwork vagy __irq kapcsoló.>
A "nem tudom hogyan kell írni" a scratch regiszterek (R0...R3) kiemelten kezeli a C az ARM-oknál. Nem véletlen az CORTEX M, IT ilyenszerű optimalizása.
Az __interwork nem találkoztam az __irq meg a ARM TDMI7 esetén láttam.
Amit ismerek egy picit az KEIL , itt az IT :
void ElőredefiniáltNév(void)
ként kell megírni, az crt.asm itt StartUp-nak hivják itt vannak a nevek definiálva a IT vektorokra, de nincs rá hivatkozás hogy IT vektor, se .S .C és linkerbe se. Ezt könnyű ellenörizni, mert a CORTEX magos uC-nek hatalmas példa program készlete van, és a gyári CMSIS leírás is tartalmaz IT kérelmet a belső 24 bites számlálóhoz....
>
Az eredeti szálhoz visszatérve nem biztos, hogy ez a hiba, csak>
felvetettem. És mint oly soxor bánom, hogy megszólaltam :)>
>
Engem nem zavar, ha másokat sem :-)
>
----------------------------------------->
elektro[-flame|-etc]>
More information about the Elektro
mailing list