Escolar Documentos
Profissional Documentos
Cultura Documentos
2010
ChibiOS/RT
A Real-time OS
BK
TP.HCM
www.chibios.org
by Hong Ngc Tun Anh 50700041
and Nguyn Quang Vinh 50702974
dce
2010
Overview
Authur : Giovanni Di Sirio.
ChibiOS/RT ( OS/RT) means small Real
Time Operating System.
Designed for realtime applications.
Preemptive scheduling.
128 priority levels. Multiple threads at the
same priority level are allowed.
Round Robin scheduling for threads at the
same priority level.
Embedded system
dce
2010
Overview
An embedded real time OS which is:
High portability, compact size, efficient
context switching
Static architecture
Dynamic extensions, dynamic object
Many objects : threads, semaphores,
mutexes
Support many hardware abstract drivers
Support architecture: ARM7, ARM CortexM0, Cortex-M3, AVR, MSP430, SMT8
Embedded system
dce
2010
Overview
Programming language : C
Code size ( compiled) about 5kB ~ 10kB
Minimal build can reduce code size to about
1,5kB
Embedded system
dce
2010
License:
Multiple licensing options exist for ChibiOS/RT:
Pure GPL3 license.
For unstable (alpha, beta) release
Commercial license.
Features and price see at webpage
http://chibios.org/dokuwiki/doku.php?
id=chibios:commercial
Embedded system
dce
2010
System state:
Embedded system
dce
2010
Kernel subsystem
Embedded system
dce
2010
dce
2010
Configuration
Define kernel settings and hooks
Embedded system
dce
2010
Types
Define system types and macros
Embedded system
10
dce
2010
Embedded system
11
dce
2010
Embedded system
12
dce
2010
Embedded system
13
dce
2010
Thread state:
Embedded system
14
dce
2010
Embedded system
15
dce
2010
Embedded system
16
dce
2010
Synchronization
Embedded system
17
dce
2010
Counting Semaphores
Signal: The semaphore counter is increased
and if the result is non-positive then a waiting
thread is removed from the semaphore queue
and made ready for execution.
Wait: The semaphore counter is decreased
and if the result becomes negative the thread
is queued in the semaphore and suspended.
Reset: The semaphore counter is reset to a
non-negative value and all the threads in the
queue are released.
Embedded system
18
dce
2010
Counting Semaphores
void chSemInit (Semaphore *sp, cnt_t n)
void chSemReset (Semaphore *sp, cnt_t n)
void chSemResetI (Semaphore *sp, cnt_t n)
msg_t chSemWait (Semaphore *sp)
msg_t chSemWaitTimeout (Semaphore *sp,
systime_t time)
void chSemSignal (Semaphore *sp)
void chSemSignalI (Semaphore *sp)
Embedded system
19
dce
2010
Counting Semaphores
msg_t :
RDY_OK
RDY_RESET
RDY_TIMEOUT
systime_t :
TIME_IMMEDIATE : immediate timeout
TIME_INFINITE
: no timeout
Embedded system
20
dce
2010
Binary Semaphores
Use the existing counting semaphores
Counter of binary semaphores is not
allowed to grow above the value 1
Not implement the priority protocol.
Have only two defined states :
Taken
Not taken
Embedded system
21
dce
2010
Mutexs Semaphores
Same as Tkernel
Defined states :
Lock
Unlock
Embedded system
22
dce
2010
Events Flag
Each thread has a mask of pending
event flags inside
Operations :
Wait
Clear
Signal
Broadcast
Dispatch
Embedded system
23
dce
2010
Events Flag
void chEvtRegisterMask (EventSource *esp,
EventListener *elp, eventmask_t mask)
void chEvtUnregister (EventSource *esp,
EventListener *elp)
eventmask_t chEvtClearFlags (eventmask_t
mask)
void chEvtSignalFlags (Thread *tp,
eventmask_t mask)
void chEvtBroadcastFlags (EventSource *esp,
eventmask_t mask)
eventmask_t chEvtWaitOne (eventmask_t
mask)
Embedded system
24
dce
2010
Memory Management
Embedded system
25
dce
2010
Embedded system
26
dce
2010
Heap
malloc()
free()
Embedded system
27
dce
2010
Memory Pools
allocate/free fixed size objects in
constant time and reliably without
memory fragmentation problems
Embedded system
28
dce
2010
I/O Management
Abstract Sequential Streams
Can be used as base class for high level
object types such as files, sockets, serial
ports, pipes etc.
Embedded system
29
dce
2010
Registry
The Threads Registry is a double linked
list that holds all the active threads in
the system.
Thread * chRegFirstThread (void)
Thread * chRegNextThread (Thread * tp)
#define REG_REMOVE (tp)
#define REG_INSERT (tp)
Embedded system
30
dce
2010
Debug
Trace buffer.
Parameters check.
Kernel assertions.
Embedded system
31
dce
2010
Internals
Functions manage ThreadsQueue and
ThreadsList
Are not OS APIs
Should not be directly used in the user
applications code
Embedded system
32