avr-gcc-list
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[avr-gcc-list] WG: What's wrong with this preprocessor statement


From: Nicolas Nickisch
Subject: [avr-gcc-list] WG: What's wrong with this preprocessor statement
Date: Sun, 25 Feb 2001 14:40:24 +0100


Hi, I am trying to implement a delay-loop with the following
#define-statement:

#define delay2(microseconds) { unsigned long x; x=((( (unsigned long)
microseconds*F_CPU)/(13000000)));while(x--){}}

in the main-program the loop is called by delay2(200)

As you can see the x-varaibale is loaded with as a counter for the
while-loop, calculated according to the MC-Frequency.

In the version stated above something is wirng. The compiler gives no
complains but in the AVR-Studio the 'delay2' is ignored. The program just
jumps to the next statement.

#define delay2(microseconds) { unsigned int x; x=(((
microseconds*F_CPU)/(13000000)));while(x--){}}

This version works but is limited to a delay of about 230µs (greater values
for microseconds lead to an integer overflow error - the program has an dead
end then)
It seems to be a question of long-values to get this running.
Can you help me ?

I tried to develop this as a better version of the following code:

#define delay_mcs(x)    delay((((x*F_CPU)/6000000)))
#define delay_ms(x)     delay((((x*F_CPU)/6000)))
#define delay_s(x)      delay((((x*F_CPU)/6)))

extern void delay(long);

......

void delay(long microseconds)
// minimale Verzögerung: 5 µs!
{
        while(microseconds--) {};
        return;
}



Any ideas ?

Dr. med. Nicolas Nickisch
Thomaestr. 6
65193 Wiesbaden

address@hidden
address@hidden




reply via email to

[Prev in Thread] Current Thread [Next in Thread]