Sunteți pe pagina 1din 5

ChibiOS/RT: Um sistema operacional RTOS para sistemas profundamente

embarcados
Hugo Marcondes
Instituto Federal de Santa Catarina
Departamento Acadmico de Eletrnica
{hugo.marcondes}@ifsc.edu.br
Abstract
Este artigo apresenta o sistema operacional de tempo
real chamado ChibiOS/RT. O ChibiOS/RT um sistema operacional de tempo real rpido e compacto
projetado para aplicaes embarcadas. Ele oferece componentes como threads, mutexes, semforos, eventos, temporizadores, alm de dispositivos de E/S flexveis e com
suporte a chamadas temporizadas com timeout. Atualmente o ChibiOS/RT suporta uma vasta gama de plataformas baseadas nas arquiteturas ARM7, Cortex-M3, AVR,
MSP430 e x86.

uma chamada de sistema no ir falhar, a mesmo que se esteja passando parmetros incorretos.
Outro aspecto importante do ChibiOS/RT a variada
gama de arquiteturas que o mesmo suporta, permitindo o
seu uso prtico em uma srie de microprocessadores utilizados atualmente pela indstria. As arquiteturas suportadas
so ARM7, Cortex-M3, AVR, MSP430 e x86.

2. ChibiOS/RT

Keywords: Sistemas Operacionais, Sistemas de Tempo


Real, Sistemas Embarcados

O ChibiOS/RT possui um projeto bastante modular, e


dividio internamente em diversos mdulos que podem ser
visualizados na figura 1. Tais mdulos so ento divididos
em mltiplos componentes que sero detalhados mais a diante.
Os mdulos presentes na figura 1 so descritos nas
sees que se seguem.

1. Introduo

2.1. Kernel

O ChibiOS/RT um sistema operacional de tempo real


rpido e compacto projetado para aplicaes embarcadas.
Sua principal caracterstica oferecer um conjunto de componentes que podem ser utilizados, no se limitando a apenas um escalonador de tarefas tempo real, como muitas
outras opes disponveis no contexto de software aberto,
oferecendo desta forma suporte para a inicializao das
plataformas computacionais que suporte, alm de um camada para a abstrao do hardware para os dispositivos
mais comuns encontrados em sistemas embarcados.
O ChibiOS/RT tambm apresenta um ncleo totalmente
esttico do ponto de vista de memria, apesar de suportar
sistemas para alocao dos dados de forma dinmica. Contudo toda a parte dinmica do sistema desenvolvida sobre
o ncleo esttico, que desta forma, favorece a construo de
um sistema mais robusto.
Outra caracterstica do ChibiOS/RT que a sua API foi
desenvolvida de forma a evitar possveis condies de erros, desta forma, todo o kernel foi projetado de forma que

O mdulo Kernel possui todos os componentes que so


independentes da plataforma de execuo do ncleo do OS.
importante salientar que o mdulo do kernel, juntamente
com a camada de portabilidade so totalmente independentes e podem ser utilizados com um sistema nico, sem
a necessidade de agregar componentes dos demais mdulos (ex. HAL).

2.2. Port Layer


Esta parte responsvel por implementar os componentes do ncleo do SO que so dependentes da arquitetura/compilador utilizado. Os componentes presentes neste
mdulo so responsveis pela inicializao do sistema, abstrao do tratamento de interrupes, implementao de
primitivas para a implementao de travas, assim como o
cdigo para o chaveamento de contexto de diferentes tarefas. Os componentes contidos neste mdulo geralmente
apresentam pouco cdigo, pois o ChibiOS foi projetado

de E/S mais complexos com um sistema de arquivos ou uma pilha de comunicao em rede.
Drivers de Plataforma: Esta classe de drivers so especficos de uma plataforma e no so construdos para serem portados. Geralmente representam cdigo que so compartilhados entre diversos
drivers de uma mesma plataforma.

2.4. Platform Layer


A camada da plataforma contm um conjunto de implementaes de drivers de dispositivos. Os drivers presentes
nesta camada so geralmente genricos a ponto de atender
a toda uma famlia de microcontroladores e no apenas a
um dispositivo em especfico.

2.5. Board Layer


A camada da placa contm a implementao da inicializao do sistema para uma placa em especfico alm de
realizar a inicializao dos componentes da HAL e do ncleo do sistema.

2.6. Escalonamento de tarefas


Figure 1. Viso geral dos mdulos do
ChibiOS/RT

visando ser extremamente portvel, e desta forma, apenas


os recursos que so essencialmente dependentes de plataformas esto implementados aqui.

2.3. HAL - Hardware Abstraction Layer


Este mdulo contm uma srie de drives de dispositivos
abstratos de forma a oferecer uma API comum de E/S em
todas as plataformas suportadas pelo ChibiOS/RT. O cdigo
presente neste mdulo totalmente portvel para outras arquiteturas e classificado em duas classes de componentes:
Drivers Normais: Esta classe de drivers composta por
drivers de alto nvel de abstrao (HLD) e drivers de
baixo nvel (LLD). Drivers normais so genricos o
bastante para serem portados para diversas platformas
atravs da implementao de um driver de baixo nvel
especfico (LLD).
Drivers Complexos: Drivers complexos so totalmente portveis para outras plataformas uma vez
que no possuem qualquer dependencia com o hardware. Drivers complexos, na realidade so suportados por drivers normais e implementam componentes

