Aulas‎ > ‎Sistemas Operacionais‎ > ‎

Sistemas Operacionais de Tempo Real em Microcontroladores

Prof. Filippo Valiante Filho - 2005.

Objetivo

O objetivo deste trabalho é apresentar os conceitos básicos de um Sistema Operacional de Tempo Real, conhecido pela sigla inglesa “RTOS”, de Real-Time Operating System. Um RTOS pode ser utilizado em sistemas computacionais de diversos tipos e portes. Neste trabalho será abordado especificamente o uso de RTOS em sistemas embarcados (embedded systems) baseados em microcontroladores.

Introdução

O conceito de tempo real em processamento de dados está relacionado a atender às necessidades e restrições de tempo impostas pelo processo controlado. Aplicando este conceito em sistemas operacionais, significa que em um RTOS é preciso haver um controle do tempo para que as restrições possam ser atendidas. Em outras palavras, é preciso haver um comportamento  determinístico, o que significa que cada serviço do sistema operacional tomará um tempo conhecido e esperado. Esse determinismo é a principal diferença de um RTOS em relação a um sistema operacional convencional.

Esse determinismo vem à tona em diversas partes do sistema operacional como o escalonamento de tarefas, alocação dinâmica de memória e troca de mensagens entre as tarefas. Sistemas operacionais comuns não possuem um comportamento de tempo determinístico nessas áreas e portanto não atendem ao critério de tempo real.

O principal componente de um sistema operacional é seu núcleo (kernel) que compõe uma camada intermediária entre o hardware e a aplicação (programa do usuário).

O principal serviço oferecido pelo núcleo do sistema operacional é o gerenciamento das tarefas (task management). Uma tarefa é uma seqüência de instruções, ou pedaço de programa, responsável por uma determinada ação; por exemplo, a leitura de um teclado ou sensor. Cada tarefa pode ter uma necessidade e restrição de tempo diferente, por isso a necessidade de um RTOS. Mas não apenas isto, uma tarefa pode ser mais importante, ou mais urgente, que outra. Ou seja, cada tarefa tem sua prioridade.

Um RTOS pode gerenciar a comutação entre as tarefas através de dois modos de escalonamento: preemptivo e cooperativo. No modo preemptivo uma tarefa pode ser interrompida pelo sistema operacional para que outra passe a ser executada. No modo cooperativo é o programador quem define em cada tarefa o momento em que ela vai abandonar o controle do processador liberando-o para a execução de uma outra tarefa.

O gerenciamento da comunicação entre tarefas, feito através de sinalizadores e de troca de mensagens é outro serviço oferecido pelo núcleo dos sistema operacional.

Para atender às restrições de tempo, um RTOS também oferece serviços de temporização, como o controle do “estouro de tempo”(time-out). A base de tempo estabelecida pelo sistema recebe o nome  de “tick rate”.

Outros serviços que podem estar presentes em alguns sistemas operacionais de tempo real são o supervisionamento de dispositivos de entradas e saídas; serviços de alocação dinâmica de memória que permitem às tarefas utilizar alguns pedaços da memória de dados para o programa e; serviços adicionais de alto-nível como gerenciamento de sistema de arquivos, banco de dados e interface gráfica de usuário.

Emprego de Sistemas Operacionais de Tempo Real em Sistemas Microcontrolados

Sistemas embarcados baseados em microcontroladores não costumam utilizar sistemas operacionais. O método de programação mais utilizado é conhecido como superloop e consiste em um único grande laço executado de maneira contínua e seqüencial. Eventos críticos são tratados através de interrupções. Deste modo, as interrupções são executadas em primeiro plano, pois são atendidas prontamente e o laço principal é executado em segundo plano, enquanto não houver nenhum evento que dispare uma interrupção. Por isto este método de programação também é conhecido como foreground / background.

É possível haver várias fontes de interrupção em uma mesma aplicação e ainda diferentes níveis de interrupção porém, conforme a aplicação cresce em complexidade e tamanho fica muito difícil gerenciar questões como interrupções disparadas quando tarefas estão sendo executadas, conflitos entre diversos níveis de interrupção, seqüência única de operações dentro do laço principal, interatividade entre o laço principal e as rotinas de interrupção e, principalmente, o atendimento à todas as restrições de tempo.

