AVR-gcc4.0

Szima Gábor sygma at tesla.hu
Wed Apr 5 12:28:26 CEST 2006


On Wed, 5 Apr 2006, Fuzesi Arnold wrote:

> 1, volatile

Ertem en... (mukodik is :)

> 2, iar alatt __monitor es hasonlok segitenek az IT latency-n.

Mindjart nezem gcc-n.
Nem latok ilyet. (:

> 3,  nem ertem. Ha IT alatt növeled a szamlalót akkor a foprogramban nem lesz
> hibas eredmeny.

Az a baj, hogy a 32 bites szamlalom ket reszbol all; a felso 16 bit egy 
IRQ-bol novelt szamlalo, az also 16 pedig a TCNT1.

Mivel a TCNT1 tulcsordulasa es az IRQ lefutasa kozt van nemi ido (~24..30 
clk), ezert ebben az idoben a ket fele a 32 bites szamlalomnak nem 
"konzisztens". Azaz a TCNT1-ben mar reg FFFF->0012 van, de a felso fele 
meg nem lepett...

Tehat a 32 bites szamlalom igy nez ki:

0001FFFE
0001FFFF

Eddig jo

Ettol...
00010000
00010001
...
00010018
00010019
...eddig bugos

0002001A
Mostantol jo.

Es igy kapom:

uint32_t g_timer1_cnt = 0;

uint32_t get_timer1_32 (void) {

     uint32_t    l_rp;

     l_rp = g_timer1_cnt;
     l_rp = l_rp << 16;

     l_rp|= TCNT1;

     return l_rp;
}

// signal handler for tcnt1 overflow interrupt
SIGNAL(SIG_OVERFLOW1) {

     g_timer1_cnt++;
}


> Vagy felreertek valamit?

Igen, azt hiszem. :)



 								-Sygma




More information about the Elektro mailing list