89 lines
3.6 KiB
Plaintext
89 lines
3.6 KiB
Plaintext
/**
|
|
|
|
\mainpage The \os Operating System
|
|
|
|
\os is an operating system for resource-constrained devices in the
|
|
Internet of Things. \os contains a low-power IPv6 communication stack,
|
|
\ref uip "uIP". uIP is a small RFC-compliant TCP/IP stack that makes
|
|
it possible for \os to communicate over the Internet. The system runs
|
|
on a variety of platforms based on energy-efficient architectures such
|
|
as the ARM Cortex-M3 and the Texas Instruments MSP430. The code
|
|
footprint is on the order of a 100 kb, and the memory usage can be
|
|
configured to be as low as 10 kb.
|
|
|
|
In 2017, \os started as a fork of the Contiki operating system with
|
|
the purpose of making a system focused on standard low-power IPv6
|
|
communication in the IoT. Another important goal is to have a regular
|
|
release cycle and enhanced documentation. Although both systems at the
|
|
beginning have many common interfaces and modules, we expect them to
|
|
diverge considerably in the future.
|
|
|
|
Most of \os is written in the standard C programming language, with
|
|
the exception of some architecture-specific code that may use compiler
|
|
extensions and assembly language. The source code is available as open
|
|
source with a 3-clause BSD license.
|
|
|
|
\section mainpage-getting-started Getting started with \os
|
|
|
|
\os is designed to run on many different \ref platform "platforms". It
|
|
is also possible to compile and build both the \os system and \os
|
|
applications on many different development platforms.
|
|
|
|
\section mainpage-building Building the \os system and its applications
|
|
|
|
The \os build system is designed to make it easy to compile
|
|
\os applications for either to a hardware platform or into a
|
|
simulation platform by simply supplying different parameters to the
|
|
<tt>make</tt> command, without having to edit makefiles or modify
|
|
the application code.
|
|
|
|
See \ref buildsystem
|
|
|
|
\section mainpage-tcpip Low-Power IPv6 Networking
|
|
|
|
One of the main features of \os is a resource-efficient IPv6 network
|
|
stack designed for lossy and low-power networks. The network stack
|
|
comprises protocols such as IPv6, TCP, UDP, DNS, RPL, CoAP, LWM2M, and
|
|
Websockets. Beneath the IPv6 stack, \os supports IEEE 802.15.4
|
|
wireless communication with Time-Slotted Channel Hopping (TSCH).
|
|
|
|
\sa \ref uip "The uIP TCP/IP stack documentation"
|
|
\sa \ref tcpip "The \os/uIP interface"
|
|
\sa \ref psock "Protosockets library"
|
|
|
|
\section mainpage-threads Application Development
|
|
|
|
Applications in \os are implemented using processes, which are based
|
|
on a programming abstraction called Protothreads. Protothreads is
|
|
essentially a lightweight stackless thread-like construct, allowing
|
|
highly efficient context switching.
|
|
|
|
A process is scheduled by an event-driven kernel after an event has
|
|
been sent to the process, either from the kernel of from another
|
|
process. Such events can be the result of a timer expiring, a sensor
|
|
value changing, or a network packet having been received. Once
|
|
scheduled, each process is responsible for yielding control back to
|
|
the scheduler without executing for too long, which is typically done
|
|
by waiting for an event. Alternatively, applications can also use the
|
|
\ref mt, which supports a more traditional thread model with one stack
|
|
per thread.
|
|
|
|
\sa \ref process "Processes"
|
|
\sa \ref pt "Protothreads"
|
|
\sa \ref etimer "Event timers"
|
|
\sa \ref ctimer "Callback timers"
|
|
\sa \ref mt "Optional multi-threading"
|
|
|
|
\section mainpage-lib Libraries
|
|
|
|
\os provides a set of convenience libraries for common programming
|
|
functionality, including memory management and data structures.
|
|
|
|
\sa \ref memb "Memory block management"
|
|
\sa \ref heapmem "Heap memory allocator"
|
|
\sa \ref list "Linked list library"
|
|
\sa \ref ringbuf "Ring buffer library"
|
|
\sa \ref trickle-timer "Trickle timer"
|
|
|
|
*/
|