Content deleted Content added
→External links: replace dead link |
m HTTP to HTTPS for Cornell University |
||
(20 intermediate revisions by 16 users not shown) | |||
Line 1:
{{Short description|Real-time operating system}}
{{Infobox OS
| name
| logo
| caption
| developer
| family =
| source model = [[Open Source]], Apache license (as of 2020)▼
| released = {{Start date and age|1991}}▼
| supported platforms = [[ARM Cortex-M#Cortex-M3|ARM Cortex-M3]], [[ARM Cortex-M#Cortex-M4|Cortex-M4F]], [[ARM7#ARM7TDMI|ARM7TDMI]]; [[Atmel AVR]]; [[eSi-RISC]], and many others.▼
| ui = μC/[[Graphical user interface|GUI]] ▼
| family = [[Real-time operating system]]s▼
| latest release version = OS-III
| latest release date
| repo = {{URL|https://github.com/weston-embedded/uC-OS3}}
| marketing target = [[Embedded device]]s▼
|
|
| language
▲| supported platforms
▲| working state = Current
| license = [[Open Source]] as of 2020. Previously [[Commercial software|Commercial]], [[freeware]] education use.▼
| website = {{URL|www.micrium.com/products}}▼
▲| license
| website = {{URL|https://weston-embedded.com/micrium/overview}}
}}
{{Infobox OS
'''Micro-Controller Operating Systems''' ('''MicroC/OS''', stylized as '''μC/OS''') is a [[real-time operating system]] (RTOS) designed Jean J. Labrosse in 1991. It is a priority-based [[Preemption (computing)|preemptive]] [[Real-time computing|real-time]] kernel for [[microprocessor]]s, written mostly in the programming language [[C (programming language)|C]]. It is intended for use in [[embedded system]]s.▼
| name = Micrium OS
| logo =
| caption =
| developer = Silicon Labs
| family =
| working state = Current
| source model = [[Open-source software|Open-source]]
| released = {{Start date and age|2020}}
| latest release version = Part of Gecko Platform 4.2.0.0,<ref>{{cite web|url=https://www.silabs.com/documents/public/release-notes/gecko-platform-release-notes-4.2.0.0.pdf|title=Gecko Platform 4.2.0.0 GA|access-date=2023-01-04|date=2022-12-14}}</ref> part of Gecko SDK 4.2.0.0<ref>{{cite web|url=https://github.com/SiliconLabs/gecko_sdk/releases|title=gecko_sdk Releases on github.com|website=[[GitHub]] |access-date=2023-01-04}}</ref>
| latest release date = {{Start date and age|2022|12|14}}
| repo = {{URL|https://github.com/SiliconLabs/gecko_sdk/tree/gsdk_4.2/platform/micrium_os}}
| programmed in = [[ANSI C]]
| language = English
| supported platforms = exclusively Silicon Labs silicon
| kernel type = [[Real-time operating system|Real-time]] [[microkernel]]
| license = [[Apache License|Apache]]
| website = {{URL|https://www.silabs.com/developers/micrium-os}}
}}
{{Infobox OS
| name = Cesium RTOS
| logo =
| caption =
| developer = Weston Embedded Solutions
| family =
| working state = Current
| source model = [[Commercial software|Commercial]]
| released = {{Start date and age|2020|06|23}} (forked from uC/OS-III V3.08.00)<ref name=cesium_changelog>{{cite web|url=https://weston-embedded.com/cesium-release-notes/cs-os3-release-notes|title=Cs/OS3 Release Notes|publisher= Weston Embedded Solutions}}</ref>
| latest release version = Cs/OS3 3.09.05<ref name=cesium_changelog />
| latest release date = {{Start date and age|2025|04|22}}<ref name=cesium_changelog />
| marketing target = [[Embedded device]]s
| programmed in = [[ANSI C]]
| language = English
| supported platforms = 50+ unclear whether there is a 1-to-1 overlap with μC/OS
| kernel type = [[Real-time operating system|Real-time]] [[microkernel]]
| license = [[Commercial software|Commercial]]
}}
▲'''Micro-Controller Operating Systems''' ('''MicroC/OS''', stylized as '''μC/OS''', or '''Micrium OS''') is a [[real-time operating system]] (RTOS) designed by Jean J. Labrosse in 1991. It is a priority-based [[Preemption (computing)|preemptive]] [[Real-time computing|real-time]] kernel for [[microprocessor]]s, written mostly in the programming language [[C (programming language)|C]]. It is intended for use in [[embedded system]]s.
MicroC/OS allows defining several functions in C, each of which can execute as an independent thread or task. Each task runs at a different priority, and runs as if it owns the [[central processing unit]] (CPU). Lower priority tasks can be preempted by higher priority tasks at any time. Higher priority tasks use operating system (OS) services (such as a delay or event) to allow lower priority tasks to execute. OS services are provided for managing tasks and memory, communicating between tasks, and timing.<ref>{{cite web |url=
==History==
The MicroC/OS kernel was published originally in a three-part article in Embedded Systems Programming magazine and the book ''μC/OS The Real-Time Kernel'' by Labrosse.<ref>{{cite book |last=Labrosse |first=Jean J.
In 2016 Micrium, Inc. was acquired by Silicon Laboratories<ref>{{cite web|url=https://weston-embedded.com/about-micrium|title=What is Micrium?|access-date=2023-01-04|publisher=Weston Embedded Solutions}}</ref> and it was subsequently released as open-source under the [[Apache license]].
Silicon Labs continues to maintain an open-source product named Micrium OS for use on their own silicon<ref>{{cite web|url=https://www.silabs.com/developers/micrium|title=Micrium Software and Documentation|access-date=2023-01-04}}</ref> and a group of former Micrium, Inc. employees (including Labrosse) provides consultancy and support for both μC/OS and Cesium RTOS, a proprietary fork made just after the open-source release.<ref>{{cite web|url=https://weston-embedded.com/why-cesium|title=Why Cesium RTOS?|access-date=2023-01-04|publisher= Weston Embedded Solutions}}</ref>
==μC/OS-II==
Based on the source code written for μC/OS, and introduced as a commercial product in 1998, μC/OS-II is a [[Software portability|portable]], ROM-able, [[scalable]], preemptive, real-time, deterministic, multitasking [[Kernel (operating system)|kernel]] for [[microprocessor]]s, and [[digital signal processor]]s (DSPs). It manages up to
Most of μC/OS-II is written in highly portable [[ANSI C]], with target microprocessor-specific code written in [[assembly language]]. Use of the latter is minimized to ease [[porting]] to other processors.
=== Uses in embedded systems ===
μC/OS-II was designed for embedded uses. If the producer has the proper
μC/OS-II is used in many embedded systems, including:
Line 54 ⟶ 96:
*Waiting (for an event)
*Interrupted ([[Interrupt handler|interrupt service routine]] (ISR))
Further, it can manage up to
===Kernels===
The [[Kernel (operating system)|kernel]] is the name given to the program that does most of the housekeeping tasks for the operating system. The boot loader hands control over to the kernel, which initializes the various devices to a known state and makes the computer ready for general operations.<ref>[[Wikiversity:Operating Systems/Kernel Models#Monolithic Kernel]]</ref> The kernel is responsible for managing tasks (i.e., for managing the CPU's time) and communicating between tasks.<ref>{{cite book|last=Labrosse|first=Jean J.|title=MicroC/OS-II: The Real Time Kernel|page=39|edition=
The [[scheduler]] is the part of the kernel responsible for determining which task runs next.<ref name="LabrosseP40">{{cite book|last=Labrosse|first=Jean J.|title=MicroC/OS-II: The Real Time Kernel|page=40|edition=
===Assigning tasks===
Tasks with the highest rate of execution are given the highest priority using [[rate-monotonic scheduling]].<ref>{{cite journal|last1=Liu|first1=Chung Lang|last2=Layland|first2=James W.|title=Scheduling algorithms for multiprogramming in a hard real-time environment|journal=Journal of the ACM |volume=20|issue=1|pages=46–61|doi=10.1145/321738.321743|year=1973|citeseerx=10.1.1.36.8216|s2cid=59896693 }}</ref> This scheduling algorithm is used in real-time operating systems (RTOS) with a [[static-priority scheduling class]].<ref>{{cite web|last1=Bovet |first1=Daniel |title=Understanding The Linux Kernel |url=http://oreilly.com/catalog/linuxkernel/chapter/ch10.html#85347 |url-status=dead |archiveurl=https://web.archive.org/web/20140921000832/http://oreilly.com/catalog/linuxkernel/chapter/ch10.html |archivedate=2014-09-21 }}</ref>
===Managing tasks===
Line 73 ⟶ 115:
*Change a task's priority
*Suspend and resume a task
*Get information about a task<ref>{{cite book|last=Labrosse|first=Jean J.|title=MicroC/OS-II: The Real Time Kernel|pages=45–49|edition=
===Managing memory===
To avoid [[Fragmentation (computing)|fragmentation]], μC/OS-II allows applications to obtain fixed-sized memory blocks from a [[Memory management (operating systems)#Partitioned allocation|partition]] made of a contiguous memory area.
===Managing time===
μC/OS-II requires that a periodic time source be provided to keep track of time delays and timeouts. A tick should occur between 10 and 1000 times per second, or [[Hertz]]. The faster the tick rate, the more [[Overhead (computing)|overhead]] μC/OS-II imposes on the system. The frequency of the clock tick depends on the desired tick resolution of an application. Tick sources can be obtained by dedicating a hardware timer, or by generating an [[interrupt]] from an [[alternating current]] (AC) power line (50 or 60 Hz) signal. This periodic time source is termed a clock tick.<ref>{{cite book|last=Labrosse|first=Jean J.|title=MicroC/OS-II: The Real Time Kernel|pages=145–152|edition=
After a ''clock tick'' is determined, tasks can be:
Line 99 ⟶ 141:
===Task states===
μC/OS-III is a [[Computer multitasking|multitasking]] operating system. Each task is an infinite loop and can be in any one of five states (dormant, ready, running, interrupted, or pending).
===Round robin scheduling===
Line 111 ⟶ 153:
===Managing tasks===
Task management also functions the same as for μC/OS-II
A task can be implemented
===Managing memory===
Line 124 ⟶ 166:
Sometimes, a task or ISR must communicate information to another task, because it is ''unsafe'' for two tasks to access the same specific data or hardware resource at once. This can be resolved via an information transfer, termed inter-task communication. Information can be communicated between tasks in two ways: through global data, or by sending messages.
When using global variables, each task or ISR must ensure that it has exclusive access to variables. If an ISR is involved, the only way to ensure exclusive access to common variables is to disable [[interrupt]]s. If two tasks share data, each can gain exclusive access to variables by either disabling interrupts, locking the scheduler, using a [[Semaphore (programming)|semaphore]], or preferably, using a [[mutual exclusion]] semaphore. Messages can be sent to either an intermediate object called a [[message queue]], or directly to a task, since in μC/OS-III, each task has its own built-in message queue. Use an external message queue if multiple tasks are to wait for messages. Send a message directly to a task if only one task will process the data received.
==Ports==
A port involves three aspects: CPU, OS, and board specific (BSP) code. μC/OS-II and μC/OS-III have ports for most popular processors and boards in the market and are suitable for use in [[safety critical]] embedded systems such as aviation, medical systems, and nuclear installations. A μC/OS-III port involves writing or changing the contents of three kernel specific files: <code>OS_CPU.H</code>, <code>OS_CPU_A.ASM</code>, and <code>OS_CPU_C
==Licensing Change==▼
After acquisition by Silicon Labs, Micrium in 2020 has changed to an Open Source licensing model in February 2020. This includes uC/OS III, all prior versions, all components (USB, file system, GUI, TCP/IP, etc).▼
▲After acquisition by Silicon Labs, Micrium in 2020
==Documentation and
==References==
Line 147 ⟶ 186:
==External links==
*{{Official website|https://web.archive.org/web/20231206170818/https://www.
*{{
*[
*[
*[http://www.farnell.com/datasheets/1950186.pdf μC/OS-II Reference Manual]
*[http://ftp1.digi.com/support/documentation/0220047_e.pdf How to Get a μC/OS-II Application Running]
|