The µC/OS Story
by Jean J. Labrosse

The μC/OS story started when, in 1989, I joined Dynalco Controls in Fort Lauderdale, Florida, and began working on the design of a new microprocessor-based ignition control system for a large industrial reciprocating engine.

I was convinced that an operating system would substantially benefit this project. The kernel that I initially considered was one that had served me well in the past. However, it carried a hefty price tag, and my budget was somewhat meager. The alternative was a kernel that I had not used before, but it was one-fifth the price of my original choice. Ultimately, I decided that the financial benefits of using the unfamiliar operating system outweighed the potential advantages of its higher-priced counterpart.

Jean J. Labrosse

Jean J. Labrosse

I quickly realized, however, that I would pay for the seemingly cheaper operating system with my time. During the two months after receiving the kernel, I was in constant contact with technical support, trying fruitlessly to determine why even the simplest applications would not run. I eventually discovered that I was one of the first customers to purchase this operating system, and was essentially an unknowing beta tester.

Frustrated with the software’s many shortcomings, I turned to the relatively expensive operating system that I originally rejected. It seems that if a project is late, money is no object. Within two days, I was running simple applications. My kernel-related problems seemed to be over.

Before long, however, I found myself at another impasse. One of my engineers reported that the new operating system seemed to contain a bug. I promptly relayed the engineer’s findings to the software vendor, assuming that the company would be interested. Instead of receiving assurance that the bug would be fixed, I was notified that the 90-day warranty had expired. Unless I purchased a maintenance contract, the bug would not be eliminated, which was absurd to me. The software provider thought otherwise, and I forked over the maintenance fee.

Incredibly, the vendor took six months to actually remove the bug. All told, I completed my ignition system a year after receiving the software. Clearly, I needed a better solution.

Twice disappointed, I began to develop my own kernel. In my naïve opinion, all a kernel really did was to save and restore CPU registers; writing one should not be especially challenging. The project kept me busy at night and on weekends, and proved to be much more difficult than I anticipated. Approximately a year after I starting the project, my first operating system — named μC/OS — was complete.

μC/OS was designed according to the stringent standards that I created and promulgated at Dynalco. The operating system’s source code featured liberal spacing, carefully worded comments, and consistent naming. Offering further evidence of the prudent coding techniques, the kernel was also highly portable. Although μC/OS, like its kernel peers, featured a small number of processor-specific functions, these routines were clearly separated from other portions of the operating system. Engineers could easily adapt μC/OS to new CPU architectures.

Unfortunately, I was the only one to know about the virtues of μC/OS. Eager to describe my new software to others, I wrote an in-depth paper explaining the inner workings of μC/OS.

Embedded Systems Programming published a trimmed-down version of the paper as a two-part series, and it generated a strong response. Engineers were grateful that the inner workings of a high-quality kernel were revealed, and they downloaded the μC/OS source code in droves. Shortly after my article appeared in Embedded Systems Programming, R & D Publications, publisher of C User’s Journal contacted me. They were interested in printing an entire μC/OS book.

In late 1992, my first book, aptly titled μC/OS, The Real-Time Kernel, was released. The book had 250 pages, and was available in paperback form.

Although initial sales of the book were somewhat disappointing, R & D advertised μC/OS, The Real-Time Kernel each month in C User’s Journal. At the same time, I was beginning to gain attention as a kernel expert. In the spring of 1993, I was invited to speak at the Embedded Systems Conference (ESC) in Atlanta, Georgia, where I described operating system fundamentals to a highly receptive audience of more than 70 embedded enthusiasts.

Within a few years, I was an ESC fixture, delivering my kernel lectures to hundreds of engineers at each conference.

While my popularity as a speaker rose, interest in my book also picked up steam. After its slow start, μC/OS: The Real-Time Kernel went on to sell more than 15,000 copies.

For several years, only minor changes were made to μC/OS. However, when R & D asked me to write a second edition, I decided that a substantial update of both the operating system and the book was warranted. The updated operating system became μC/OS-II.

μC/OS-II also offered many features that its predecessor lacked, including stack-checking capabilities, hook functions, and a safe means to dynamically allocate memory.

