Friday, November 13, 2009

4 Operating Systems for the Arduino

I was working in the lab, late one night, when my eyes behold an eerie sight... Yes, Halloween is a long time ago, but that stupid song is still stuck in my head. I miss Halloween. I never got to post up pictures of my skeleton running off IXM's. :-)

Anyway, I was browsing the Arduino forums and saw this cool post about DuinOS, a real-time embedded "operating system" for the Arduino.


DuinOS by RobotGroup

It's a simple little realtime OS (RTOS) built by the guys at RobotGroup (hello!), and can be downloaded here. It's meant to have a simple function scheduler, implementing a basic form of multitasking (not quite multithreading, but something like round-robin scheduling I think). That let's someone code multiple functions at a time, that get executed in turn, so that a single Arduino could be executing multiple types of "apps" or "sketches" at the same time.

Well, that's something of a stretch, but it's getting there... we won't get into context switching an RAM page swapping just yet :-)

So then that got me thinking, why not write up the other "OS's" out there for the Arduino platform. So here are the other 3 Arduino operating systems I'm aware of...


Pyxis OS by ArduinoWill

This is a graphical OS built on top of the Arduino and TouchShield platform, and is written by ArduinoWill (aka Thom). Thom is ridiculous, and extremely talented at coding. He has been prototyping some of the craziest stuff I've seen on the MegaPalm kit, DOSonChip, and the TouchShield Slide.

Ok. Here's a video of Pyxis OS in operation, which is quite ridiculous:



ArduinoWill also figured out a crazy hack to implement portrait and landscape mode...



And I'm not even going to mention the Super Mario level port:



Pretty insane... 12 fps. 0x000C. 00000110b frames per second. I'm still trying to figure out how you did this...

ArduinoMacOS by Mark

Mark managed to port a few apps to the Slide, including... um, I don't know... a GPS, Tic Tac Toe, Tetris, a Calculator, Oscilloscope, Breakout, The Matrix Screensaver, and a Canvas Drawing program. And the Control Panel. And Hex editor. And a Graphics Demo. And an analog Pin Visualizer.

And it's all zipped up over at the Open Source App Store here.


I wish I still had screen shots... I've searched my hard drive inside out, but instead, I just have the source code :-( EDIT: I finally found some pictures, and uploaded them above...


TaOS by Ziplock

Here's another lite-weight operating system, this time built by Ziplock. It's a simple embedded GUI that focuses on assigned blocks of code to little squares. In essence, it's the epitome of a miniature, lightweight script execution OS. Applications are like mini-apps.

If every operating system were written with this little overheard, I'd be running Quake on an 8 bit Motorola 6800 written in assembler...

Anyway, I digress, but the code for TaOS is all available over here.

6 comments:

Matt said...

ugh. i hate when embedded youtube videos spill out over the edges. blogger stinks!!!

Adam said...

Cool! I'm in here!

I haven't worked on TaOS in a while, because I've been caught up in a science project. I've been wanting to do a major re-write for a while, because currently TaOS apps are pre-built to work with the operating system; they really aren't block-based. So, some work is in order...

Adam said...

On a semi-unrelated note...

What do the pins in the X3 header do (on the TouchShield Slide)?

Thom said...

The latest video of Pyxis is up; I've added support for full-screen 32 & 24 bpp bitmaps.

http://www.youtube.com/watch?v=Kc9c6PeSSeI

Thom said...

@Adam, the X3 header is unused. You can see the actual connections here: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1180915644/7

David said...

Anyone that is doing more then a simple LED blinking app should look at DuinOS which is a port of FreeRTOS. FreeRTOS is on numerous other micro's including the 32bit AVRs and ARMs. DuinOS uses one of the interrupts on an arduino. You can set priorities to each task, implement idle tasks, use queues between tasks, etc. Many of the more advanced libraries basically use similar techniques but there is no standardization between these libaries and is somewhat difficult to properly "plugin" to those libaries. DuinOS basically standardizes this and allows your own code to easily take advantage of an "event driven" architecture.