Contiki
![](http://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Nota_disambigua.svg/18px-Nota_disambigua.svg.png)
Contiki sistema operativo | |
---|---|
![]() | |
Sviluppatore | Adam Dunkels |
Release corrente | 2.7 (15 novembre 2013) |
Tipo di kernel | event-driven monolitico multitasking |
Piattaforme supportate | multipiattaforma |
Tipo licenza | Software libero |
Licenza | Licenze BSD |
Stadio di sviluppo | attivo |
Sito web | www.contiki-os.org/ |
Modifica dati su Wikidata · Manuale |
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:
#include "contiki.h" //deve essere sempre incluso PROCESS(Example, "Example process"); // Definizione del processo AUTOSTART_PROCESSES(&Example); // Avvio al boot PROCESS_THREAD(Example, ev, data) { PROCESS_BEGIN(); // Definisce l'inizio del processo while(1){ PROCESS_WAIT_EVENT (); // applicazione } PROCESS_END(); }
Il Makefile ha la seguente struttura:
CONTIKI = ../.. // dipende dalla posizione del progetto all: app-name include $(CONTIKI)/Makefile.include
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:
- Microcontroller:
- Atmel AVR
- TI MSP430, TI CC2538(RE-mote, Firefly, Zoul)
- STMicroelectronics STM32W
- Microchip PIC32 (PIC32MX795F512L)
Altri progetti
Altri progetti
- Wikimedia Commons
Wikimedia Commons contiene immagini o altri file su Contiki
Collegamenti esterni
- (EN) Contiki: sito ufficiale, su sics.se. URL consultato il 25 agosto 2010 (archiviato dall'url originale il 25 agosto 2010).
- Analisi ed utilizzo di Contiki per il monitoraggio di parametri ambientali (PDF), su monacchi.altervista.org.
![](http://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Computer_n_screen.svg/24px-Computer_n_screen.svg.png)