I nearly doubled the size of the book. Just as the latest version of the software received a new name, the new edition became MicroC/OS-II: The Real-Time Kernel. (“Micro” was used in place of “μ” because titles incorporating Greek letters posed problems for many book retailers.) Unlike my first text, the new book would be a hardcover.

MicroC/OS-II: The Real-Time Kernel was released in 1998. This new text was accompanied by the source code, and I would again have thousands of developers testing the kernel and providing valuable feedback.

Many university professors recognized the book's appeal and started designing entire courses around μC/OS-II. Soon college graduates whose kernel training focused on the operating system made their way into the workforce, where they continued to use μC/OS-II.

While students gravitated to μC/OS-II because of my book and readily available source code, a substantial number of engineers using μC/OS-II commercially selected the software for its reliability. Definitive proof of the operating system’s reliability was provided in July 2000, when DO-178B Level A certification was conferred on an avionics product incorporating μC/OS-II. This certification, recognized by the Federal Avionics Administration (FAA), is awarded to software deemed safe enough to be used in aircraft. To this day, there are few operating systems that have successfully completed the rigorous testing that certified software must undergo.

Additional certifications for μC/OS-II include Food and Drug Administration (FDA) pre-market notification (510(k)), pre-market approval (PMA) for medical devices, and IEC-61508 for industrial controls.

I finally made the decision to found my own software company, and in September 1999, Micrium officially came into being. Micrium comes from the word ‘Micro’ (for microprocessors or microcontrollers) and ‘ium’ (which means the Universe of) and thus, Micrium means the Universe of Microprocessors (as seen through the eyes of software).

In the months before incorporating Micrium, I began working on a second edition of the μC/OS-II book, which made its debut in November 1999 and was accompanied by a new version of the kernel. Two major features were added to the operating system: event flags and mutual exclusion semaphores.

Micrium expanded. Engineers were hired to adapt μC/OS-II to new hardware platforms and develop a bevy of example projects and application notes. Over the years, Micrium’s product portfolio expanded from a one-product company to one with a portfolio of 15 products.

uCOS-III_LogoAs Micrium’s president, I remain dedicated to writing world-class kernel code. In fact, in 2007, I decided that it was time for yet another update to the book and the kernel itself. The product of countless hours of meticulous programming and testing, this robust operating system has its roots in μC/OS-II, yet is an entirely new kernel. Addressing input received from customers and all of the lessons learned along the way, the μC/OS-III kernel contains a look and feel similar to μC/OS-II but with a completely revised and consistent API. μC/OS-III also introduced a few new features such as a semaphore and message queue built-into each task, software timers, additional run-time statistics, better debugging support and more.

The μC/OS-III book was introduced in 2008 and featured an MCU from ST, the Cortex-M3-based STM32F107. The book was designed to allow readers to not only understand the inner workings of a kernel but also experiment with one on an actual popular MCU. So, in collaboration with ST, Micrium designed a low-cost companion evaluation board to be used with the book. Not only was the board able to run the μC/OS-III kernel but allowed users to run the Micrium TCP/IP stack, File System and USB stacks.

Micrium-Books-ShotThe μC/OS-III book is divided into two parts. Part 1 describes the internals of μC/OS-III and how to use the kernel in a generic way. Part 2 contains actual examples using the companion evaluation board. In fact, over the years that followed, we introduced a total of seven μC/OS-III books, each targeting a different MCU.

Since the acquisition of Micrium by Silicon Labs in 2016, μC/OS-III has evolved into the Micrium OS Kernel which Silicon Labs has been optimizing for performance, size and power consumption and offers for free to its customers. Silicon Labs is committed to enhancing, supporting and licensing μC/OS-II, μC/OS-III and other Micrium software to customers using MCUs from different manufacturers.

I am highly circumspect of fads and unproven technology as I write new software. Although I like to keep abreast of the latest developments in the high-tech world, the focus is on solving engineers’ problems and providing a solid and complete infrastructure, rather than on how to prematurely exploit emerging trends. This philosophy has yielded considerable success and respect over the years.

Industry surveys consistently show Micrium’s software to be among the most popular in the embedded space and together Micrium and Silicon Labs are simplifying IoT design by giving developers a choice of hardware platforms, wireless stacks, and development tools based on the industry’s leading embedded RTOS.