<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<div class="moz-cite-prefix">A dokonce i pri vicenasobnem pouziti.
Neresil bych problemy, ktere ma v popisu prace optimalizace
kompilatoru. A cim vic textu, tim casto lip a prehledneji...</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">Dne 21.04.2020 v 20:10 Miro su
napsal(a):<br>
</div>
<blockquote type="cite"
cite="mid:CABPWwZGw7+RGfW7Fz02pa3R=CvAX=0_AHXwHpEoAK2GC4RXWHA@mail.gmail.com">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<div dir="auto">Niektore kompilatory urobia inline aj pri
funkciach kde je obsluha vacsia ako samotna funkcia.
<div dir="auto"><br>
</div>
<div dir="auto">Miro</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Tue, 21 Apr 2020, 15:37
Tomáš Hamouz, <<a href="mailto:tomas.hamouz@divesoft.com"
moz-do-not-send="true">tomas.hamouz@divesoft.com</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div>
<span style="font-family:'Courier New';font-size:10pt">A
navíc slušný kompilátor inlinuje zcela automaticky funkci,
která je static a použitá jen jednou.<br>
<br>
Tomáš<br>
<br>
<br>
</span>
<table>
<tbody>
<tr>
<td width="2" bgcolor="#0000ff"><br>
</td>
<td width="522"><span style="font-family:'courier
new';font-size:10pt">k tomu prave slouzi treba ten
inline<br>
<br>
t<br>
<br>
21. 4. 2020 v 14:42, Vláďa Anděl <<a
href="mailto:vaelektronik@vaelektronik.cz"
target="_blank" rel="noreferrer"
moz-do-not-send="true">vaelektronik@vaelektronik.cz</a>>:<br>
<br>
</span></td>
</tr>
</tbody>
</table>
<span style="font-family:'courier new';font-size:10pt">No já
nemohu říkat, že znám céčko :-) protože nepíšu pro PC, ale
jen pro malé jednočipy obvykle s malou pamětí pro data,
zatím co code obvykle zdaleka celé nevyužiju. Takže sice
vím, že každou blbost bych měl psát zvlášť jako funkci a
pak ji volat, ale vadí mi že u krátkých funkcí (pár řádků)
se běh programu prodlouží o volání + návrat z funkce a o
uschovávání + obnovení obsahu registrů. K tomu ještě se
(zbytečně) zaplňuje stack a tak v mém programu najdete
třeba něco takového<br>
<br>
ADC0CN0=0x80; // ADC0 zapnuty<br>
ADINT=0; <br>
ADBUSY=1; // 1. mereni <br>
while(!ADINT); <br>
Potenc=ADC0; <br>
ADC0CN0=0; // ADC0 vypnuty<br>
<br>
PCON=1; // t=1,11 ms cekani v
IDL<br>
<br>
ADC0CN0=0x80; // ADC0 zapnuty<br>
ADINT=0; <br>
ADBUSY=1; // 2. mereni <br>
while(!ADINT); <br>
Potenc+=ADC0; <br>
ADC0CN0=0; // ADC0 vypnuty<br>
<br>
PCON=1; // t=2,22 ms<br>
<br>
ADC0CN0=0x80; // ADC0 zapnuty<br>
ADINT=0; <br>
ADBUSY=1; // 3. mereni<br>
while(!ADINT); <br>
Potenc+=ADC0; <br>
ADC0CN0=0; // ADC0 vypnuty<br>
<br>
Zrovna tenhle prográmek mi běží s oscilátorem 80 KHz a
časově je to tam dost na těsno - samosřejmě kritická je
spotřeba procesoru.<br>
<br>
Anděl<br>
<br>
<br>
Dne 21.04.2020 v 13:29 Tomáš Hamouz napsal(a):<br>
Názvy #define jsem použil nějaké, které mě napadly, ale
jak jsem psal, nevím co původní výraz ve skutečnosti <br>
vyhodnocuje, podle toho bych použil lepší názvy. Chtěl
jsem tím naznačit že do vlastního kódu nepatří žádná
konstanta, <br>
která ovlivňuje použitý algoritmus, s několika drobnýma
výjimkama.<br>
<br>
Stejně tak název té funkce nemá vyjadřovat všechny v něm
použité podmínky, ale k čemu je toto porovnání dobré.<br>
<br>
A opět jak jsem psal, možná by bylo lepší porovnání s tou
trojkou strčit rovnou do té funkce, ale bez znalosti
kontextu jen hádám.<br>
<br>
Je to zcela bez ohledu na firemní kuluru, jak stárnu tak
používám zcela samovolně čím dál tím delší identifikátory.<br>
Může to být i tím že se u mne rozmáhá skleróza a už si
prostě řadu detailů nepamatuju.<br>
<br>
Tomáš<br>
<br>
<br>
</span>
<table>
<tbody>
<tr>
<td width="2" bgcolor="#0000ff"><br>
</td>
<td width="1155"><span
style="font-family:'calibri';font-size:11pt">No
jo, ale to pak na místě použití není vidět, jaké
že ty podmínky jsou. Předpokládám, že funkce bude
dle firemních pravidel definována v nějakém
externím souboru. Nedej bože, když takových sad
podmínek bude víc. To pak budou názvy těch funkcí
tak dlouhé, že určitě poruší nějaké délkové
pravidlo, ohledně délky řádku:-)<br>
<br>
Normálně bych pro zvýšení přehlednosti dal mezery
okolo + (což jsem ale pro zabránění zalomení v
mailu vynechal). Uvažoval bych ještě o další
závorce okolo součtu.<br>
<br>
Použití funkce pro mě přehlednost jasně snižuje:-)
Navíc <span style="font-family:'courier
new';font-size:10pt">MIN_A_COUNT a<span
style="font-family:'calibri';font-size:11pt"> <span
style="font-family:'courier
new';font-size:10pt">REMAING_COUNT<span
style="font-family:'calibri';font-size:11pt"> jsou
vyloženě matoucí názvy pro podmínky
nesouvisející s count:-) Jinak teda proti
použití define nic nenamítám, běžně
používám, ale zas je to zbytečná
komplikace do ukázky typu kódu v mailu.<br>
<br>
K čemu teda máme různé jazyky, když bychom
nemohli využívat jejich výhod?<br>
<br>
PH<br>
<br>
<br>
<b>Od: </b></span></span></span></span></span><a
style="font-family:'calibri';font-size:11pt"
href="mailto:tomas.hamouz@divesoft.com"
target="_blank" rel="noreferrer"
moz-do-not-send="true">Tomáš Hamouz</a><br>
<span style="font-family:'courier
new';font-size:10pt">Myslím že lepší otázka zní,
jak to napsat tak aby bylo na první pohled jasné
co daný výraz vyhodnocuje, <br>
bez ohledu na počet písmenek.<br>
<br>
Abych planě nekritizoval, nejspíš bych to udělal
takhle, ale protože nevím účel celé konstrukce,<br>
tak by bylo třeba lepší zahrnout i porovnání s
trijkou. Podmínku malého počtu písmenek zcela
zjevně <br>
nesplňuju, ale to zcela záměrně, protže bych se v
tom rád vyznal i po několika letech kdy jsem to
neviděl.<br>
<br>
<br>
#define MIN_A_COUNT 2
// vyznam teto konstanty<br>
#define REMAING_COUNT 12 // vyznam
teto konstanty<br>
#define MINIMAL_COND_COUNT 3 // vyznam
teto konstanty<br>
<br>
static inline int count_test_conditions(int a, int
b, int x, int y) <br>
{<br>
int count = 0;<br>
if (a < MIN_A_COUNT) {++count;} //
oduvodneni teto podminky<br>
if (a > b) {++count;} //
oduvodneni teto podminky<br>
if (x < y) {++count;} //
oduvodneni teto podminky<br>
if ((a%x) == REMAING_COUNT) {++count;} //
oduvodneni teto podminky<br>
if (b < y) {++count;} //
oduvodneni teto podminky<br>
return count;<br>
}<br>
<br>
if (count_test_conditions(a, b, x, y) > 3) {<br>
}<br>
<br>
<br>
A bylo by docela zajímavé se podívat jak se liší
zkompilovaný kód v obou případech.<br>
Myslím že by tam velké rozdíly nebyly.<br>
<br>
<br>
</span>
<table>
<tbody>
<tr>
<td width="2" bgcolor="#0000ff"><br>
</td>
<td width="1025"><span
style="font-family:'calibri';font-size:11pt">Otázka
tedy zní, jak ho upravit, aby prošel a
přibylo co nejméně písmenek:-)<br>
<br>
PH<br>
<br>
<b>Od: </b></span><a
style="font-family:'calibri';font-size:11pt"
href="mailto:as5sgm@gmail.com"
target="_blank" rel="noreferrer"
moz-do-not-send="true">as5sgm@gmail.com</a><br>
<span style="font-family:'courier
new';font-size:10pt">>>> If
((a<2)+(a>b)+(x<y)+(a%x==12)+(b<y)
> 3) {<br>
Tento riadok kodu by nepresiel review a
ani MISRA rules, vsade kde su aspon dvaja
vyvojari :)<br>
Miro<br>
<br>
<span
style="font-family:'calibri';font-size:11pt">On
21. 4. 2020 10:37, Pavel Hudecek wrote:<br>
Vzhledem ke komutativnosti sčítání by
pořadí mělo bejt irelevantní, kromě toho
posledního >, ale to má nižší
prioritu než +, takže se musí vyhodnotit
jako poslední.<br>
<br>
No a že to nebude fungovat v jiných
jazycích? To je snad normální. Nebo
všechny mají ++, printf, pointery jako
Delphi, nepotřebují deklarovat proměnné
jako VB6, … ?<br>
<br>
Příkazů je tam 0, takže omezení na max.
jeden na řádek to taky nepřekračuje.<br>
<br>
PH<br>
<br>
<b>Od: </b></span></span><a
style="font-family:'calibri';font-size:11pt"
href="mailto:a2x1nptda8@email.cz"
target="_blank" rel="noreferrer"
moz-do-not-send="true">Michal Gregor</a><br>
<span
style="font-family:'calibri';font-size:11pt">Spravne
se maji slozite podminky prevest do
funkci. Plati zasada jeden <br>
radek jeden prikaz. A nespolehat se na
interni "tajne" funkce <br>
compilatoru. Co kdyz to nekdo skopiruje do
C++? Nebo do uplne jineho jazyja.<br>
<br>
<br>
Dne 21.04.2020 v 8:46 Jan Waclawek
napsal(a):<br>
> A nemohlo to byt skor o tom, ze v
takychto vyrazoch<br>
> <br>
>>> If
((a<2)+(a>b)+(x<y)+(a%x==12)+(b<y)
> 3) {<br>
> <br>
> nie je zarucene poradie vyhodnotenia
pod-vyrazov, aj keby mali vedlajsie<br>
> efekty?<br>
> <br>
> wek<br>
> <br>
> <br>
> ----- Original Message
---------------<br>
>> Sa vam dvom do toho zamontujem,
som nieco nasiel vo svojom archive, ale<br>
>> Ty si mimo podozreni :)<br>
>> Skor si ja pofajcim, ze uz kedy
som daval do placu citat z normy, ktory<br>
>> si teraz dal aj Ty :-D<br>
>> <br>
>> </span><a
style="font-family:'calibri';font-size:11pt"
href="https://list.hw.cz/pipermail/hw-list/2011-July/399004.html"
target="_blank" rel="noreferrer"
moz-do-not-send="true">https://list.hw.cz/pipermail/hw-list/2011-July/399004.html</a><br>
<span
style="font-family:'calibri';font-size:11pt">>> <br>
>> miro<br>
>> <br>
>> On 21.4.2020 1:17, Jan Waclawek
wrote:<br>
>>> Hm, tak ja vidim vyhody skor
v tych 6 ifoch a 1 pomocnej premennej...<br>
>>> <br>
>>> Ale ak by si nahodou nasiel
odkaz, kde ten JW z minulosti povedal, ze<br>
>>> vysledkom podmienky nemusi
byt 0 alebo 1, tak by som Ti bol vdacny.<br>
>>> <br>
>>> wek<br>
>>> <br>
>>> <br>
>>> ----- Original Message
---------------<br>
>>> Tak?e se po pár misících mu?u
vrátit k tomu, ?e jedna z výhod C je
mo?nost<br>
>>> dilat vici, jako:<br>
>>> <br>
>>> If
((a<2)+(a>b)+(x<y)+(a%x==12)+(b<y)>
3) {<br>
>>> <br>
>>> Co? v jiných jazycích vede na
6 ifu a 1 pomocnou prominnou.<br>
>>> <br>
>>> PH<br>
>>> <br>
>>> Od: Jan Waclawek<br>
>>> <br>
>>> Hm, tak potom by som mal asi
tomu JW z minulosti jednu tresnut...<br>
>>> <br>
>>> Konkretne teda, C99, 6.5.8
Relational operators #6:<br>
>>> Each of the operators<
(less than),> (greater than),<=
(less than or<br>
>>> equal to), and>=<br>
>>> (greater than or equal to)
shall yield 1 if the specified relation is
true<br>
>>> and 0 if it is false. 92)<br>
>>> The result has type int.<br>
>>> <br>
>>> Ten footnote 92) je kuzelny:<br>
>>> The expression a<b<c
is not interpreted as in ordinary
mathematics. As the<br>
>>> syntax indicates, it<br>
>>> means (a<b)<c; in other
words, ??if a is less than b, compare 1 to
c;<br>
>>> otherwise, compare 0 to c??.<br>
>>> <br>
>>> wek<br>
>>> <br>
>>> <br>
>>> ----- Original Message
---------------<br>
>>> <br>
>>> Mil jsem nijak za to, ?e to
byl právi jistý JW, kdo mi tu onehdá
vyeetl, ?e<br>
>>> spoléhat se, ?e výsledkem
podmínky je 0 nebo 1 není správné:-)<br>
>>> <br>
>>> PH<br>
>>> <br>
>>> Od: Jan Waclawek<br>
>>> <br>
>>>> A jinak teda ten kód
udilá to, ?e pokud je splnina podmínka v
závorce, nastaví se bit 0 na výstupní (zda
to bude bit 0 není zarueeno, ale jinak
skoro jisté).<br>
>>> <br>
>>> Preco by to nemal byt bit 0?<br>
>>> <br>
>>>
_______________________________________________<br>
>>> <br>
>>>>> <br>
>>>>> DDRB
|=(1<CLK_UP); <br>
<span style="font-family:'courier
new';font-size:10pt"> </span></span></td>
</tr>
</tbody>
</table>
<span style="font-family:'calibri';font-size:11pt"> <br>
</span></td>
</tr>
</tbody>
</table>
<br>
<br>
<span style="font-family:'courier new';font-size:10pt">_______________________________________________
HW-list mailing list - sponsored by </span><a
style="font-family:'courier new';font-size:10pt"
href="http://www.HW.cz" target="_blank" rel="noreferrer"
moz-do-not-send="true">www.HW.cz</a><span
style="font-family:'courier new';font-size:10pt">
</span><a style="font-family:'courier new';font-size:10pt"
href="mailto:Hw-list@list.hw.cz" target="_blank"
rel="noreferrer" moz-do-not-send="true">Hw-list@list.hw.cz</a><span
style="font-family:'courier new';font-size:10pt">
</span><a style="font-family:'courier new';font-size:10pt"
href="http://list.hw.cz/mailman/listinfo/hw-list"
target="_blank" rel="noreferrer" moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a><span
style="font-family:'courier new';font-size:10pt">
<br>
<br>
_______________________________________________<br>
HW-list mailing list - sponsored by <a
href="http://www.HW.cz" target="_blank" rel="noreferrer"
moz-do-not-send="true">www.HW.cz</a><br>
<a href="mailto:Hw-list@list.hw.cz" target="_blank"
rel="noreferrer" moz-do-not-send="true">Hw-list@list.hw.cz</a><br>
<a href="http://list.hw.cz/mailman/listinfo/hw-list"
target="_blank" rel="noreferrer" moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a></span></div>
_______________________________________________<br>
HW-list mailing list - sponsored by <a
href="http://www.HW.cz" rel="noreferrer noreferrer"
target="_blank" moz-do-not-send="true">www.HW.cz</a><br>
<a href="mailto:Hw-list@list.hw.cz" target="_blank"
rel="noreferrer" moz-do-not-send="true">Hw-list@list.hw.cz</a><br>
<a href="http://list.hw.cz/mailman/listinfo/hw-list"
rel="noreferrer noreferrer" target="_blank"
moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
</blockquote>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
HW-list mailing list - sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a>
<a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
</blockquote>
<p><br>
</p>
</body>
</html>