ceckovy kviz

Pavel Hudeček edizon na seznam.cz
Středa Září 6 22:45:18 CEST 2023


Já si myslím, že tohle je typický příklad umělé konstrukce, kterou přímo 
v této podobě nikdo normálně nepoužije. Jenže šedá je teorie a zelený 
strom života...

Měříme na pár kanálech ADC a jednou to uděláme bez přerušení a podruhé s:

*for (uint8_t mxIdx=AD_chanStart; mxIdx<=AD_chanEnd; mxIdx++)* {
     ADC0_MUXPOS = mxIdx;
     ...
     adData[mxIdx-AD_chanStart] = ADC0_RES;
}

Normální for, v jednom řádku se dozvíme od, do a po jak velkých krocích.

Jenže normálně nechci měřit for cyklem a v něm čekat až je změřeno, 
takže chci použít přerušení. Ale v něm chci mít taky takový jeden řádek, 
kde je jedna konstrukce s od, do a po jakých krocích.

ISR (ADC0_RESRDY_vect) {
     static uint8_t mxIdx=AD_chanStart;

     adData[mxIdx-AD_chanStart] = ADC0_RES;
*if (++mxIdx > AD_chanEnd) mxIdx = AD_chanStart;*
     ...
}
Jen je škoda, že ta inicializační hodnota je tam dvakrát. Ale pořád je 
to lepší, než rozdělený na řádky ++ a if. Proč? Jednak když to vidím, 
tak je to jako vidět ten for, prostě jasná konstrukce, kde hned vím co 
dělá a proč. No a hlavně se při nějaké úpravě nemůže snadno stát, že se 
z toho omylem kus odsune, vymaže, či zkopíruje kam nemá.

Je možné, že když to někdo vidí poprvé, tak mu to chvíli jasné není. 
Jakmile to pochopí, tak je to prostě standardní konstrukce s na první 
pohled jasným chováním, stejně jako for použitý běžným způsobem.

PH

Dne 06.09.2023 v 21:38 Petr Labaj napsal(a):
> Myslím, že jde o to, jak má člověk nastaveno samohodnocení.
> Jestli na svém interním žebříčku postoupím výše pokud napíšu fakt 
> prďáckou konstrukci, kterou nikdo jiný napsat neumí.
> Nebo jestli naopak postoupím tehdy, pokud napíšu program, který je 
> každému jasný na první pohled.
>
> a=i--;
> a=--i;
>
> je jistě správně.
> Ale pokud napíšu
> a=i;
> i--;
>
> i--;
> a=i;
>
> tak je to stejné, a zřejmě i kompilátor to přeloží stejně nebo skoro 
> stejně.
>
> A otázka:
> Který z těch zápisů je na první pohled jasnější, a kde spíš neudělám 
> chybu? Ne v okamžiku, kdy se soustředím na kvíz, ale kdy jsem unavený 
> a mám vytahané očí čuměním 10 hodin na monitor.
> Který zápis bude pochopitelnější kolegovi, který sice programuje PLC, 
> ale C viděl jen z rychlíku?
>
> PL
>
> ********************
>
> Dne 6.9.2023 v 21:22 Jindrich Fucik napsal(a):
>> ...
>> Protože pochopitelně i tohle je správný zápis:
>> a=i--;
>> a=--i;
>> a kupodivu "a" se bude lišit.
>> ...
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20230906/d12bb2d3/attachment.htm>


Další informace o konferenci Hw-list