Having been frustrated with many of the inefficiencies of the Arduino core libraries, we have built an alternate set with performance and size in mind. Alastair has given a talk at the Canberra Linux User Group about this library - the slides can be viewed on SlideShare.
Much of the efficiency gains comes from addressing some of the key design deficiencies of the Arduino runtime - we do not store pin/port information in tables in flash, needlessly preallocate objects nor dictate that excessively large buffers must be used. Instead, control of these are handed over to the developer at compile time.
We recommend using cppcheck and the CPPCeclipse Eclipse Plugin for further bug checking in your code.
- Design for the architecture
- Favour efficiency over simplicity
- Hide complexity using macros
- Provide a rich API that exposes all likely usages that are expected
- Fix all warnings!
- Use appropriate datatypes, and use strict typing where possible to minimise the wrong variable being passed
- Favour C++ references over pointers to reduce bad usage which can lead to crashes
- Leverage inheritance to make generic routines available for all objects that need it
- Expensive operations should be asynchronous where possible, so they run in the background while your code does other things
- Enable an event driven approach
- BSD licensed to encourage commercial use (there is a separate GPL project for ports of GPL software to Flame, such as V-USB)
We recommend developing your Flame projects in Eclipse. For instructions on how to do so, please see our tutorial.
We also have another tutorial showing how to build Flame using make from the command line.
If an Arduino-style bootloader is required, we recommend Optiboot, which clocks at only a quarter the size of the Arduino bootloader (0.5kb vs 2kb), and a programming baud rate of 115,200bps.
If USB is more your thing, you may want to consider USBaspLoader, which clocks in at 2kb (the same size as the Arduino bootloader), and pretends to be a USBasp programmer. This uses software USB (based on the V-USB library), removing the need for a USB->serial chip, and allows you to flash your chip over USB using AVRdude.