O escalonamento de tarefas o principal componente


presente no ncleo do ChibiOS/RT. A figura 2 apresenta os
principais compoenentes envolvidos no escalonamento de
tarefas e descritos abaixo:
System: Inicializao e travas de baixo nvel.
Timers: API para o gerenciamento de temporizadores
Scheduler: API para o escalonamento de tarefas. No
deve ser utilizado diretamente pela aplicao.
Threads: API para a criao de tarefas. A aplicao deve
utilizar esta API para a programao do sistema.

Figure 2. Componentes de escalonamento de


tarefas

O ChibiOS/RT, assim como muitos RTOS, implementa


uma poltica de escalonamento com prioridade fixa com
preempo. Esta estratgia bem simples e melhor detalhada em seguida.
Cara tarefa (thread) possui o seu prprio nvel de prioridade. As prioridades so fixas e no se modificam a no

ser que o sistema tenha sido projetado para tal. Cada tarefa
pode estar em trs estado distintos:
Running: A tarefa est atualmente em execuo.
Ready: A tarefa est apta a ser executada (aguardando ser
escalonada).
Waiting: A tarefa est aguardando a execuo de algum
evento.
Cada ncleo de processamento existente no sistema sempre executa a tarefa de maior prioridade que est apta a execuo. Quando uma tarefa de maior prioridade se torna apta
(Ready) para execuo, e outra de menor est executando,
a mesma preemptada para que a tarefa de mairo prioridade execute. Desta forma, se o sistema possui N ncleos
de processamento, o escalonador garante que as N tarefas
de maior prioridade estaro em execuo no sistema.
Sistemas profundamente embarcados geralmente possuem apenas um ncleo de processamento, de forma que
nestes casos, haver apenas uma tarefa em execuo em um
dado momento.
As prioridade no ChibiOS/RT so definidas atravs de
um conjunto de inteiros contnuos, que comeam a partir da
constante LOWPRIO at a HIGHPRIO. A funo main() de
um programa executa com a prioridade padro NORMALPRIO, que esta no meio do alcance de prioridades definidas
entre LOWPRIO e HIGHPRIO.
Durante o desenvolvimento de uma aplicao interessante sempre utilizar prioridades relativas as constantes
HIGHPRIO, LOWPRIO e NORMALPRIO, de forma a permitir que o cdigo se portavel mais facilmente para futuras
verses do SO. A seguir apresentada todos os nveis de
prioridade atualmente existentes no ChibiOS/RT.
zero: Prioridade reservado. Todas as prioridades possveis
do sistemas so maiores do que zero.
IDLEPRIO: Prioridade especial reservada para a tarefa
IDLE.
LOWPRIO: Menor prioridade possvel que pode ser utilizada pelas tarefas do usurio.
NORMALPRIO: Prioridade central dentro da faixa de
prioridades que so reservadas para o usurio.
HIGHPRIO: Maior prioridade possvel para uso de tarefas do usurio.
ABSPRIO: Maior prioridade possvel do sistema. As nicas tarefas que esto acima desta prioridade so o
tratamento das interrupes geradas pelo hardware.

2.7. Sincronizao de tarefas


A sincronizao de tarefas do ChibiOS/RT realizada
atravs dos componentes apresentados na figura 3 e descritos a seguir.

Figure 3. Componentes de sincronizao de


tarefas

Semaphores: implementao de semforos que podem ser


binrios ou contadores.
Mutexes: implementao de travas para excluso mtua,
com suporte ao algortimo de herana de prioridade.
Condvars: variveis de condies. Podem ser utilizadas
junto com mutexes para a construo de monitores.
Events: componentes para a implementao de fontes de
eventos e sinalizao de eventos.
Messages: transmisso de mensagens sncronas (entre tarefas).
Mailboxes: fila de mensagens assncronas.
2.7.1. Semforos Binrios Um semforo binrio um objeto para a sincronizao
de tarefas que pode ter dois estados possveis, adquirido
e no adquirido (fig. 4). As duas operaes possveis de
ocorrer em um semforo binrio so:
Adquirir (chBSemWait() no ChibiOS/RT): Adquirir
um semforo binrio altera o seu estado para o estado
adquirido, ao tentar adquirir um semforo binrio
que j est adquirido ir ocasionar em inserir a
tarefa atual (que solicitou o semforo) em uma fila de
espera.
Liberar (chBSemSignal() no ChibiOS/RT): Liberar
um semforo binrioaltera o seu estado para o estado no adquirido caso no haja tarefas aguardando
em sua fila de espera. Caso haja tarefas na fila do
semforo, a mesma removida da fila e esta passa a
adquirir o semforo, ocosio pela qual o semforo
mantem o seu estado. Liberar um semforo que j est
no estado no adquirido no tem efeito algum.
Semforos binrios no possuem um atributo de proprietrio e podem ser liberados por qualquer tarefa ou tratador
de interrupo do sistema, independente de quem realizou a
ltima operao. Desta forma, semforos binrios so geralmente utilizados para sincronizar tarefas com eventos externos implementados como tratadores de interrupes (ex.

aguardar a chegada de um pacote de rede ou aguardar um


boto ser pressionado).
Como semforos no possuem um proprietrio, os mesmos pode sem instanciados em qualquer um dos seus estados vlidos (adquirido ou no adquirido).

