c: hi-tech 9,80, interrupt asm

Hynek Sladky econf na centrum.cz
Čtvrtek Duben 3 10:56:26 CEST 2014


Par myslenek, ktere me jeste k tematu napadly:

Obcas je dobre se divat, jak ty ktere kompilatory funguji (pripadne 
nefunguji) a podle toho psat pro ne kod. Bohuzel pak muze byt projekt 
obtizne prenositelny na jiny procesor...

Napr. pokud je funkce pouzita pouze v jednom modulu, je vhodne ji 
oznacit atributem static. Vetsinou to pomuze zlepsit vysledek 
optimalizace. Jinak prekladac ceka, ze muze byt funkce volana i odjinud, 
tak se pak k ni chova jinak... Optimalizace jsou IMHO provadene vzdy na 
jednom modulu. Linker uz s tim nic nedela.

U prekladace Hi-Tech jsem narazil na problem funkce, ktera je volana jak 
z preruseni, tak z hlavniho programu: prekladac neumi vyrobit (nebo 
aspon neumel, kdyz jsem to pred par lety resil) reentrantni funkci 
bezpecnou pro oboje pouziti (duvodem je neexistence datoveho stacku a 
tudiz alokace lokalnich promennych na pevne adresy). Po mnohych 
konzultacich s podporou byl jediny vysledek: napsat si dve identicke 
funkce s ruznymi nazvy a jednu volat z preruseni, druhou z hlavniho 
programu.


Hynek Sladky


Dne 3.4.2014 9:31, Tomáš Hamouz napsal(a):
> Jestli po tom kompilátoru nechcete moc.
>
> Pokud by se měl chovat tak jak píšete, tak by musel kompilovat
> dvakrát, poprvé když narazí na danou funkci a podruhé, když už ví
> jaké další funkce volá. Protože ve vašem případě v okamžiku kompilace
> o volané funkci nic neví, počítá s nejhorší variantou.
>
> Linker jen doplní adresy externích objektů, ale do vlastního kódu
> funkce už nezasahuje.
>
> Tomáš
>
>
>> To je logická domněnka, Já myslel, že si to nejdřív všechno připraví a pak
>> to slinkuje dohromady. V té přípravě jsem předpokládal, že si právě osahá
>> všechny funkce. Pravdou je, pokud se podívám na "profi" programy od
>> Microchipu, tak veškeré podprogramy jsou na začátku a samotná hlavní
>> procedura, která volá podprogramy je vždy na konci. Takže asi tohle bude
>> důvod. Díky!!!
>

------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20140403/64fc0eb3/attachment.html>


Další informace o konferenci Hw-list