78 lines
1.9 KiB
Markdown
78 lines
1.9 KiB
Markdown
|
- Linux-based
|
||
|
- Small memory (~20 kB)
|
||
|
- Wide network stacks
|
||
|
- TCP/IP
|
||
|
- IPv6
|
||
|
- 6LoWPAN
|
||
|
- IPv6-based
|
||
|
- Header compression
|
||
|
- CoAP
|
||
|
- Application layer protocol
|
||
|
- RPL
|
||
|
- Routing for low power
|
||
|
- Lossy networks
|
||
|
- SSL/TLS
|
||
|
- RIME
|
||
|
- Own communication solution
|
||
|
- Instant Contiki
|
||
|
- Dev environment
|
||
|
- Whole VM
|
||
|
|
||
|
# Functional
|
||
|
- Separates basic system from dynamically loadable and programmable services
|
||
|
- Processes
|
||
|
- Event-driven kernel
|
||
|
- Multi-threading supported by library
|
||
|
- Hybrid OS
|
||
|
- No hardware abstractions
|
||
|
- Services communicate by posting kernel events
|
||
|
- Refer to stack with pointer to process state
|
||
|
- Each service has state in private memory space
|
||
|
|
||
|
![](../../img/iot-os-stack.png)
|
||
|
|
||
|
# Process
|
||
|
- Cooperative
|
||
|
- Code running sequentially with respect to other coop code
|
||
|
- Pre-emptive
|
||
|
- Temporarily stops cooperative code
|
||
|
- Normal processes run cooperatively
|
||
|
- Interrupts and real-time timers run pre-emptively
|
||
|
- Higher priority
|
||
|
- Programs are processes
|
||
|
- Started on boot
|
||
|
- When module containing process loaded
|
||
|
- Processes run on timer firing or external events
|
||
|
|
||
|
# Timers
|
||
|
- Libraries
|
||
|
- Used by applications and system
|
||
|
- Check for timer completion
|
||
|
- Waking system from low power
|
||
|
- Real-time task scheduling
|
||
|
- Allows cooperation when threads sleep
|
||
|
- Low power mode
|
||
|
- timer and stimer
|
||
|
- Simplest
|
||
|
- See if time period passed
|
||
|
- Need querying
|
||
|
- etimer
|
||
|
- Event timers
|
||
|
- Scheduling
|
||
|
- Uses clock time from clock module
|
||
|
- struct etimer
|
||
|
## Clock
|
||
|
- System time starts from zero when the Contiki system starts
|
||
|
- clock_time()
|
||
|
- In ticks
|
||
|
- clock_seconds()
|
||
|
- In seconds
|
||
|
- CLOCK_SECOND
|
||
|
- Ticks per second
|
||
|
|
||
|
# Power Saving Mode
|
||
|
- Kernel does not provide any power saving abstractions
|
||
|
- Need to implement in application
|
||
|
- To help an application decide when to power down the system
|
||
|
- The event scheduler exposes the size of event queue
|
||
|
- If there were not events scheduled, this information can be used to power down the processor
|