Desta forma, para as aplicações mais complexas e as de maior restritividade de tempo, são empregados sistemas operacionais de tempo real.

Um RTOS oferece uma plataforma adequada para a execução da aplicação ao transformar o conceito de um superloop em uma aplicação baseada em múltiplas tarefas adequadamente gerenciadas pelo núcleo do sistema.

Cada uma dessas tarefas têm seus requisitos de tempo e de prioridade individualmente ajustados. Assim, uma tarefa pode ter uma prioridade baixa, mas ser executada a intervalos de poucos milisegundos, enquanto outra tarefa pode ter a prioridade mais alta e ser executada apenas a cada segundo. O RTOS se encarrega de escalonar adequadamente cada tarefa.

Um resumo das diferenças nesta nova abordagem é que o código fonte da aplicação fica um pouco maior em virtude dos comandos relacionados ao sistema operacional, porém as prioridades de execução de cada tarefa são melhor definidas; cada tarefa tem sua estrutura simplificada e a interação com outras tarefas é feita através de sinalizadores e mensagens; o uso de variáveis globais é minimizado; não há a necessidade de laços de atraso; há uma modularidade da aplicação facilitando a inclusão, modificação ou exclusão de tarefas; a execução da aplicação depende das prioridades de cada tarefa e; a comutação e a troca de mensagens e sinalizações entre elas ficam a cargo do RTOS de modo transparente ao programador.

O termo RTOS-enabled application é utilizado para definir uma aplicação pronta utilizando um RTOS.

Descrição de RTOS: Salvo

O RTOS escolhido para ser descrito neste trabalho é o Salvo, da empresa americana Pumpkin, Inc. O Salvo é um sistema operacional de tempo real, multitarefa, baseado em prioridades e que utiliza eficientemente a memória. Projetado exclusivamente para sistemas embarcados de baixo custo, foi o primeiro a dedicar-se exclusivamente à este segmento que possui limitações de memórias RAM e ROM nos componentes utilizados. O Salvo é escrito em linguagem C e suporta  microcontroladores PIC, sendo indicado pela própria Microchip, ARClite, ARM ARM7TDMI, Atmel AVR e MegaAVR, Motorola M68HC11, Texas Instruments MSP430 e TMS320C2000 (DSPs),  além dos microcontroladores compatíveis com o 8051. Para sua utilização, além de instalar os arquivos apropriados em um PC, é necessário ter um compilador C para o microcontrolador escolhido.

O Salvo é compatível com as séries 12, 16, 17 e 18 dos microcontroladores PIC da Microchip. Também é compatível com os compiladores C da HI-TECH, IAR e Microchip. Os recursos oferecidos são: mais de 40 serviços de usuário na interface do programa de aplicação que podem ser ativados por comandos de chamada (calls); até 16 níveis de prioridade de tarefas; suporte a múltiplos tipos de evento; serviços baseados em temporizador; uso mínimo da pilha em chamadas e retornos; baixa latência de interrupção e  rápida mudança de contexto.

Há duas regras de ouro para as aplicações utilizando o Salvo que são: toda tarefa deve possuir uma mudança de contexto e estas só podem ocorrer nas tarefas. O Salvo gerencia automaticamente as atividades mais complexas como a comutação de tarefas (em modo cooperativo) e a comunicação entre elas; atrasos de tempo real; controle de interrupções e seleção de bancos de RAM do microcontrolador.

Conclusão

O uso de um RTOS em um sistema embarcado de pequeno porte, baseado em microcontrolador, permite a elaboração e a execução de aplicações maiores e mais complexas e, sobretudo, que atendam às restrições de tempo de execução impostas pelos processos em que vão atuar para que possam ser consideradas como de tempo real.

Bibliografia

  1. KALINSKY, D. Basic Concepts of Real-Time Operating Systems. Disponível em http://www.kalinskyassociates.com/Wpaper1.html.
  2. VALENTI, C. e KALMAN, A. E. Multi-Tasking on the PIC16F877 with the Salvo™ RTOS. Nota de aplicação AN777. Microchip Technology Inc. 2001.
  3. PUMPKIN, Inc. Salvo User Manual version 3.2.2. 2003. p.11-50.