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

Petr Labaj labaj na volny.cz
Pondělí Srpen 8 15:56:42 CEST 2016


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 :-)



Další informace o konferenci Hw-list