µC/OS-III and an OSAL
Introduction
Test preparation
Test execution
Test result
Download
 

Introduction

"µC/OS-III is a preemptive, highly portable, and scalable real-time kernel. Designed for ease of use on a huge number of CPU architectures."

"Since its founding in 1999 as a private company, Micrium and its team of engineers have offered world-class embedded software components for the most critical and demanding real-time applications. Recognized as having some of the cleanest code in the industry, with easy-to-understand documentation, the Micrium real-time kernels, and software components have successfully been deployed in thousands of products worldwide across a broad range of industries. Micrium's µC/OS-II™ kernel has been certified for use in safety-critical applications and remains a respected favorite in the medical, aerospace, and industrial markets. µC/OS continues to be the RTOS of choice for engineers requiring the most reliable and trusted solution for their mission-critical applications."

"Founded by a team of former Micrium employees, Weston Embedded Solutions is the official custodian for the µC/OS RTOS and Stacks software repository to ensure it remains the trusted choice for embedded engineers around the world."

(Source: GitHub)

It's been a long time since I developed TinyCTS, a Cooperative Task Scheduler. At that time, µC/OS was still a commercial product and could not be freely used without a license. Since 2020, µC/OS has been under an Apache 2.0 license and can now be used freely.

In this project I do not use the direct µC/OS-III API but an additional abstraction layer, an Operation System Abstraction Layer or OSAL for short. This means that either µC/OS-III or TinyCTS can be used as the operating system. The reason for this is that I wanted to keep it open to use µC/OS-III or TinyCTS as the operating system for my application.

Test preparation

For the test here I used an iMX RT1062 Developer's Kit from Embedded Artists. And for the compiler SEGGER Embedded Studio for ARM was used.

For the later performance test, iperf v2.1.8 was used in the terminal on a Mac. The computer and the evaluation board are connected to each other via a 1GBit switch.

Test execution

The application was compiled each time in "SDRAM Release" mode and then loaded into the target's SDRAM with JTAG and started.

Inside the terminal of the Mac iperf was started with: iperf -c 192.168.1.200 -P 1

The cpu load of the target can be checked in the terminal of the target by pressing "c".

Test result

In both cases, TinyCTS and µC/OS-III, a bandwidth of 94.9 Mbits/sec could be achieved. But the CPU load of the target was very different:

  • 44% TinyCTS
  • 63% µC/OS-III

This corresponds to a difference in performance of approximately 43%. I do not believe that the OSAL is the performance lag in case of µC/OS-III. Because for the lwIP "sys_arch" functionality the native µC/OS-III API was used.

It is possible that I still have an error in the OSAL, but for the moment it does not makes sense for me to follow the road with µC/OS-III and the OSAL. TinyCTS is currently sufficient for my applications with its smaller range of functionality compared to µC/OS-III.

Download

lwip-tcts-ea1062_20221023 CTS/AL example for a Cortex-M7 board (4.01 MB)

lwip-ucos3-ea1062_20221023 µC/OS-III example for a Cortex-M7 board (4.27 MB)