Figure 4. Estados de um semforo binrio

Figure 5. Estados de um semforo contador

Como no h proprietrio do semforo, um semforo


contador pode ser inicializado com qualquer valor no negativo.
Semforos contadores so geralmente utilizados como
guardadores de recursos disponveis em uma quantidade discreta. Como exemplo, um semforo contador pode
representar o nmero de espaos em um buffer circular. Uma tarefa produtora pode invocar a operao signal em um semforo quando insere um item no buffer
circular. As tarefas consumidoras iro executar a operao wait para aguardar que um item esteja presente
no buffer, garantindo assim que esta tarefa ir acessar o buffer apenas quando houver recursos para serem
consumidos. De fato, o ChibiOS/RT utiliza semforos contadores na implementao das filas de E/S de seus dispositivos.

2.7.2. Semforo Contador 2.7.3. Mutexes Um semforo contador um objeto para sincronizao
de tarefas que pode contuer um nmero arbitrrio de estados (fig. 5).. O estado interno que um semforo contador
definido por uma varivel inteira sinalizada, o contador.
A semntica do contador do semforo definada como se
segue:
Negativo: Existem -N tarefas na fila aguardando o
semforo.
Zero: No h tarefas na fila, uma operao de wait
deve colocar na fila a tarefa que a executar.
Positivo: no h tarefas aguardando na fila, uma operao de wait no ir colocar uma tarefa na fila.
A duas operaes definidas por um semforo contador
so:
Wait (chSemWait() no ChibiOS/RT). Esta operao
decrementa o contador do semforo, se o resultado for
negativo, a tarefa que chamou a operao bloqueada
no semforo.
Signal (chSemSignal() no ChibiOS/RT). Esta operao incrementa o contador do semforo. Se o valor
do semforo for negativo antes do incremento, uma
tarefa que esta aguardando retirada da fila e retorna
ao estado de APTA.
Assim como semforos binrios, semforos contadores
no possuem um atributo de proprietrio e podem ser liberados por qualquer tarefa ou tratador de interrupo do sistema, independente de quem realizou a ltima operao.

Um mutex um objeto para a sincronizao de tarefas que pode ter dois estados possveis, adquirido e no
adquirido (fig. 4). As duas operaes possveis de ocorrer
em um mutex:
Lock (chMtxLock() no ChibiOS/RT). Esta operao
tenta adquirir a propriedade do mutex, se o mutex j
tiver um proprietrio, a tarefa que invocou a operao
Lock suspensa e inserida em uma fila de espera.
Unlock (chMtxUnlock() no ChibiOS/RT). Esta operao libera a propriedade de um mutex. Se existir tarefas na fila do mutex, esta retirada da fila e se torna a
nova proprietria do mutex, alm de ser resumida.
Note que, diferentemente dos semforos, mutexes possuem donos. Um mutex s poder ser destravado pela tarefa
que o possui. Esta caracteristca impossibilita o uso de mutexes em tratadores de interrupes, mas viabiliza a implementao do protocolo de herana de prioridade, de forma
a contornar os problemas gerados pela inverso de prioridade. Mutexes so otimizados para a implementao de excluso mtua entre tarefas.
ChibiOS/RT extende os conceitos bsicos em relao a
essas primitivas de sincronizao de diversas forma, em especial, os semforos podem ser temporizados, delimitandose assim o tempo mximo de espera de uma tarefa por um
recurso, algo extremamente til quando utilizados na sincronizao de primitivas de E/S.

Figure 6. Estados de um mutex

3. Concluses
Este artigo apresentou uma viso geral do sistema operacional de tempo real ChibiOS/RT, um sistema de cdigo
fonte aberto focado no uso em sistemas profundamente embarcados. Em especial, este artigo focou na descrio dos
principais componentes relacionados a sistemas de tempo
real; escalonadores de tarefas e sincronizadores. Nota-se
como boa parte dos sistemas operacionais de tempo real existente, o ChibiOS/RT apresenta um algoritmo de escalonamento baseado em prioridades, permitindo a existencia de
tarefas com mesma prioridade, onde neste caso, o escalonamento passa a trabalhar com um algoritmo Round-Robin.
Do ponto de vista de sincronizadores, o ChibiOS/RT apresenta a implementao de mutex com o protocolo de herana de prioridde de forma a contornar os problemas relacionados com a inverso de prioridade.
O ChibiOS/RT apresenta porte do sistema para uma srie
de arquiteturas, que aliado com os componentes existentes
neste sistema o torna um forte condidado para o uso como
um RTOS.

References
[Sir] Giovanni Di Sirio. Chibios/rt. http://www.chibios.
org/. Accessed October 1, 2014.