Export to GitHub

arduino-tiny - issue #29

round in math.h causes compile error with avr-gcc version 4.5.3


Posted on Nov 2, 2011 by Happy Ox

After upgrading to Ubuntu Ocelot (11.10), projects targeted for ATtinys will not compile due to an error with the round function in math.h. This probelm is when using Arduino IDE v022.

The round function is duplicated by a macro in wiring.h. Even though this macro has been around forever, and for some strange reason still works when targeting ATmega chips, it causes the compiler to choke for ATtiny chips.

Simply commenting out the line (136) in wiring.h:

//#define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))

fixes the problem.

Comment #1

Posted on Nov 2, 2011 by Massive Wombat

Comment deleted

Comment #2

Posted on Nov 2, 2011 by Massive Wombat

Thank you for taking the time to post this issue.

What is the error message?

Comment #3

Posted on Nov 2, 2011 by Happy Ox

In file included from /usr/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h:44:0, from /usr/lib/gcc/avr/4.5.3/../../../avr/include/avr/delay.h:37, from /home/scott/Arduino Sketches/hardware/tiny/cores/tiny/wiring_private.h:32, from /home/scott/Arduino Sketches/hardware/tiny/cores/tiny/WInterrupts.c:37: /usr/lib/gcc/avr/4.5.3/../../../avr/include/math.h:426:15: error: expected identifier or ‘(’ before ‘double’ /usr/lib/gcc/avr/4.5.3/../../../avr/include/math.h:426:15: error: expected ‘)’ before ‘>=’ token

Comment #4

Posted on Nov 26, 2011 by Grumpy Ox

I'm getting the same error with

//#define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))

already commented out. arduino 0022 on Ubuntu 11.10

any ideas?

Comment #5

Posted on Nov 26, 2011 by Grumpy Ox

ah, got it!

to all who encounter the same problem be careful that it is /whatever/hardware/attiny45_85/cores/attiny45_85/wiring.h that gets the change, /whatever/arduino/hardware/arduino/cores/arduino/wiring.h is the one that doesn't matter. took me a while to realize the ide was referencing a different wiring.h when configured to program an attiny

Comment #6

Posted on Dec 27, 2011 by Helpful Wombat

I found I had to edit math.h and add

undef round

as line 426 as per http://forums.reprap.org/read.php?146,107925,107925,quote=1

Comment #7

Posted on Aug 17, 2012 by Massive Hippo

I also just added an #undef in math.h as well, which should address all targets.

And this is an issue under OSX as well.

Comment #8

Posted on Jun 3, 2013 by Massive Horse

just found this same issue on debian jessie with gcc-avr 4.7.2 / arduino-tiny-0100-0016

how is this not fixed in the May 24th 2013 release? i mean even Blink won't work without it and its a two year old bug!

the fix that worked for me was commenting out line 137 of ~/sketchbook/hardware/tiny/cores/tiny/wiring.h

//#define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))

but i assume that now means we can't using the round() function....?

Comment #9

Posted on Jun 6, 2013 by Massive Wombat

The round macro has been removed.

Status: Done

Labels:
Type-Defect Priority-Medium