c: hi-tech 9,80, interrupt asm
Miroslav Draxal
evik na volny.cz
Čtvrtek Duben 3 12:45:25 CEST 2014
Já nemám problém s tím si to "zoptimalizovat" dopředu sám. Poskládat si to
jak je to asi nejoptimálnější. Jenom jsem se o tom nikde nedočetl. Seděl
jsem nad tím 3 dny a pak z toho vyleze takováhle pitomina.
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Hynek Sladky
Sent: Thursday, April 03, 2014 10:56 AM
To: HW-news
Subject: Re: c: hi-tech 9,80, interrupt asm
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/57892deb/attachment.html>
Další informace o konferenci Hw-list