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