Package: arduino-core
Version: 0022+dfsg-3
Severity: important
The newest version of avr-libc in Debian has broken compiling with
arduino-core (and probably arduino as well). avr-libc 1.7.1 shipped
with a bug in the delay.h header because it did not include math.h
rendering any program which doesn't include math.h before the
util/delay.h header uncompilable. I will report this bug against
avr-libc 1.7.1-1 in order to have this fixed, but 1.7.1 also
introduces another bug when using the wiring.h library included in
Arduino, because math.h includes a definition of round which conflicts
with the wiring.h declaration at line 74 of
/usr/share/arduino/hardware/arduino/cores/arduino/wiring.h
The bug manifests itself initially as a compliation error and can be
reproduced through:
mkdir ~/tmp_arduino_bug
cd ~/tmp_arduino_bug
cat > Makefile <<'!====EOF====!'
ARDUINO_DIR = /usr/share/arduino
TARGET = Blink
#ARDUINO_LIBS = LiquidCrystal
MCU = atmega168
F_CPU = 16000000
ARDUINO_PORT = /dev/ttyUSB*
AVRDUDE_ARD_PROGRAMMER = arduino
AVRDUDE_ARD_BAUDRATE = 57600
#AVRDUDE_ARD_EXTRAOPTS = -F
include /usr/share/arduino/Arduino.mk
!====EOF====!
cp /usr/share/arduino/examples/1.Basics/Blink/Blink.pde .
make
which produces this output on unstable:
/usr/share/arduino/Arduino.mk:405: build-cli/depends.mk: No such file or
directory
mkdir build-cli
echo \#include \"WProgram.h\" > build-cli/Blink.cpp
cat Blink.pde >> build-cli/Blink.cpp
/usr/bin/avr-g++ -MM -mmcu=atmega168 -DF_CPU=16000000 -I.
-I/usr/share/arduino/hardware/arduino/cores/arduino -g -Os -w -Wall
-ffunction-sections -fdata-sections -f
cat build-cli/Blink.d > build-cli/depends.mk
rm build-cli/Blink.cpp
echo \#include \"WProgram.h\" > build-cli/Blink.cpp
cat Blink.pde >> build-cli/Blink.cpp
/usr/bin/avr-g++ -c -mmcu=atmega168 -DF_CPU=16000000 -I.
-I/usr/share/arduino/hardware/arduino/cores/arduino -g -Os -w -Wall
-ffunction-sections -fdata-sections -fn
/usr/bin/avr-gcc -c -mmcu=atmega168 -DF_CPU=16000000 -I.
-I/usr/share/arduino/hardware/arduino/cores/arduino -g -Os -w -Wall
-ffunction-sections -fdata-sections -st
/usr/bin/avr-gcc -c -mmcu=atmega168 -DF_CPU=16000000 -I.
-I/usr/share/arduino/hardware/arduino/cores/arduino -g -Os -w -Wall
-ffunction-sections -fdata-sections -st
/usr/bin/avr-gcc -c -mmcu=atmega168 -DF_CPU=16000000 -I.
-I/usr/share/arduino/hardware/arduino/cores/arduino -g -Os -w -Wall
-ffunction-sections -fdata-sections -st
/usr/bin/avr-gcc -c -mmcu=atmega168 -DF_CPU=16000000 -I.
-I/usr/share/arduino/hardware/arduino/cores/arduino -g -Os -w -Wall
-ffunction-sections -fdata-sections -st
/usr/bin/avr-gcc -c -mmcu=atmega168 -DF_CPU=16000000 -I.
-I/usr/share/arduino/hardware/arduino/cores/arduino -g -Os -w -Wall
-ffunction-sections -fdata-sections -st
/usr/bin/avr-gcc -c -mmcu=atmega168 -DF_CPU=16000000 -I.
-I/usr/share/arduino/hardware/arduino/cores/arduino -g -Os -w -Wall
-ffunction-sections -fdata-sections -st
/usr/bin/avr-gcc -c -mmcu=atmega168 -DF_CPU=16000000 -I.
-I/usr/share/arduino/hardware/arduino/cores/arduino -g -Os -w -Wall
-ffunction-sections -fdata-sections -st
/usr/bin/avr-g++ -c -mmcu=atmega168 -DF_CPU=16000000 -I.
-I/usr/share/arduino/hardware/arduino/cores/arduino -g -Os -w -Wall
-ffunction-sections -fdata-sections -fn
In file included from
/usr/lib/gcc/avr/4.5.3/../../../avr/include/avr/delay.h:37:0,
from
/usr/share/arduino/hardware/arduino/cores/arduino/wiring_private.h:30,
from
/usr/share/arduino/hardware/arduino/cores/arduino/HardwareSerial.cpp:28:
/usr/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h: In function ‘void
_delay_ms(double)’:
/usr/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h:149:42: error: ‘fabs’
was not declared in this scope
/usr/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h:149:43: error: ‘ceil’
was not declared in this scope
/usr/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h: In function ‘void
_delay_us(double)’:
/usr/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h:226:42: error: ‘fabs’
was not declared in this scope
/usr/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h:226:43: error: ‘ceil’
was not declared in this scope
make: *** [build-cli/HardwareSerial.o] Error 1
After fixing the bug in avr-libc, the error changes to:
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
/usr/share/arduino/hardware/arduino/cores/arduino/wiring_private.h:30,
from
/usr/share/arduino/hardware/arduino/cores/arduino/WInterrupts.c:34:
/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
which is caused by the macro definition of round() in wiring.h:
#define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
commenting out this line fixes this final compliation error and the program
compiles, uploads and correctly works on the Arduino that I have.
-- System Information:
Debian Release: wheezy/sid
APT prefers unstable
APT policy: (500, 'unstable'), (500, 'testing'), (1, 'experimental')
Architecture: amd64 (x86_64)
Kernel: Linux 2.6.39-2-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
Versions of packages arduino-core depends on:
ii avr-libc 1:1.7.1-1 Standard C library for Atmel AVR d
ii avrdude 5.10-3 software for programming Atmel AVR
ii gcc 4:4.6.1-2 GNU C compiler
ii gcc-avr 1:4.5.3-1 The GNU C compiler (cross compiler
arduino-core recommends no packages.
arduino-core suggests no packages.
-- no debconf information
This email and any files transmitted with it are confidential and intended
solely for the use of the individual or entity to whom they are addressed. If
you are not the named addressee, you should not disseminate, distribute or copy
this email. Please notify the sender immediately by email if you have received
this email by mistake and delete this email from your system. If you are not
the intended recipient, you are notified that disclosing, copying, distributing
or taking any action in reliance on the contents of this information is
strictly prohibited.
Within the United States, sale of the Recon Scout to non-Federal and
non-military entities is limited to state and local police and firefighters
eligible for licensing under 47 C.F.R. § 90.20(a)(1) of the FCC Rules, and
security personnel in Critical Infrastructure Industries as defined in the FCC
Rules, 47 C.F.R. § 90.7. Operation of this product by non-federal and
non-military entities requires an FCC license. These FCC Rules do not apply to
sales made outside the United States.
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]