Good news: Arduino has released a new version of its IDE (1.0.1) and it now supports ArduCopter/ArduPlane right out of the box. (The previous versions of Arduino required a patched version that we supplied to handle the size of the ArduCopter/ArduPlane codebase, which is considered the most complex Arduino program ever made!)
Here are the release notes:
* The IDE has been internationalized and translated into multiple languages.
Thanks to Shigeru Kanemoto for the internationalization and Japanese
translation and many others for the other translations. For more
information, see: http://arduino.cc/playground/Main/LanguagesIDE* Added preference for selecting the language in which to display the
Arduino software. Defaults to the operating system locale.* New upload process for the Arduino Leonardo (ATmega32U4).
* The editor font size preference now applies to the serial monitor and
error / message console as well as the editor. (Paul Stoffregen)
http://code.google.com/p/arduino/issues/detail?id=550* Compilation has been speeded up by only compiling changed files. (All
files are recompiled when a new board is selected.) (Paul Stoffregen)
http://code.google.com/p/arduino/issues/detail?id=638* Console log files (stdout.txt and stderr.txt) are now removed when the
Arduino software exits. (Paul Stoffregen)* The minimum size for the Arduino software window has been reduced.
http://code.google.com/p/arduino/issues/detail?id=52* Improvements to the Find / Replace dialog. (Peter Lewis)
http://code.google.com/p/arduino/issues/detail?id=825* Support for selecting words (on double-click) and lines (triple-click)
in the Arduino software. (Peter Lewis)
http://code.google.com/p/arduino/issues/detail?id=824* Don't insert newline when using serial monitor keyboard
shortcut. (Lars J. Nielsen)
http://code.google.com/p/arduino/issues/detail?id=279* Added a preference for disabling verification on upload (for increased
speed). (Nathan Seidle)
http://code.google.com/p/arduino/issues/detail?id=842* Added the gcc toolchain to the Linux distribution. (To use the
toolchain already installed on your system, simply delete the one
that comes with the Arduino software.) (Paul Stoffregen)
http://code.google.com/p/arduino/issues/detail?id=300* Updating Arduino Mini upload protocol to 'arduino' from 'stk500' (should
fix problems with auto-reset not working).[core / libraries]
* Updated (and official) support for the Arduino Leonardo (ATmega32U4).
Includes new bootloader and various fixes to the core.* Adding overloads to Wire.write() (for Wire.write(0)). (Paul Stoffregen)
http://code.google.com/p/arduino/issues/detail?id=527* Fixing delayMicroseconds() for 20 MHz clocks (Erdem U. Altinyurt)
http://code.google.com/p/arduino/issues/detail?id=306* Support third external interrupt on ATmega1284P. (maniacbug)
http://code.google.com/p/arduino/issues/detail?id=728* Update reference voltage constants for ATmega1284P. (maniacbug)
http://code.google.com/p/arduino/issues/detail?id=728* Adding --relax linker flag for ATmega2560. (arducopter)
http://code.google.com/p/arduino/issues/detail?id=729* Fixing Ethernet library bug on avr-gcc 4.5.1 (SurferTim)
http://code.google.com/p/arduino/issues/detail?id=605* Fixed DHCP hostname generation. (peter)
* Simplifying microseconds to clock cycles conversions (Rob Tillaart)
http://code.google.com/p/arduino/issues/detail?id=675* Fixed various warnings. (maniacbug)
http://code.google.com/p/arduino/issues/detail?id=688* Fixed bug w/ repeated initial characters in findUntil(). (Jeffery.zksun)
http://code.google.com/p/arduino/issues/detail?id=768* Added INPUT_PULLUP option for pinMode(). The INPUT mode now explicitly
disables the pullup resistors. (Paul Stoffregen)
http://code.google.com/p/arduino/issues/detail?id=246* Fixing bug in the receiving of multiple UDP packets. (dylan and peter)
http://code.google.com/p/arduino/issues/detail?id=669* Added ability to generate repeated starts in the Wire library (in
master mode). Extra boolean parameters to endTransmission() and
requestFrom() control whether or not to send a stop (or a repeated
start instead). (Todd Krein)
http://code.google.com/p/arduino/issues/detail?id=663* Added Ethernet.maintain() to renew DHCP leases. (Peter Magnusson)
http://code.google.com/p/arduino/issues/detail?id=716* Fix for CLOSE_WAIT bug that could cause Ethernet sketches to crash
over time. (mr-russ and Johann Richard)* Fix to servo pulse timing calculation. (jwatte)
http://code.google.com/p/arduino/issues/detail?id=908* Added readString() and readStringUntil() functions. (Adrian McEwen)
http://code.google.com/p/arduino/issues/detail?id=454[examples]
* Updated to latest ArduinoISP sketch. (rsbohn)
http://code.google.com/p/arduino/issues/detail?id=378* Fixed ArduinoISP sketch by lowering delay() in heartbeat.
* Other updates.
Comments
Alex, did you set the board type in the IDE to 1280? We attempt to reduce code size, in that case. I thought we still fit into a 1280.
Marooned,
I have never used the Arduino IDE for development of ArduPilot, I use CrossPack AVR-GCC with makefiles. So, in fact, the majority of ArduPilot development is C/C++ development. All you need from Arduino is the libraries.
APM: The biggest and most complex Arduino program, until the next version of APM which will be the biggest...
trying to compile ArduPlane V2.34 for APM1 (ATmega1280) with any version of arduino but getting:
c:/arduino-1.0/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: ArduPlane.cpp.elf section .text will not fit in region text
c:/arduino-1.0/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: region text overflowed by 1392 bytes
Arduino is per say not a programming language, but a library of Arduino functions on top of AVR-GCC that makes it simpler to get started. ArduPilot/Copter outgrew the standard Arduino function library a long time ago, and we now use custom Arduino libraries and write in plain C/C++ talking directly to the chip. The Arduino system is still used as a simple way of programming the chip.
Thanks for explanation. I'm very close to finish my first copter using APM2 and being a programmer I'll probably start to dig into the code. I'll have to see how much it differ from what I've learned by using C for programming those chips.
Marooned, I don't know about other reasons, but originally the main thing that one did not need an ISP programmer to flash the chip. Also for me, when I first started out programming the Arduino in 2009, I was already a veteran programmer in C/C++, but had not clue about microcontroller programming. I found that Arduino made it easier. with all the extra primitives. You could use timers without needing to fully understand the different registers, and setting bit masks to configure pins for input or output. Basically, no advance knowledge of Atmega chip was needed. Of course, since then I've learned all about the Atmega chips, and compfortable enough to use AVRStudio and flash my chips directly with AVRDude, but Arduino is still fast and convenient.
However, sometimes I wonder if to make an efficient performant flight controller firmware, we really should do it in C/C++ instead. However, the ease and convenience of Arduino, lends itself better for an open source project like Arducopter, I think. We need to get as many good programmers doing it, regardless of their prowess in microcontroller chips. Flight software require more expertise from many disciplines.
Also, want to add that staying with Arduino also allows us to use whatever chip the Arduino adopts, and my understanding is a 32bit version is coming soon.
Rebels, no more!
Is there any info about why are you using Arduino instead regular C for AVR? Just curious as I did several small projects on AVR and never used Arduino.
I love tool chain updates that allow us to avoid custom patched compilers and step back into the mainstream release