<html>
<head>
<meta content="text/html; charset=ISO-8859-2"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<font face="Helvetica, Arial, sans-serif">Par myslenek, ktere me
jeste k tematu napadly:<br>
<br>
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...<br>
<br>
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.<br>
<br>
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.<br>
<br>
<br>
Hynek Sladky<br>
<br>
<br>
</font>
<div class="moz-cite-prefix">Dne 3.4.2014 9:31, Tomáš Hamouz
napsal(a):<br>
</div>
<blockquote cite="mid:825959323.20140403093129@divesoft.cz"
type="cite">
<pre wrap="">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áš
</pre>
<blockquote type="cite">
<pre wrap="">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!!!
</pre>
</blockquote>
<br>
</blockquote>
<br>
</body>
</html>