Záhada v C

Pavel Hudecek edizon na seznam.cz
Sobota Leden 23 20:14:22 CET 2021


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,
PH
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20210123/b64c1ac4/attachment.html>


Další informace o konferenci Hw-list