1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

added information from Introduction page to the API start page

This commit is contained in:
Oleg Hahm 2014-01-16 18:20:54 +01:00
parent 7335cd71c7
commit 8695e3b102

View File

@ -1,6 +1,165 @@
/*! \mainpage RIOT Documentation
*
* RIOT is an operating system for the Internet of Things based on a microkernel architecture.
* \section overview Overview
*
* RIOT is an operating system designed for the particular requirements of Internet
* of Things (IoT) scenarios. This requirements comprise a low memory footprint,
* high energy efficiency, real-time capabilities, a modular and configurable
* communication stack, and support for a wide range of low-power devices. RIOT
* provides a microkernel, utilities like cryptographic libraries, data structures
* (bloom filters, hash tables, priority queues), or a shell, different network
* stacks, and support for various microcontrollers, radio drivers, sensors, and
* configurations for entire platforms, e.g. TelosB or STM32 Discovery Boards.
*
* The microkernel itself comprises thread management, a priority-based scheduler,
* a powerful API for inter-process communication (IPC), a system timer, and
* mutexes.
*
* In order to build an application or library with RIOT, you need first to
* download the source code ([Getting the source
* code](https://github.com/RIOT-OS/RIOT/wiki/Introduction#getting-the-source-code)). This contains - besides the
* before mentioned features - also some example applications (located in the
* `examples` subdirectory) and a sample Makefile you may use for your own
* project. This Makefile template shows you how to compile and link your project
* against RIOT ([Compiling RIOT](https://github.com/RIOT-OS/RIOT/wiki/Introduction#compiling-riot)).
*
* If you want to use RIOT directly with your embedded platform, you need to
* install the corresponding toolchain for the deployed microcontroller ([ARM
* based platforms](https://github.com/RIOT-OS/RIOT/wiki/Introduction#platforms-based-on-arm), [TI MSP430 based
* platforms](https://github.com/RIOT-OS/RIOT/wiki/Introduction#platforms-based-on-ti-msp430)).
*
* ###Native RIOT - Run RIOT on your PC!
*
* As a special platform, you will find a CPU and board called `native` in the
* repository. This target allows you to run RIOT as a process on Linux on most
* supported hardware platforms. Just set CPU and BOARD to `native` in your
* project's Makefile, call `make`, and execute the resulting elf-file. Further
* documentation about the native port can be found in `cpu/native/README`.
*
* \subsection structure Structure
*
* The RIOT repository contains the following ten subdirectories:
* * boards
* * core
* * cpu
* * dist
* * doc
* * drivers
* * examples
* * pkg
* * sys
* * tests
*
* The `boards` directory provides the configurations and initialization code for
* supported IoT platforms. In `core` you can find the kernel, while `cpu`
* comprises microcontroller specific implementations like startup and exception
* handling code. The folder `dist` contains a template for an application's Makefile
* and external utilities like the terminal program `pyterm` or a script to build
* your own toolchain for ARM microcontrollers. Not very surprisingly you will find
* the (doxygen) documentation in `doc` and peripheral driver code in `drivers`.
* The `examples` folder provides some exemplary applications, `pkg` includes
* Makefiles to integrate external libraries into RIOT, and `sys` system libraries
* as well as the implementation of the network stacks which are located in
* `sys/net`. Finally, the subdirectory `tests` contains test applications,
* including also a few expect scripts to automatically validate some of them.
*
* \section features Special features
*
* ####The build system
*
* RIOT uses GNU make as build system. The simplest way to compile and link a
* project (application or library) with RIOT, is to set up a Makefile providing
* at least the following variables:
* * PROJECT
* * BOARD
* * RIOTBASE
*
* and an instruction to include the `Makefile.include`, located in RIOT's root
* folder. `PROJECT` should contain the (unique) name of your project, `BOARD`
* specifies the platform the project should be built for by default, and
* `RIOTBASE` specifies the path to your copy of the RIOT repository (note, that
* you may want to use `$(CURDIR)` here, to give a relative path). You can use Make's
* `?=` operator in order to allow overwriting variables from the command line. For
* example, you can easily specify the target platform, using the sample Makefile,
* by invoking make like this:
*
* ```
* make BOARD=telosb
* ```
*
* Besides typical targets like `clean`, `all`, or `doc`, RIOT provides the special
* targets `flash` and `term` to invoke the configured flashing and terminal tools
* for the specified platform. These targets use the variable `PORT` for the serial
* communication to the device. Neither this variable nor the targets `flash` and
* `term` are mandatory for the native port.
*
* Some RIOT folders contain special Makefiles like `Makefile.base`,
* `Makefile.include` or `Makefile.dep`. The first one can be included into other
* Makefiles to define some standard targets. The files called `Makefile.include`
* are used in `boards` and `cpu` to append target specific information to
* variables like `INCLUDES`, setting the include paths. `Makefile.dep` serves to
* define dependencies.
*
* ####Including modules
*
* By default a RIOT project comprises only the projects' code itself, the kernel,
* and platform specific code. In order to use additional modules, such as a
* particular device driver or a system library, you have to append the modules'
* names to the USEMODULE variable. For example, to build a project using the SHT11
* temperature sensor and 6LoWPAN network stack, your Makefile needs to contain
* these lines:
* ```
* USEMODULE += sht11
* USEMODULE += sixlowpan
* ```
* To contribute a new module to RIOT, your module's Makefile needs to set the
* variable `MODULE` to a unique name. If the module depends on other modules, this
* information needs to be added to RIOT's `Makefile.dep`.
*
* ####The main function
*
* After the board is initialized, RIOT starts two threads: the idle thread and the
* main thread. The idle thread has the lowest priority and will run, whenever no
* other thread is ready to run. It will automatically use the lowest possible
* power mode for the device. The main thread - configured with a default priority
* that is right in the middle between the lowest and the highest available
* priority - is the first thread that runs and calls the main function. This
* function needs to be defined by the project.
*
* ####The IPC
*
* Like any microkernel system, RIOT has an IPC API that enables data exchange
* between modules or a single module and the kernel. This API is documented in
* the [doxygen documentation](http://riot-os.org/api/). The IPC can be used in
* several ways, such as synchronous or asynchronous, blocking or non-blocking,
* with or without a message queue. In the default case, a thread does not have a
* message queue. Hence, messages sent in a non-blocking manner are lost, when the
* target thread is not in receive mode. A thread may set up a message queue using
* the [corresponding function](http://riot-os.org/api/group__kernel__msg.html),
* but has to provide the memory for this queue itself.
*
* ####Auto-init
*
* Most modules require initialization before they can be used. In some cases the
* initialization function does not require a parameter. For these modules you
* might use the auto-init feature by adding a line like
* ```
* USEMODULE += auto_init
* ```
* to your Makefile. Auto-init calls all module initialization functions with a
* `void` parameter just before the main thread gets executed.
*
* ####The transceiver module
*
* The transceiver module is an abstraction layer and multiplexer between the
* network stack and the radio driver. It runs in a single thread with the PID
* `transceiver_pid`. It provides an IPC interface that enables to configure and
* use available radio drivers, e.g. setting the radio channel or sending a packet.
* A thread may also register at the transceiver module, in order to get notified
* whenever a packet for a particular radio transceiver is received. The
* notification message contains a pointer to the packet struct. After processing
* the packet, the registered thread needs to decrease this struct's member
* `processing` which acts as a semaphore for the packet's memory buffer.
*
* \section info_sec Community
*