• two modes: standard priority based or round robin
  • preemptive multitasking
  • max. 64 tasks on 8 bit processors, max. 1024 tasks on 32 bit processors
  • round robin: max. 8 priority level on 8 bit processors, max. 32 priority level on 32 bit processors


  • the number of events is unlimmited
  • semaphores
  • mutexes
  • flag events

Message Boxes

  • one built in message box per task
  • unlimmited box size, messages are collected
  • messages can be pointers or huge buffers


  • autonomous running timer, the system timer interrupt is used as timebase
  • timer can work in one shot mode or in auto reload mode
  • when a timer expires, it triggers a semaphore event
  • the number of timer is unlimmited

Software Interrupts

  • up to 256 simulated software interrupts on 8 bit processors
  • can be used to interface fast hardware interrupts outside the scope of pico]OS to the operating system

Atomic Variables

Get / set / increment(add) / decrement(sub) a variable in one atomic, uninterruptable operation.

Blocking And Nonblocking Lists

Lists can be used for packet queues and data interchange between two tasks or an ISR and a task. There are two modes of lists, blocking and nonblocking. Nonblocking lists are universal, whereas blocking lists are ideal for packet queues and data interchange in common.

Bottom Halfs

Bottom Halfs are used in conjunction with interrupt service routines. The ISR is the "top half" that does the time critical operations, whereas the "bottom half" does the non critical parts of an usual ISR. Bottom halfs are executed at task level, so all operating system features can be used within a bottom half.

This is a nano-layer feature.

Multitasking Able Console I/O

pico]OS supports its own version of printf. The console outputs are serialized, so strings remain readable even when multiple tasks will write to the console. Standard console input from a keyboard is also supported, pico]OS supports a keyboard input buffer and multitasking able functions comparable to getch() and kbhit().

Because pico]OS comes with its own version of the printf-functions, you may not need a runtime library in some special cases, so code size would shrink.

This is a nano-layer feature.

Dynamic Memory Management

pico]OS comes with its own multitasking able memory manager. The memory manager can be configured to replace the manager from the runtime library, or the memory manager of the runtime library can be used by pico]OS. A locking mechanism ensures task protection, and enables the RTOS core to dynamically allocate memory.

With the dynamic memory manager enabled, pico]OS is capabil to support an "unlimmit count of resources" like events, timer and messages.

This is a nano-layer feature.


The registry is used to store short ASCII strings paired with binary data. This mechanism enables pico]OS to manage named resources, such like named semaphores, mutexes and tasks. This feature enables you to access a semaphore by just nowing their ASCII name, for example. Further more, you can use the registry to store your own (configuration) data.

This is a nano-layer feature.

CPU usage measurement

The nano-layer uses the idle task do measure the current CPU usage. The CPU usage is displayed in percent and is updated one time per second.

This is a nano-layer feature.

Debug Help

pico]OS implements various mechanisms to support you debugging your application. For example, when you are using an integrated IDE or an in-circuit debugger, you can really easyly view the state of tasks and semaphores.