Re: Záhada v C

as5s as5sgm na gmail.com
Sobota Leden 23 22:18:10 CET 2021


nepoze byt problem v synchronizacii?

nemoze sa stat ze sa prerusenie vykona viac krat ono by vam to adSync 
drzalo na 1 ale index by sa zvysil.

Miro

On 23. 1. 2021 22:11, Pavel Hudecek wrote:
>
> Hvězdičky a liché prázdné řádky přibyly někde mezi Vámi a HW serverem. 
> Mě to přišlo jak jsem odeslal. Jen tečky na začátku odsazených řádků 
> jsou moje, mnoho mailových klientů jinak zruší odsazení.
>
> if (++ind>=AD_chCount) ind=0;
>
> Je praktické, protože přičítací operace, podmínka i reset pohromadě, 
> což zvyšuje přehlednost a snižuje šanci, že člověk mezi to něco 
> náhodou strčí. Závorky nechybí. Pravidla jazyka požadují buď jeden 
> příkaz, nebo v závorce příkazů víc. Třeba CodeVision to přesně takhle 
> dokonce dělá v předgenerovaném kódu. Typicky právě v 
> obsluhách přerušení:-)
>
> Preventivně jsem to zkusil změnit do klasické podoby i se závorkami, 
> ale nepomohlo.
>
> PH
>
> *Od: *Michal Gregor <mailto:a2x1nptda8 na email.cz>
>
> To by chtelo videt cely zdrojak, ale spise to zkusit v debugu.
>
> - Za *if (++ind>=AD_chCount) ind=0;* chybi slozene zavorky {}
>
> - Na jednom radku ma byt jeden prikaz - "if (++ind" je prasarna
>
> - Co ty hvezdicky ve vypisu? *adDataRaw[ind]=(uint32_t)ind;* To je chyba
>
> mailu?
>
> Vyplati se psat program poctive, i tak kratky a jednoduchy. Usetri to
>
> spoustu boleni hlavy v budoucnu. A taky hroomadu casu.
>
> Michal Gregor
>
> Dne 23.01.2021 v 20:14 Pavel Hudecek napsal(a):
>
> > Dobrý den všem,
>
> >
>
> > ATtiny816, Atmel Studio
>
> >
>
> > volatile uint32_t adDataRaw[AD_chCount];
>
> >
>
> > uint32_t adData[AD_chCount];
>
> >
>
> > ISR (ADC0_RESRDY_vect) { // 37,1 kHz / 16 ======
>
> >
>
> > .              static uint8_t ind=0;
>
> >
>
> > .
>
> >
>
> > . //adDataRaw[ind]=(uint32_t)ADC0_RES;
>
> >
>
> > . *adDataRaw[ind]=(uint32_t)ind;*
>
> >
>
> > .
>
> >
>
> > . *if (++ind>=AD_chCount) ind=0;*
>
> >
>
> > . ADC0_MUXPOS=AD_chFirst+ind;
>
> >
>
> > .
>
> >
>
> > .              adSync=1;
>
> >
>
> > .              ADC0_INTFLAGS=1;
>
> >
>
> > }
>
> >
>
> > Ve funkci cekej je mj. (i je lokální int):
>
> >
>
> > if (adSync==1) { // -------------------------
>
> >
>
> > .              adSync=0;
>
> >
>
> > .
>
> >
>
> > . *for (i=0; i<AD_chCount; i++) adData[i]=adDataRaw[i];*
>
> >
>
> > }
>
> >
>
> > V mainu je while(1) a tam mj. (n je lokální uint32_t):
>
> >
>
> > cekej(1000);
>
> >
>
> > for (n=0; n<AD_chCount; n++) {
>
> >
>
> > . cislo((uint32_t)adData[n]); text("/");
>
> >
>
> > . cislo((uint32_t)adDataRaw[n]); text(" ");
>
> >
>
> > }
>
> >
>
> > UART_crlf;
>
> >
>
> > A z terminálu leze:
>
> >
>
> > 5/5 6/1 2/2 3/3 4/4 0/5 1/6
>
> >
>
> > 5/5 6/1 2/2 3/3 4/4 0/5 1/6
>
> >
>
> > 0/5 6/1 2/2 3/3 4/4 0/5 1/6
>
> >
>
> > 5/5 1/1 2/2 3/3 4/4 0/5 1/6
>
> >
>
> > Proč z terminálu neleze
>
> >
>
> > 0/0 1/1 2/2 3/3 4/4 5/5 6/6
>
> >
>
> > ???
>
> >
>
> > Díky,
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20210123/f0ee9624/attachment.html>


Další informace o konferenci Hw-list