Ideas for explaining simple RTOS through Arduino

I am looking for some basic application examples to explain students concepts of RTOS.
I am using DuinOS library currently. DuinOS has two basic example which use only leds.
Kindly share your ideas with me on ,How can be more examples build to explain concepts of RTOS a little differently.

I was only able to think about calculating frequency of two pins A and B having same signal, using two routines A and B having different task priorities which are running in parallel.

I know there can be many examples like this but couldn't do beyond adding a serial port for debugging to above Idea.

So if any interesting one comes to your mind don't forget to share.

I am into publishing if any body has some articles on RTOS or has created examples using DuinOS library just PM me. I will not forget to mention your name. :slight_smile:

I've had the same idea: I believe Arduino would be an excellent basis for teaching real-time software design, all the way from simple unitasked busy-waiting stuff using the Arduino platform, to complex multitasked interrupt-driven applications using a platform like FreeRTOS. Instructors could start small with the Arduino SW and IDE on the Arduino Uno, and migrate to advanced topics related to how commercial embedded product development is done on Arduino Mega and clones. That's basically what I did: learned the AVR architecture on the Uno with Arduino, then got FreeRTOS running on a Freetronics EtherMega (a Arduino Mega clone that has the equivalent of an Ethernet Shield integrated on to the board), then wrote a C++ OO wrapper layer around the FreeRTOS facilities (because that's my own thing: applying C++ and OO to embedded development), then wrote interrupt-driven device drivers for Serial and SPI in C++, and drive it all with a simple unit testing framework to convince myself it all works. I think the Arduino HW is a pretty much idea platform for teaching and learning this kind of stuff.

The FreeRTOS docs, both the reference manual and the introductory user guide are well worth their tiny price. The Atmel reference manual for the specific microcontroller is a must. I have a slew of textbooks on real-time and concurrent programming, but it would take some thought to decide which one would serve best in a specific course.

I've looked at a lot of platforms over the past few years, including an Atmel AT91 (ARM) evaluation board, BeagleBoards (OMAP ARM), etc. I've spent years doing embedded development on ARM processors using Linux, but I just think that Linux and any processor with a memory management unit is just too complicated for introductory courses. You spent too much time dealing with stuff that isn't core to what you are trying to teach.

A link to a tarball of the whole my whole project can be found here:

http://www.diag.com/navigation/downloads/Amigo.html

Recent blog articles I've written on this topic: