Re: Statická knihovna (objektový soubor) a vektory přerušeni (reset)

Josef Štengl ok1ced na nagano.cz
Pondělí Srpen 8 16:18:12 CEST 2016


Pěstování rajčat jsem vzdal. Jsem líný a vždycky to chytlo plíšeň. Možná za 20 let v důchodu. S nějakým robůtkem :-)

Vidíme to stejně. Jen je problém s linkováním ne překladem. Není problém to přidat, funguje to, ale je to 100% práce 
navíc. Je to takové ... ponižující :-)

Jen jsem zkoušel, jestli na to někdo nenarazil. Ale to je asi problém kompilátoru (jak jsem psal používám překladač od TI, 
ať se mi to líbí nebo ne).


Dne 8.8.2016 v 15:56 Petr Labaj napsal(a):
> Evidentně to vysoce přesahuje mé mentální možnosti, protože nejsem ani
> schopen pochopit, kde je problém. Asi bych se měl na staré roky raději
> věnovat pěstování rajčat a nesnažit se o nějaké programování.  :-(
>
> Já v tom vidím to, že zádrhel je s kompilací a přilinkováním nějakého
> startup modulu, který je v ASM (což ale zřejmě nehraje roli).
>
> Přece není problém ten maličký startup překládat vždy s aplikací, kdyby
> to nešlo jinak.
> Ale určitě to jde i jinak. Já si startup překládám taky jen jednou, strčím
> ho do knihovny a pak se normálně linkuje jako jakýkoli jiný modul.
> Ale jak už jsem psal, asi je v tom u Vás nějaký zádrhel, který v tom
> zatím prostě neumím najít.
>
> PL
>
> *******************************
>
> Dne 8.8.2016 v 15:29 Josef Štengl napsal(a):
>> Snažím se vytvořit vrstvu ovladačů nad daným, poměrně komplexním HW.
>>
>> Cortext-r (cortex-m to má asi trochu jinak, tam to budu studovat koncem tohoto týdne a je to jiný problém) má 8
>> základních vektorů přerušení.
>> První je reset, jeden SVC (systémový), jeden rezerva, 3 x chybové a poslední dva jsou vlastně pevné - adresa do RAM s
>> vektory přerušení od periférií - takže se vektory od periférií dají snadno měnit za běhu svého programu (aplikace),
>> pokud je to potřeba.
>>
>> Takže ten kdo řeší aplikaci, nemusí (a ani nechci - chci vědět kde se to zbořilo a ne ‚máš to rozbitý‘) aby měnil nebo
>> psal obsluhy na základní vektory. Vlastně se zabývá jen programem v main() a obsluhou chyb (většinou ani to ne). Zbytek
>> má schovaný knihovně.
>>
>> O přerušení se nestará, jediné co je většinou zajímá je přerušení od časovače a to ve stylu‚ tuto funkci volej každých
>> xx µs' - a funkce se zapíše do správného místa v tabulce přerušení v RAM (ta je tam by design, tak proč ji nevyužít).
>> Zbytek dostanou s knihovnou.
>>
>>
>> Problém mám vlastně jen s tímto malým kuse kódu v asm, který se má nahrát na začátek FLASH/RAM (podle jak se přepnou
>> paměti. Je to jedno, vždycky reset vektor začíná na 0 :-).
>>
>> Doufám, že je to pochopitelné, gcc používá mírně odlišnou syntaxi, kterou si už nevybavuji.
>>
>> +++++++++++++++++++++
>>   .sect ".intvecs"
>>   .arm
>>
>> ;-------------------------------------------------------------------------------
>> ; import reference for interrupt routines
>> ;-------------------------------------------------------------------------------
>>
>>   .ref _c_int00
>>   .ref sys_ErrUndefinedIsr
>>   .ref sys_ErrPrefetchError
>>   .ref r4f_PrefetchIsr
>>   .ref r4f_DabortIsr
>>
>> ;-------------------------------------------------------------------------------
>> ; interrupt vectors
>> ;-------------------------------------------------------------------------------
>>
>>     b   _c_int00             ; reset interrupt
>>     b   sys_ErrUndefinedIsr  ; undefined instruction interrupt
>> svcEntry
>>     b   svcEntry             ; software interrupt
>>     b   sys_ErrPrefetchError ; abort (prefetch) interrupt
>>     b   r4f_DabortIsr        ; abort (data) interrupt
>> reservedEntry
>>     b   reservedEntry        ; reserved
>>     ldr pc,[pc,#-0x1b0]      ; IRQ interrupt (VIM table)
>>     ldr pc,[pc,#-0x1b0]      ; FIQ interrupt (VIM table)
>>
>> +++++++++++++++++++++
>>
>> Poslední dva řádky znamenají skok na adresu, kde jsou v RAM uloženy vektory od přerušení periférií a jsou vždy stejné
>> (kdysi jsem věděl i proč).
>>
>> Pro zbytek mám napsané rutiny, které vyčítají další informace zapisují se a volají weak funkce podle toho kde nastal
>> problém - aplikace pak může pak jednoduše zpracovat předpřipravená data a nemusí starat o implementační detaily dané
>> architektury a patlat se v ASM (na rozdíl od cortexu-m se nelze zcela vyhnout assembleru, protože se v obsluhách
>> přistupuje k registrům koprocesoru).
>>
>> Aha, jde mi vlastně o to, jestli lze mít ve statické knihovně sekci (zde ".intvecs"), kterou bude vždy zapisovat.
>>
>> Ano máte pravdu, taky jsem se mohl zeptat rovnou. Ale když já tak nějak nevím, co vlastně chci a jestli je to vůbec
>> možné tak doufám, že mě někdo nakopne správným směrem. Zatím se vám to daří, jdu pátrat dále :-)
>
> _______________________________________________
> 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