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