Contiki
# Contiki

Contiki è un sistema operativo multitasking leggero, open source e altamente portatile. È stato sviluppato per essere utilizzato su un vasto numero di sistemi che vanno dai computer a 8-bit fino ai sistemi embedded su microcontroller. Il nome Contiki deriva dalla zattera Kon-Tiki con la quale Thor Heyerdahl fece una spedizione per dimostrare che i polinesiani erano in grado di ritornare dal Sud America al loro arcipelago.

Benché sia in grado di gestire il multitasking, Contiki ha bisogno solo di pochi kilobyte di codice e di poche centinaia di byte di RAM. Il sistema completo, comprensivo di GUI, utilizza circa 30 kilobyte di RAM.

Il kernel di base e la maggior parte delle funzioni del nucleo sono state sviluppate da Adam Dunkels al "Networked Embedded Systems group" dell'Istituto svedese di Informatica.

## Progetto

Contiki è scritto in linguaggio C, ed è particolarmente adatto per sistemi embedded con poche risorse hardware. Una configurazione tipica di Contiki è di 2 kilobyte di RAM e 40 kilobytes di ROM. È stato progettato appositamente per la Internet of Things per estendere la Internet globale agli oggetti.

Contiki è costituito da un kernel ad eventi, sul quale le applicazioni vengono caricate e scaricate dinamicamente a runtime. Lo scheduling è di tipo non-preemptive, dunque la CPU viene liberata dal processo solo quando termina o si blocca in attesa di un evento. I processi di Contiki sono protothread che consentono uno stile di programmazione a thread alquanto lineare.

Per il networking è stata implementata la pila protocollare uIP che è uno stack TCP/IP appositamente progettato per sistemi ad 8 e 16 bit. Dall'ottobre 2008, uIP è compatibile con il protocollo IPv6. È implementato anche il protocollo 6LoWPAN (IPv6 over Low-Power Wireless Personal Area Networks) che permette di utilizzare il protocollo IPv6 in reti WPAN, grazie alla compressione dell'header IPv6. Inoltre è implementato RPL, un protocollo di routing per reti a bassa potenza.

## Programmazione

Per sviluppare un'applicazione Contiki, prima di tutto bisogna definire un processo. La struttura base di una applicazione è la seguente:

Il Makefile ha la seguente struttura:

## Piattaforme

Contiki è in grado di girare su una vasta varietà di piattaforme, dai microcontroller come il TI MSP430 e il Atmel AVR fino ai vecchi home computer. Il sistema è stato portato (o è in fase di porting) per i seguenti sistemi:

* Computer:
   * Apple II
   * Atari 8-bit
   * Atari ST
   * Atari Portfolio
   * Casio Pocketview
   * Commodore PET
   * Commodore VIC 20
   * Commodore 64
   * Commodore 128
   * Oric Atmos
   * PC-6001
   * Sharp Wizard
   * Sistemi x86 Unix-like
* Console per videogiochi:
   * PC Engine
   * Nintendo Entertainment System
   * Atari Jaguar
   * Nintendo Game Boy
   * Nintendo Game Boy Advance
   * GP32
* Microcontroller:
   * Atmel AVR
   * TI MSP430, TI CC2538(RE-mote, Firefly, Zoul)
   * STMicroelectronics STM32W
   * Microchip PIC32 (PIC32MX795F512L)
