<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<div class="moz-cite-prefix">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</div>
<div class="moz-cite-prefix"><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>
</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">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>
</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">Anděl</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix"><br>
</div>
<div class="moz-cite-prefix">Dne 21.04.2020 v 13:29 Tomáš Hamouz
napsal(a):<br>
</div>
<blockquote type="cite"
cite="mid:1831465454.20200421132939@divesoft.com">
<title>Re: Chyba v C - velmi podivné chování</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<span style=" font-family:'Courier New'; font-size: 10pt;">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"
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"
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"
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"
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>
<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>