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