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)
|