
arduino-tiny - issue #29
round in math.h causes compile error with avr-gcc version 4.5.3
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 WombatComment deleted
Comment #2
Posted on Nov 2, 2011 by Massive WombatThank you for taking the time to post this issue.
What is the error message?
Comment #3
Posted on Nov 2, 2011 by Happy OxIn 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 OxI'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 Oxah, 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 WombatI 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 HippoI 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 Horsejust 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 WombatThe round macro has been removed.
Status: Done
Labels:
Type-Defect
Priority-Medium