The Making of Arduino
spectrum.ieee.org
spectrum.ieee.org
And then Arduino comes along and, with its simple little IDE, convinces me that this isn't so different from the rest of my programming.
And now I get to build stuff. With my hands. Makes me feel like a kid again.
It's amazing how much you can accomplish, as Banzi has, when you can reduce something to solving a user experience problem.
You can buy an MSP430 dev board form TI for $5 with more features but the thing about the Arduino is that somebody with NO knowledge of embedded programming can go from box to flashing LED in <5mins.
I have spent longer than that trying to work out which target configuration I have on some embedded systems (Yes Keil I'm talking about you!)
Likewise, Python isn't going to go far in 1kB of RAM.
But there is hope! The newer Arduinos have 2kB of RAM!
But really, whatever language mutant they use for Arduino, it's very noob-friendly.
the arduino GUI just adds some lines in front of your code, and passes it over to avr-g++ along with some flags.
It links the whole thing to what it calls "arduino cores" and of course the additional libraries. You can find all that stuff inside the Arduino folder (or on macosx inside the Arduino.app) in the Resources/Java/hardware/arduino/cores/arduino folder. After that, it just does:
int main(void) { init(); setup(); for (;;) loop(); return 0; }
The one thing that is slightly annoying with arduino is how terribly inefficient the libraries are. For example, digitalWrite is like half a gazillion cycles (I remember counting, it was well in the 3 digits), while it's one cycle if you use the normal approach (port |= _BV(bit)). Also, the initialization code snips one timer interrupt from you, which can be annoying as well. The way around that, because I actually like the fact that I can just reuse some library for whatever chip is around (something that is definitely not common in the embedded world) is to just remove the call to init() in the main.cpp file.
The rest is really just C++, with all the avr includes and co available. You also just need to dump whatever source you have available into your library folder as well.
http://arduino.cc/playground/OpenBSD/CLI
Most of the non-IDE toolchains I've encountered were horrific monsters, including several TextMate bundles. I wonder how worthwhile it would be to create a simple wrapper a la dotcloud's deploy utility, or Rails' initial project build.
It took me less time from opening the Arduino package to having the first blinky LED program running - than it took to even figure out which software I need to download for the MSP430, then actually download it, then install it, then rummage through all the useless options, etc. Ugh. :(
Now I'm programming naked AVRs, but there's no doubt - Arduino is still easier and more time-effective for most amateur projects. Maybe a naked-AVR board, 8 pin DIP, could beat it for extremely miniature applications. Otherwise, just use a Nano or Mini, and save your time for other things.
I wish I had an Arduino when I was a kid and was playing with Basic on a small computer - a programmable board like this would have opened the real world to the computer.