Main
Main
Main
Campinas
2016
Campinas
2016
Agradecimentos
Reconheo que, sem a ajuda de diversas pessoas, este trabalho e a concluso deste
curso no seriam possveis. Portanto, gostaria de expressar meus mais ternos agradecimentos:
Primeiramente a Deus e a Jesus Cristo, por terem sempre me ajudado, concedendo
a mim graa, fora e sabedoria ao longo de minha vida.
Ao Prof. Dr. Denis Loubach, pelas notveis contribuies durante minha vida
acadmica e, em especial, para a realizao deste trabalho.
Aos meus queridos pais, que nunca mediram esforos para me ajudar durante toda
a minha vida, dando-me sempre do melhor e fornecendo-me um grande suporte por todos
esses anos de faculdade.
minha valiosa esposa, por tudo o que tem feito por mim e por ser minha fiel
companheira, demonstrando amor, carinho e dedicao em todos os momentos.
minha querida irm, por estar sempre presente em minha vida e por todo carinho
expressado.
toda minha famlia, pelo suporte que tenho recebido, pelo amor sempre demonstrado a mim e pela compreenso durante essa etapa da minha vida.
minha amiga Rita, sempre pronta para me ajudar e pela valiosa reviso deste
trabalho.
Ao meu amigo Lucas, por me auxiliar em diversos projetos durante a graduao.
Aos meus pastores, ministros e amigos do Ministrio Evanglico Comunidade Rhema
e do Word of Faith Fellowship, por todo ensinamento que recebi, pelo amor e carinho
demonstrado, por estarem sempre disponveis para me ajudar e por, de uma forma ou de
outra, terem participado de minha trajetria na faculdade.
Aos meus colegas de turma, pelo companheirismo, pela amizade e pelas grandes
contribuies durante os anos da graduao.
A todos os professores da Unicamp, em especial os da FEM, pela pacincia e por
todo ensinamento, sem o qual no poderia concluir este curso.
Aos supervisores da Sulzer, Srgio e Edson, pela compreenso e pelo suporte
prestado durante o estgio.
E a todos que, de alguma forma, contriburam para que a concluso deste curso
fosse possvel.
Resumo
Sistemas embarcados de tempo real tm fundamental importncia em diversas aplicaes
nos dias de hoje, tais como na indstria, em automveis, aeronaves, celulares, eletrodomsticos, automao predial e centros de pesquisa avanada. Ao se tornarem cada vez mais
complexas, essas aplicaes passam a exigir o desenvolvimento de cdigos mais confiveis
e eficientes. Embora a fase de testes desses sistemas venha sendo aprimorada nos ltimos
anos, ela no capaz de reproduzir exaustivamente todas as condies a que o sistema
estar exposto durante seu funcionamento, tornando-se necessrio o desenvolvimento
de tcnicas e metodologias para aumentar a qualidade e confiabilidade de tais sistemas.
Apesar do grande nmero de pesquisas nessa rea, ainda no se encontra na literatura um
mtodo nico e sistemtico para realizar o porte de um sistema operacional de tempo real
para uma determinada plataforma de hardware. Neste contexto, este trabalho de pesquisa
visa apresentar uma metodologia contendo uma sequncia bem definida das atividades a
serem executadas para que um processo de porte seja realizado com sucesso. Para alcanar
esse objetivo, foram analisados, por meio de reviso da literatura, os principais mtodos
utilizados por diferentes autores em portes especficos e foi realizado um estudo de um
Board Support Package existente e funcional, que serviu de base para o desenvolvimento
deste trabalho. A metodologia proposta foi ento testada e validada ao se realizar um
porte do FreeRTOS em uma plataforma ARM, mostrando-se adequada para aplicao em
sistemas hard real-time.
Palavras-chave: sistemas embarcados de tempo real, porte, metodologia, RTOS.
Abstract
Nowadays, real-time embedded systems play a fundamental role in different application
domains, such as in the industry segment, in automobiles, aircrafts, cell phones, home
appliances, building automation and advanced research centers. As they become increasingly
complex, these applications require the development of more reliable and efficient codes.
Although the testing stage of these systems has been enhanced in the past few years, it
is not able to simulate all the possible conditions on which the system will be exposed
during its lifecycle, making it necessary to develop techniques and methodologies in order
to improve quality and reliability of such systems. Despite the research performed on
this subject, a unified and systematic method for porting a real-time operating system
on a hardware platform is hardly found in the literature. Considering this scenario, this
research work aims to introduce a methodology with a well-defined sequence of activities
required for a successful porting process. In order to achieve this goal, we analyzed, through
literature review, the main methods used by different authors in specific ports, and we also
performed a study of an existing and functional board support package, which comprised
the basis for the development of this work. The methodology proposed here was tested
and validated through porting FreeRTOS to an ARM-based hardware platform, being
suitable for hard real-time applications.
Keywords: real-time embedded systems, porting, methodology, RTOS.
Lista de ilustraes
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
18
24
24
25
31
31
33
34
35
36
37
37
38
39
40
41
41
42
42
44
50
52
54
57
64
65
66
68
70
74
75
76
77
81
81
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
36
37
38
39
40
41
42
43
44
45
46
47
. . . . .
. . . . .
. . . . .
segundos
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
82
82
84
85
86
86
93
95
96
96
97
97
Lista de tabelas
Tabela 1 Valores das principais constates definidas em FreeRTOSConfig.h . . 60
Tabela 2 Funes que compem a OSA . . . . . . . . . . . . . . . . . . . . . . . 62
Tabela 3 Matriz de rastreabilidade das etapas versus implementaes . . . . . . 83
Lista de quadros
Quadro 1 Constantes definidas no arquivo system_MKL25Z4.h . . . . . . . . 78
Quadro 2 Constantes definidas no arquivo portmacro.h . . . . . . . . . . . . 78
Quadro 3 Constantes definidas no arquivo FreeRTOSConfig.h . . . . . . . . 79
Siglas
A/D analgico-digital
ABS Anti-lock Braking System
ADC Analog-to-Digital Converter
API Application Programming Interface
ARM Advanced RISC Machine
BSP Board Support Package
CLP Controlador Lgico Programvel
CMP comparador de alta velocidade
CMSIS Cortex Microcontroller Software Interface Standard
COP Computer Operating Properly
CPU Central Processing Unit
D/A digital-analgico
DAC Digital-to-Analog Converter
DMA Direct Memory Access
DSP Digital Signal Processor
EABI Embedded-Application Binary Interface
EDF Earliest-Deadline-First
EEPROM Electrically-Erasable Programmable Read-Only Memory
FIFO first-in/first-out
FLL Frequency-Locked Loop
FPGA Field-Programmable Gate Array
GCC GNU Compiler Collection
GPIO General-Purpose Input/Output
PC Program Counter
PCS Procedure Call Standard
PEE PLL Engaged External
PEx Processor Expert
PIT Periodic Interrupt Timer
PLL Phase-Locked Loop
PSR Program Status Register
QCB Queue Control Block
RAM Random Access Memory
RGB Red-Green-Blue
RISC Reduced Instruction Set Computer
RMS Rate-Monotonic Scheduling
ROM Read Only Memory
RTC Real-Time Clock
RTOS Real-Time Operating System
SBA Sociedade Brasileira de Automtica
SCB Semaphore Control Block
SDRAM Synchronous Dynamic Random Access Memory
SoC System-on-Chip
SPI Serial Peripheral Interface
SRAM Static Random Access Memory
SVC Supervisor Call
SWD Serial-Wire Debug
TCB Task Control Block
TCP/IP Transmission Control Protocol / Internet Protocol
TPM Timer/PWM Module
Sumrio
1
1.1
1.2
1.3
INTRODUO . . . . .
Motivao . . . . . . . . .
Objetivos . . . . . . . . .
Estrutura do documento .
. . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
18
18
20
20
2
2.1
2.1.1
2.1.2
2.1.3
2.1.4
REVISO DA LITERATURA . . . . . . . . . . . . . . . . . .
Sistemas embarcados de tempo real . . . . . . . . . . . . . . .
Conceitos e Definies . . . . . . . . . . . . . . . . . . . . . . . .
Classificao dos sistemas de tempo real . . . . . . . . . . . . . . .
Propriedades fundamentais dos sistemas de tempo real . . . . . . .
Fatores que influenciam a previsibilidade . . . . . . . . . . . . . . .
DMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Interrupes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Chamadas de sistema (system calls) . . . . . . . . . . . . . . . . . . . .
Semforos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gerenciamento de memria . . . . . . . . . . . . . . . . . . . . . . . .
Linguagem de programao . . . . . . . . . . . . . . . . . . . . . . . .
Sistemas operacionais de tempo real . . . . . . . . . . . . . .
Principais caractersticas de um RTOS . . . . . . . . . . . . . . . .
Kernel: o ncleo de um RTOS . . . . . . . . . . . . . . . . . . . .
Escalonador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Definies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Algoritmos de escalonamento . . . . . . . . . . . . . . . . . . . . . . . . .
Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tarefas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Semforos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Filas de mensagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Servios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tool-chain e gerao da imagem executvel . . . . . . . . . .
BSP e drivers de dispositivos . . . . . . . . . . . . . . . . . . .
Sequncia de inicializao do target . . . . . . . . . . . . . . .
Inicializao do hardware . . . . . . . . . . . . . . . . . . . . . . .
Inicializao do RTOS . . . . . . . . . . . . . . . . . . . . . . . .
Inicializao da aplicao . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
22
22
22
25
25
26
2.1.4.1
2.1.4.2
2.1.4.3
2.1.4.4
2.1.4.5
2.1.4.6
2.1.4.7
2.2
2.2.1
2.2.2
2.2.2.1
2.2.2.1.1
2.2.2.1.2
2.2.2.2
2.2.2.2.1
2.2.2.2.2
2.2.2.2.3
2.2.2.3
2.3
2.4
2.5
2.5.1
2.5.2
2.5.3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
26
27
27
28
28
28
28
29
30
30
32
32
33
35
35
37
38
38
39
41
43
43
45
45
2.6
2.6.1
2.6.2
Trabalhos relacionados . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
BSP e porte do sistema operacional . . . . . . . . . . . . . . . . . . . . . 46
Algoritmos de escalonamento e RTOS . . . . . . . . . . . . . . . . . . . . 51
3
3.1
3.1.1
3.1.2
DESENVOLVIMENTO . . . . . . . . . . . . . . . . . . . . . . . . .
Estudo do BSP para porte do FreeRTOS em uma plataforma ARM
Estrutura de um projeto FreeRTOS bsico . . . . . . . . . . . . . . . . . .
Anlise dos arquivos responsveis pelo porte . . . . . . . . . . . . . . . . .
port.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
portmacro.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FreeRTOSConfig.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Vetor de interrupo: startup_MKL25Z4.S . . . . . . . . . . . . . . . . . . .
system_MKL25Z4.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MKL25Z4.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
OSA: fsl_os_abstraction_free_rtos.c . . . . . . . . . . . . . . . . . .
Outros arquivos fonte comuns . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sequncia de inicializao do FreeRTOS . . . . . . . . . . . . . . . . . . .
Drivers de dispositivos . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Metodologia para porte de um RTOS em uma plataforma de hardware
3.1.2.1
3.1.2.2
3.1.2.3
3.1.2.4
3.1.2.5
3.1.2.6
3.1.2.7
3.1.2.8
3.1.3
3.1.4
3.2
4
4.1
4.2
4.3
EXPERIMENTOS . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Critrios para a definio do RTOS utilizado . . . . . . . . . . . . . .
Critrios para a definio da plataforma de hardware utilizada . . .
Aplicao da metodologia desenvolvida na plataforma de hardware
escolhida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
54
55
56
56
59
59
60
61
61
61
61
63
64
65
71
71
72
74
RESULTADOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6
6.1
6.2
CONCLUSO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Trabalhos futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Submisso de artigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
REFERNCIAS
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
APNDICES
92
B.1
B.2
B.3
port.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
led_driver.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
led_driver.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
C.1
18
1 Introduo
Este captulo apresenta a motivao, os objetivos e a estrutura deste trabalho de
pesquisa.
1.1 Motivao
Dispositivos que utilizam sistemas embarcados esto presentes em praticamente
todos os lugares: automveis, aeronaves, maquinrio agrcola, eletrodomsticos, televises,
celulares, MP3, porteiros eletrnicos, roteadores e dispositivos de rede, entre muitos outros
(Figura 1). A tendncia para os prximos anos, com a evoluo do conceito de IoT (Internet
of Things), ou Internet das Coisas, que todas as coisas sejam interconectadas, graas
ao desenvolvimento na rea de sistemas embarcados.
Captulo 1. Introduo
19
Captulo 1. Introduo
20
Para que um sistema satisfaa tais restries, o software precisa estar adequadamente acoplado ao hardware, sendo necessrio um conjunto de macros e funes que
forneam um suporte mnimo, de forma que o sistema se conforme plataforma especfica
em que ser portado. Em outras palavras, realizar o porte de um sistema operacional
consiste em inicializar adequadamente os componentes bsicos do hardware para sua
correta utilizao.
Apesar do grande nmero de pesquisas e estudos relacionados aos sistemas computacionais de tempo real na atualidade, no se encontra na literatura um mtodo sistemtico
e nico, que possa ser aplicado para realizar o porte de qualquer sistema operacional de
tempo real - RTOS (Real-Time Operating System) - em uma nova plataforma de hardware.
Devido complexidade envolvida nesse processo, importante que haja uma sequncia
bem definida das atividades necessrias para que o porte do sistema seja efetuado com
xito. Tal necessidade explica o motivo da escolha deste tema para o trabalho de graduao,
dada a importncia e a aplicabilidade desses sistemas no mundo atual.
1.2 Objetivos
O objetivo da presente pesquisa apresentar uma metodologia de porte de um
RTOS em uma plataforma de hardware.
O trabalho de pesquisa tambm visa validar a metodologia apresentada por meio
da implementao de um porte especfico.
Pretende-se ainda fornecer a fundamentao terica para uma futura dissertao de
mestrado, cujo objetivo ser apresentar uma metodologia para a adaptao de um sistema
operacional para sistema operacional de tempo real, visando modificar seu escalonador
para atender s restries das tarefas de tempo real.
Captulo 1. Introduo
21
Software Development Kit) para o porte do FreeRTOS em uma plataforma de desenvolvimento FRDM-KL25Z, a qual utiliza um processador ARM1 Cortex M0+. Com base
nesse estudo, desenvolvida uma metodologia geral para realizar o porte de um sistema
operacional de tempo real em uma plataforma de hardware.
No Captulo 4 apresentado o porte do FreeRTOS em uma plataforma FRDMKL25Z para teste e validao da metodologia desenvolvida. Os detalhes de implementao
do porte so apresentados nesse captulo, bem como os critrios de seleo do RTOS e da
plataforma utilizados.
No Captulo 5 so apresentados os resultados obtidos.
Por fim, no Captulo 6, so discutidos os resultados e so apresentadas as concluses
e propostas para os trabalhos futuros.
ARM (Advanced RISC Machine) uma arquitetura de processador RISC (Reduced Instruction Set
Computer) muito utilizada em sistemas embarcados.
22
2 Reviso da literatura
Neste captulo so apresentados os principais conceitos que embasaram esta pesquisa,
bem como o trabalho de outros autores que descrevem os passos seguidos para a realizao
de portes especficos.
A unidade de processamento o crebro do sistema computacional, pois responsvel por executar as instrues do programa, incluindo a manipulao de dados e o clculo
lgico e aritmtico. H diversas unidades de processamento que podem ser utilizadas
na construo de um sistema embarcado, tais como o microprocessador, microcontrolador, DSP (Digital Signal Processor), FPGA (Field-Programmable Gate Array), SoC
(System-on-Chip), entre outros.
Valvano (2007) cita quatro caractersticas essenciais dos sistemas embarcados, que
os diferem dos computadores de uso geral:
a) Sistemas embarcados tipicamente realizam uma funo especfica, sendo projetados para resolverem um nmero limitado de problemas e, consequentemente,
possuem poucos recursos;
23
b) Apresentam fortes restries de projeto, tais como custo reduzido, baixo consumo
de energia, limitao de tamanho, e muitas vezes, operao em ambientes
agressivos;
c) Em muitas aplicaes, devem operar dentro de restries de tempo real; e
d) A maioria dos sistemas embarcados requer unidades de memria reduzidas.
Do ponto de vista de programao, os sistemas embarcados diferem dos PCs
(Personal Computers) no sentido em que estes lidam com um conjunto bastante previsvel de
dispositivos de entrada/sada, como unidade de disco, vdeo, teclado, mouse, som e interface
de rede, e existe um bom suporte do sistema operacional para esses dispositivos. Por outro
lado, os sistemas embarcados incorporam uma enorme variedade de perifricos, incluindo
botes, switches, sensores, atuadores, portas seriais assncronas e de rede, conversores
A/D (analgico-digital) e D/A (digital-analgico), etc, os quais raramente possuem algum
suporte do sistema operacional - OS (Operating System), fazendo com que o programador
tenha que lidar diretamente com o hardware (ABBOTT, 2006).
Sistemas de tempo real podem ser definidos como sistemas que respondem a
eventos externos e assncronos dentro de restries de tempo bem definidas (FURHT et al.,
1991). Duas caractersticas intrnsecas aos sistemas de tempo real so que esses sistemas
devem produzir resultados computacionalmente corretos e esses resultados devem ser concludos dentro de um perodo de tempo predefinido. Em outras palavras, o comportamento
de tais sistemas depende igualmente da corretude de sua lgica de computao e do tempo
em que o resultado produzido (LI; YAO, 2003). Por exemplo, quando um motorista
aciona o pedal do freio, o controlador do sistema ABS (Anti-lock Braking System) analisa
o ambiente (velocidade do carro, aderncia ao solo, direo do veculo) e aciona o freio na
frequncia adequada em fraes de segundo. Tanto o resultado produzido, quanto o tempo
em que o freio acionado, so igualmente importantes para a segurana dos ocupantes do
veculo (CHENG, 2002).
Alguns outros exemplos de sistemas de tempo real so (BUTTAZZO, 2011):
controle de plantas qumicas e nucleares;
diversos dispositivos de controle em automveis;
controladores de voo;
monitoramento ambiental;
sistemas de telecomunicao;
sistemas de monitoramento de sinais vitais;
automao industrial;
24
robtica.
Sistema
de
controle
Atuadores
Sensores
AMBIENTE
Figura 2 Diagrama de blocos de um sistema de controle genrico. Fonte: Buttazzo (2011, p. 8).
Sistemas
embarcados
Sistemas
embarcados
de tempo real
Sistemas de
tempo real
25
Simulao
Inferface com
computacional
usurio
Sistemas no-crticos
de tempo real
Video da
internet
Cruise
control
Telecomunicao
Sistemas crticos
de tempo real
Motor
eletrnico
Controlador
de voo
Figura 4 Classificao dos sistemas de tempo real. Fonte: Adaptado de Barr e Massa (2006).
26
27
2.1.4.2 Cache
Cache uma memria de rpido acesso que funciona como um buffer entre a
CPU e a memria RAM. Quando o programa requer um dado da memria, o hardware
verifica se a informao solicitada encontra-se na cache. Caso no esteja (cache miss), o
dado, bem como o contedo adjacente, copiado da RAM para a cache. Foi observado
estatisticamente que, para uma memria de 1 MB e uma cache de 8 kB, a taxa de acerto
(cache hit) de 80%, de forma que a utilizao da cache, em geral, diminui o tempo mdio
de execuo do programa (BUTTAZZO, 2011).
Nos sistemas de tempo real, no entanto, a utilizao da cache pode prejudicar
o determinismo do sistema, uma vez que, nos casos em que ocorre cache miss, h uma
degradao do desempenho, devido transferncia adicional de dados da RAM para a
cache. Ademais, durante operaes de escrita, o uso da cache aumenta o custo operacional,
visto que a escrita na cache deve ser propagada para todos os nveis at a memria, a fim de
evitar inconsistncia dos dados. Embora observaes estatsticas mostrem que apenas 10%
dos acessos memria so para operaes de escrita, essas observaes somente trazem
uma estimativa do comportamento mdio de um aplicativo e no podem determinar os
limites do pior caso (BUTTAZZO, 2011).
Em sistemas preemptivos, o efeito da utilizao de cache sobre a previsibilidade do
sistema ainda maior, porque depende do nmero de preempes e do ponto especfico
onde elas ocorrem, posto que a preempo destri o conceito de localidade de programa e
aumenta o nmero de cache misses (BUTTAZZO, 2011).
2.1.4.3 Interrupes
Um dos maiores problemas para a previsibilidade de um sistema de tempo real so
as interrupes geradas por dispositivos de I/O, pois podem introduzir atrasos significativos
durante a execuo da tarefa. Na maioria dos sistemas operacionais h rotinas especficas
para o tratamento dessas interrupes (drivers) que gerenciam os dispositivos a elas
relacionados e encapsulam dentro delas todo o detalhe de hardware dos perifricos. Os
servios de interrupo obedecem a um esquema de prioridades, as quais so, geralmente,
mais altas para os drivers que para as tarefas.
Entretanto, tratando-se de sistemas de tempo real, essa concepo no vlida,
visto que as tarefas de controle podem ser muito mais crticos que as interrupes de
perifricos. Como, em geral, muito difcil limitar a priori o nmero de interrupes que
uma tarefa poder experimentar, o atraso introduzido pelo mecanismo de interrupo na
execuo das tarefas se torna imprevisvel (BUTTAZZO, 2011, p. 16).
Trs abordagens que podem ser usadas para reduzir a interferncia dos drivers nas
tarefas do programa e ainda realizar operaes de entrada/sada so apresentadas a seguir
28
(BUTTAZZO, 2011):
a) Desabilitar todas as interrupes externas, exceto a do timer, e gerenciar os
perifricos dentro das tarefas do programa, por meio de polling;
b) Desabilitar todas as interrupes externas, exceto a do timer, e gerenciar os
dispositivos em rotinas dedicadas do kernel, ativadas periodicamente pelo timer;
c) Manter as interrupes habilitadas, porm reduzir os drivers para executarem
o mnimo de tarefas possvel, apenas ativando a tarefa apropriada para tratar o
evento disparado pelo dispositivo.
2.1.4.4 Chamadas de sistema (system calls)
Para que haja previsibilidade do sistema, todas as chamadas de kernel devem ser
caracterizadas por um tempo de execuo limitado e desejvel que sejam preemptivas. De
fato, qualquer seo no-preemptiva pode atrasar a ativao ou a execuo de atividades
crticas, causando uma falha temporal a deadlines crticos (BUTTAZZO, 2011, p. 18).
2.1.4.5 Semforos
Nos semforos normalmente utilizados em sistemas operacionais, tarefas de baixa
prioridade podem bloquear a execuo de tarefas com maior prioridade por intervalos
de tempo no-limitados, introduzindo atrasos no-determinsticos na execuo de tarefas
crticas, fenmeno conhecido como inverso de prioridades. Para minimizar esse problema,
inadmissvel em aplicaes de tempo real, devem ser usados protocolos que modificam a
prioridade das tarefas com base no uso de recursos e controlam a atribuio desses recursos
por meio de um teste executado toda vez que a tarefa entra em uma seo crtica, de forma
a limitar o tempo mximo que tarefas que compartilham sees crticas ficam bloqueadas
(BUTTAZZO, 2011).
2.1.4.6 Gerenciamento de memria
Alguns mecanismos de gerenciamento de memria podem introduzir atrasos nodeterminsticos na execuo dos programas, tais como os baseados em paginao, o que
no recomendado para aplicaes de tempo real. Para esses sistemas, comum adotar
mecanismos de particionamento esttico, que aumentam a previsibilidade do sistema, em
detrimento da flexibilidade (BUTTAZZO, 2011).
2.1.4.7 Linguagem de programao
Alm das caractersticas do hardware e dos mecanismos implementados no kernel,
a escolha da linguagem de programao exerce considervel influncia na determinao da
previsibilidade de um sistema de tempo real. Novas linguagens tm sido propostas para
29
30
320
Captulo 2. Reviso
dareal-time
literatura
up a basic
operating system. We will use as our example operating system
FreeRTOS [Bar07]. This operating system runs on many different platforms.
31
Aplica0vo
Kernel
Task 1
Task 2
FIGURE 6.7
Figura 6 Sequence
Diagrama
de sequncia
de execution.
uma execuo preemptiva. Fonte: Wolf (2012, p. 320).
diagram
for preemptive
32
2.2.2.1 Escalonador
O escalonador, principal ferramenta do kernel, prov os algoritmos responsveis
por determinar qual tarefa deve ser executada em cada momento (LI; YAO, 2003).
2.2.2.1.1 Definies
Li e Yao (2003, p. 69) definem entidade escalonvel como um objeto do kernel
que compete pelo tempo de execuo em um sistema, baseado em um algoritmo de
escalonamento pr-definido. Exemplos de entidades escalonveis so as tarefas e os
processos.
Tarefas so funes independentes, cuja execuo consiste em uma sequncia de
instrues independentemente escalonveis. Processos tambm so entidades escalonveis,
contudo, diferem das tarefas no sentido em que fornecem melhores caractersticas de
proteo memria, em detrimento de desempenho e overhead de memria (LI; YAO,
2003).
O conceito de multitarefa permite um escalonador gerenciar vrias entidades
escalonveis que precisam ser executadas simultaneamente, dentro de seus respectivos
deadlines. Em um ambiente multitarefa, o kernel intercala a execuo das tarefas baseado no
algoritmo de escalonamento, de forma que todas aparentam ser executadas simultaneamente
(LI; YAO, 2003).
Rotinas de interrupes - ISR (Interrupt Service Routine), diferentemente das
tarefas, no seguem os algoritmos de escalonamento, mas so executadas a partir de
interrupes de hardware, obedecendo poltica de prioridades (MARTINS, 2009).
Cada tarefa possui seu prprio contexto, que, segundo Lamie (2009 apud MARTINS, 2009), inclui o estado dos registradores da CPU, o contador de programa - PC
(Program Counter) - e informaes crticas relacionadas tarefa. Quando outra tarefa
entra em execuo, realizada uma troca de contexto, que consiste nos seguintes passos
(LI; YAO, 2003), ilustrados na Figura 7:
1. O kernel salva o contexto da tarefa 1 em seu TCB (Task Control Block)1 ;
2. O kernel carrega o contexto da tarefa 2 do seu TCB, que se torna a thread atual em
execuo;
3. O contexto da tarefa 1 congelado enquanto a tarefa 2 executa. Se o escalonador
precisar executar a tarefa 1 novamente, esta ir continuar sua execuo a partir do
ponto onde parou, imediatamente antes da troca de contexto.
1
TCB ou bloco de controle da tarefa uma estrutura de dados do sistema que o kernel utiliza para
guardar informaes especficas de cada tarefa. (LI; YAO, 2003, p. 70)
33
1
Salva
contexto
Tarefa
1
Contexto
da
Tarefa
2
Troca
de
contexto
Execuo
atual
Contexto atual
2
Carrega
contexto
Tarefa
2
Contexto
da
Tarefa
1
Lista
de
tarefas
Tarefa
2
Tarefa
1
Tempo
de
troca
de
contexto
Tempo
ALTA
34
Preempo
Trmino da tarefa
Tarefa 3
Prioridade
da tarefa
Tarefa 2
Tarefa 2
Tarefa 1
Tarefa 1
BAIXA
Tempo
Deadlocks ocorrem quando dois ou mais processos interagindo chegam a uma situao de impasse,
geralmente ocasionado por compartilharem recursos simultaneamente, causando travamento do sistema
(TANENBAUM, 2001).
35
Round-robin
O escalonamento round-robin mais comum em GPOSs (General-Purpose Operating
Systems), dado que fornece para cada tarefa uma poro igual do tempo de execuo e,
portanto, no satisfaz os requisitos de tempo real, uma vez que no considera a ordem
de prioridades. Esse algoritmo baseia-se no princpio de igualdade, em que as tarefas so
colocadas em uma fila e escalonadas uma aps a outra, de forma que todas possuem a
mesma chance de executar (LI; YAO, 2003; WOLF, 2012).
De acordo com Li e Yao (2003), quando uma tarefa colocada em execuo,
um contador de tempo de execuo iniciado e incrementado a cada ciclo de clock at
completar uma fatia de tempo (time slice). A tarefa em execuo , ento, colocada no
final da fila e seu contador zerado.
O round-robin pode ser associado a um escalonamento preemptivo baseado em
prioridade, em que as tarefas de mesma prioridade recebem igual alocao de tempo de
CPU. Um ciclo de round-robin executado at ser interrompido por uma tarefa de maior
prioridade. Nesse momento, o contador de tempo de execuo salvo e restaurado quando
a tarefa interrompida colocada novamente em execuo (LI; YAO, 2003). A Figura 9
ilustra essa ideia.
ALTA
Trmino da tarefa
Preempo
Prioridade
da tarefa
Tarefa 4
Fatia de tempo
Tarefa 1
Tarefa 2
Tarefa 3
T1
T1
Tarefa 2
BAIXA
Tempo
2.2.2.2 Objetos
Objetos de kernel so estruturas especiais fundamentais para o desenvolvimento
de aplicativos para sistemas embarcados de tempo real. Os objetos mais comuns de um
RTOS so as tarefas, os semforos e as filas de mensagem.
2.2.2.2.1 Tarefas
Como j definido anteriormente, tarefas so linhas de execuo paralelas e independentes, que podem competir por tempo de CPU, ou seja, so entidades escalonveis.
Segundo Li e Yao (2003), uma tarefa, quando criada, possui um nome, um ID nico, uma
36
prioridade (quando aplicvel), um bloco de controle de tarefa (TCB), uma pilha e uma
rotina, como ilustrado na Figura 10.
Bloco de Controle da Tarefa
Pilha da tarefa
TCB
PILHA
Nome da tarefa / ID
Rotina da
tarefa
int tMyTask()
{
while(1) {
printf(Hello world!);
:
}
}
Maior
prioridade
130
Prioridade
da tarefa
Menor
prioridade
37
Espera ou bloqueado. Uma tarefa entra nesse estado quando solicita um recurso
indisponvel, precisa esperar at que algum evento ocorra ou possui um delay de
certa durao.
ESPERA
sinal
espera
dispatch
ativa
PRONTO
EXECUTANDO
termina
preempo
continua
IDLE
fim do ciclo
TIMER
Figura 11 Diagrama de transio dos estados mnimos de um kernel de tempo real. Fonte:
Buttazzo (2011, p. 352).
2.2.2.2.2 Semforos
Li e Yao (2003) definem semforo como um objeto de kernel que uma ou mais
entidades escalonveis podem adquirir ou liberar com o objetivo de sincronizar a execuo
de mltiplas tarefas ou coordenar o acesso a um recurso compartilhado (excluso mtua).
Quando um semforo criado, o kernel lhe atribui um bloco de controle de semforo SCB (Semaphore Control Block), um ID nico, um valor (binrio ou uma contagem) e
uma lista de espera para tarefas, como ilustra a Figura 12.
Bloco de Controle do Semforo
SCB
Nome do
semforo / ID
Lista de espera
das tarefas
Tarefa 1
Valor
Binrio ou
uma contagem
Tarefa 2
...
O kernel controla o nmero de vezes que um semforo pode ser adquirido por meio
de um contador, que inicializado no momento em que o semforo criado. Quando
uma tarefa adquire o semforo, ela permitida a executar uma dada operao ou acessar
38
Memria
QCB
Nome da
fila / ID
...
Tarefa
Lista de espera
das tarefas receptoras
Mximo comprimento
da mensagem
Lista de espera
das tarefas emissoras
Tarefa
Tarefa
Tarefa
...
Elemento da fila
Tail
Comprimento da fila
Head
2.2.2.3 Servios
Para auxiliar no desenvolvimento dos aplicativos para sistemas embarcados de
tempo real, o kernel fornece servios que compreendem um conjunto de mtodos da API
(Application Programming Interface), os quais so usados para realizar operaes sobre os
objetos do kernel e para facilitar o gerenciamento dos timers, tratamento de interrupes,
perifricos de I/O e gerenciamento de memria.
39
Target system
Connections
Host
resident
software
Target
resident
software
Serial
BDM/JTAG
Ethernet
40
Makefile
(Makefile)
Make Utility
Assembly Source
and Header Files
(*.s, *.h)
Preprocessor
Compiler
Archive Utility
Library Files
(*.a, *.lib)
Relocatable
File
(*.o, *.a)
Linker
Command File
(*.link)
Assembler
Object Files
(*.o)
Shared Object
File
(*.o, *.a)
Executable
Image
(*.elf, *.coff,
*.hex, *.out)
Link Map
(*.map)
41
O linker responsvel por combinar essas sees para formar a imagem executvel
e o loader carrega, na memria fsica do target, o cdigo executvel criado. Esse processo
exemplificado nas Figuras 16 e 17.
Executable image
file1.o
loader section
code/data (file1.o)
file2.o
loader section
code/data
.text section
.text (file1.o)
.text section
code
.text section
code
.text (file2.o)
my_section (file2.o)
my_section
code
.data section
data
.data section
.data (file1.o)
.data section
data
.bss section
data
.data (file2.o)
.bss section
data
.bss section
.bss (file1.o)
.bss (file2.o)
Figura 16 Combinao das sees em imagem executvel. Fonte: Li e Yao (2003, p. 38).
Executable image
Target memory
loader section
code/data (file1.o)
ROM
.text section
.text (file1.o)
Flash
0x0103Fh
0x10000h
my_section (file2.o)
.data (file2.o)
0x0001Fh
0x00040h
.text (file2.o)
.data section
.data (file1.o)
0x00000h
RAM
0x1FFFFh
.bss section
.bss (file1.o)
.bss (file2.o)
42
Aplicativo
Software
ETHERNET
PORTA SERIAL
Hardware
BDM / JTAG
TIMER
Figura 18 Componentes de software de uma imagem executvel. Fonte: Li e Yao (2003, p. 57).
operacional, ou seja, o BSP fornece o suporte mnimo para carregar o sistema operacional e contm os device drivers para todos os dispositivos no sistema target. Segundo
Corbet, Rubini e Kroah-Hartman (2005), os drivers de dipositivos funcionam como uma
caixa preta, fazendo com que um dispositivo de hardware particular responda a uma
interface de programao interna bem definida, sem que a aplicao conhea os detalhes
de implementao do dispositivo.
No entanto, encontram-se na literatura algumas divergncias quanto ao escopo do
BSP, se pertinente ou no incluir os drivers de perifricos em sua definio. Diferentemente
de Kumar, Kamaraju e Yadav (2013), Fredericks (2001) afirma que o BSP no acessa
diretamente o hardware dos dispositivos, porm funciona como uma interface entre o
kernel e os drivers dos perifricos.
Uma vez que a definio exata do BSP no faz parte do escopo deste trabalho,
adotou-se a perspectiva apresentada na dissertao de Hedlund e Aronson (2002), em
que dividem o BSP em um conjunto mnimo de cdigo de inicializao e drivers para o
funcionamento do sistema operacional (OS BSP), e um conjunto de drivers especficos
para a aplicao e que no so utilizados pelo RTOS (BSP), como ilustra a Figura 19.
Software aplicativo
Pilhas
Kernel
Cdigo de inicializao
Controlador de interrupo
Canal de debug
Timer do escalonador
OS BSP
BSP
Drivers especficos
aplicao (UART, GPIO,
PWM, Ethernet, etc.)
Hardware
43
44
Sequncia
de inicializao
do target
Inicializao
do hardware
Inicializao
do software
(RTOS)
Inicializao
do software
(aplicativo)
Vetor de inicializao
Inicializao de
hardware mnimo
Inicializao do
hardware remanescente
Inicializao
do RTOS
Inicializao
dos componentes
do RTOS
Incio da execuo
do RTOS
Transfere controle
ao programa de
usurio
Imagem de boot
mnima
BSP
RTOS
Aplicativo
45
46
RGB a abreviatura do sistema de cores aditivas, formado por vermelho (Red), verde (Green) e azul
(Blue)
47
O Yocto Project um projeto de colaborao open source que fornece templates, ferramentas e mtodos
que auxiliam na criao de sistemas baseados em Linux customizados para aplicaes embarcadas
independentemente da arquitetura de hardware utilizada (YOCTO PROJECT, 2013)
RTEMS um sistema operacional de tempo real open source, muito utilizado em aplicaes espaciais
(SCHFER, 2007).
48
49
pointer e ento chama a funo boot_card, que inicializa o RTEMS. Em sua execuo,
chamada outra funo (bsp_start) onde so inicializados o hardware e os perifricos
sem um driver dedicado. No driver do console, o autor implementa dois modos diferentes
para a comunicao serial via UART: por polling e por interrupo. O driver do clock
fornece uma base de tempo confivel para o kernel e sua implementao bastante simples,
contendo apenas duas funes: Clock_driver_support_initialize_hardware,
que programa o clock do ncleo do Blackfin, e Clock_driver_support_install_isr, que instala o tratador de interrupo para esse driver. O driver do timer implementado
por Schfer (2007) usado apenas para benchmarking e consiste em ler os ciclos do clock
do registrador CYCLES.
Schfer (2007) realiza, ainda, um benchmarking, por meio do qual constata que
a melhora de desempenho do cdigo nativo sobre o interpretado de quatro vezes. No
tocante ao tempo de desenvolvimento, o autor conclui que implementar o sistema com base
em um RTOS existente muito mais eficiente do que escrever todo o cdigo de interface
entre o software e o hardware.
O trabalho de Abadie (2008) apresenta uma metodologia de model-driven engineering, que permite a gerao automtica de cdigo a partir da criao de modelos
(abstraes) do sistema, utilizados para validao das funcionalidades e restries do projeto em suas fases iniciais. O autor pretende, com essa abordagem, aumentar a qualidade
e confiabilidade dos cdigos, prejudicadas pela crescente complexidade das aplicaes dos
sistemas embarcados atuais. Para alcanar seu objetivo, Abadie (2008) utiliza a linguagem
UML (Unified Modeling Language) e o software Rhapsody para gerar os prottipos dos
diversos componentes do computador de bordo do projeto ITASAT6 e realiza a adaptao
dessa ferramenta para o RTEMS, que o sistema operacional utilizado no satlite.
Para fazer o link do cdigo gerado pelo Rhapsody com o RTEMS, foi necessrio
modificar as funes da OSA (OS Abstraction layer) para se comunicarem com o sistema
operacional, uma vez que ela a nica parte do OXF (Object eXecution Framework)
que dependente do sistema operacional. Aps criado um arquivo da OSA especfico
para o RTEMS, foi necessrio link-lo aos demais arquivos fonte que compem o OXF e,
posteriormente, integrar o Rhapsody ao processo de montagem do executvel, alm de
permitir que o usurio possa configurar o RTEMS e iniciar a simulao da aplicao de
dentro do prprio Rhapsody (ABADIE, 2008).
Para validao do projeto desenvolvido, Abadie (2008) criou uma mquina de
estados e uma srie de testes, verificando um ganho significativo na velocidade de prototipao. Outra vantagem destacada pelo autor foi a simplificao do processo de design
proporcionada pela ferramenta visual de modelagem.
6
ITASAT um projeto, executado por equipes do ITA e da USP So Carlos, que visa desenvolver uma
srie de microsatlites universitrios (ABADIE, 2008).
50
T0-1
N0
N1
T1-0
T2-1
T2-0
T0-2
N2
T1-2
T2-3
T3-4
N3
N4
T4-3
T3-3
O mtodo apresentado por Souza (2007) rompe com a metodologia geral existente,
que, conforme apontado em seu trabalho, no dedica a ateno necessria para o porte do
sistema operacional, sendo uma das etapas menos sustentadas por processos e ferramentas.
Os passos descritos anteriormente no ocorrem de maneira linear, mas so colaborativos, seguindo a sequncia do grafo apresentado na Figura 21, em que as transies so
(SOUZA, 2007, p. 53):
T0-0 - Avaliao dos requisitos usando modelo de tomada de deciso;
T0-1 - Influncia dos elementos de hardware nos elementos de software;
T1-0 - Influncia dos elementos de hardware na reavaliao da rvore de deciso;
T2-0 - Influncia dos elementos de software a serem elaborados no total de trabalho
a ser realizado;
51
52
Figura 22 Um modelo de tomada de deciso para sistemas embarcados. Fonte: Souza (2007,
p. 55).
HARETICK um kernel operacional de tempo real crtico, com suporte a multitasking, projetado
para sistemas embarcados, capaz de fornecer previsibilidade mxima para aplicaes hard real-time
(STANGACIU; MICEA; CRETU, 2014).
53
Jitter a mxima variao dos tempos de liberao das instncias de uma tarefa (FARINES;
FRAGA; OLIVEIRA, 2000, p. 14).
54
3 Desenvolvimento
Este captulo apresenta a metodologia de porte desenvolvida com base em um
estudo de um BSP existente e funcional, obtido com o auxlio do PEx (Processor Expert)1 ,
para o porte do FreeRTOS em uma plataforma ARM.
OSA
Peripheral
Drivers
CMSIS Core
Header Files
Board
Configuration
System
Services
SOC header, IP
extension header files
CMSIS
DSP
Hardware
O PEx uma ferramenta integrada ao KDS que auxilia na gerao de cdigo fonte a partir de
bibliotecas pr-programadas, incentivando a reutilizao de cdigo.
O KDS um IDE que fornece ferramentas para edio, compilao e depurao de projetos para
dispositivos Kinetis Cortex-M. baseado em Eclipse e utiliza as ferramentas GNU.
Captulo 3. Desenvolvimento
55
Captulo 3. Desenvolvimento
56
tarefas, semforos, mutexes, entre outros. Embora no faa parte do BSP e no tenha
relao direta com o porte do RTOS, esse arquivo ser estudado neste trabalho por conter
uma API completa que esconde do software aplicativo os detalhes de implementao do
RTOS, de forma que o cdigo da aplicao de usurio fique independente do sistema
operacional.
Os drivers de perifricos tambm so importados pelo PEx e fornecem ao aplicativo
as funes necessrias para a utilizao do dispositivo. Um conjunto de funes que
interagem diretamente com o hardware disponibilizado para os drivers, formando uma
camada de abstrao chamada HAL (Hardware Abstraction Layer). O escopo da HAL
fornecer o controle funcional, as configuraes e a implementao de operaes bsicas dos
perifricos (LEARNING. . . , 2015).
A Figura 24 mostra a estrutura do kernel bsico obtido pelo KDS ao se criar um
projeto utilizando o PEx.
Captulo 3. Desenvolvimento
57
Captulo 3. Desenvolvimento
58
c) vPortStartTickTimer()
Habilita o timer do contador de ticks.
d) vPortStopTickTimer()
Desabilita o timer do contador de ticks.
e) xPortStartScheduler()
a funo do RTOS que inicializa o escalonador;
Chama as funes que inicializam e habilitam o timer;
Chama a funo que inicia a primeira tarefa.
f) vPortEndScheduler()
Chama a funo que desabilita o timer;
Faz um salto retornando ao estado do processador anterior inicializao do
escalonador.
g) vPortEnterCritical()
Desabilita as interrupes e incrementa a contagem de sees crticas aninhadas.
h) vPortExitCritical()
Decrementa a contagem de sees crticas aninhadas;
Habilita as interrupes caso a contagem seja zerada.
i) vPortYieldFromISR()
Gera uma exceo PendSV para solicitar troca de contexto.
j) uxGetTickCounterValue()
Retorna o valor do contador de ticks.
k) vPortTickHandler() (ou SysTick_Handler() para o KSDK)
Incrementa o contador de ticks e solicita troca de contexto, caso necessrio;
SysTick uma exceo gerada pelo timer do sistema quando este zerado.
l) vPortStartFirstTask()
Funo implementada em assembly que inicia a primeira tarefa;
Seta o registrador MSP (Main Stack Pointer) com o incio da pilha;
Carrega o contexto da tarefa;
Habilita interrupes;
Faz uma chamada de sistema para iniciar a primeira tarefa.
m) vPortSVCHandler() (ou SVC_Handler() para o KSDK)
Captulo 3. Desenvolvimento
59
3.1.2.2 portmacro.h
Esse arquivo contm definies especficas do porte, de forma a configurar o
FreeRTOS corretamente para o compilador e o hardware sendo utilizados. As principais
configuraes incluem:
a) Definies de tipo
b) Configuraes especficas de hardware, como:
portBYTE_ALIGNMENT: no caso da plataforma ARM, o valor 8, pois a
memria sempre alinhada a byte.
portSTACK_GROWTH: para um microcontrolador ARM, com crescimento
da pilha descendente, o valor -1.
portTICK_PERIOD_MS: configura o perodo entre os ticks em ms, baseado
na frequncia do clock.
c) Gerenciamento da seo crtica
d) Utilidades do escalonador
e) Otimizaes especficas da arquitetura
f) Funcionalidades de suprimir os ticks e economia de energia
g) Prottipos das funes implementadas em port.c
3.1.2.3 FreeRTOSConfig.h
O arquivo de configurao FreeRTOSConfig.h customiza o kernel do RTOS
aplicao em desenvolvimento. Nele esto contidas diversas definies de constantes e
macros, das quais, destacam-se algumas na Tabela 1.
Captulo 3. Desenvolvimento
60
Valor
48000000
200
8
200
10240
1
1
1
3
1
2
1
Significado
Frequncia do clock da CPU
Frequncia de interrupo do tick
Nmero mximo de nveis de prioridade
Tamanho mnimo da pilha
Dimenso do heap
Modo preemptivo
Uso de mutex
Uso de timers
Configura prioridade do timer
Compilador ARM GCC
2 bits / 4 nveis de prioridade
Inclui todas as funes API na compilao
Captulo 3. Desenvolvimento
61
6. Chama a funo __main, que responsvel por configurar a biblioteca C adequadamente e copiar cdigo/dados para os devidos locais em tempo de execuo. Essa
funo bastante especfica para a tool-chain e similar funo _start em GCC.
7. Transfere o controle ao aplicativo, chamando a funo main().
3.1.2.5 system_MKL25Z4.c
Esse arquivo, escrito em linguagem C, bastante especfico para o dispositivo e
fornece a configurao do clock do sistema. Possui apenas uma varivel global e duas
funes (ARM, 2015b):
SystemCoreClock - Varivel global que armazena o valor do clock do sistema;
SystemInit() - Inicializa o microcontrolador, configurando o oscilador e o PLL
(Phase-Locked Loop) para o clock do sistema desejado;
SystemCoreClockUpdate() - Atualiza o valor da varivel SystemCoreClock
com base nas configuraes dos registradores. Deve ser chamada toda vez que o clock
do sistema for alterado em tempo de execuo.
3.1.2.6 MKL25Z4.h
O arquivo MKL25Z4.h bastante extenso e possui todo o mapeamento de acesso aos
registradores dos perifricos suportados pelo microcontrolador e utilizados pelo aplicativo,
tais como: ADC (Analog-to-Digital Converter), CMP (comparador de alta velocidade), DAC
(Digital-to-Analog Converter), DMA, GPIO (General-Purpose Input/Output), I2 C (InterIntegrated Circuit Bus), NVIC, PORTx, RTC (Real-Time Clock), SPI, TPM (Timer/PWM
Module), UART, USB (Universal Serial Bus), entre outros. Esse arquivo especfico para
o microcontrolador e fornecido pelo fabricante ou desenvolvedores third party. Sua funo
basicamente mapear os registradores dos perifricos para seus respectivos endereos de
memria.
3.1.2.7 OSA: fsl_os_abstraction_free_rtos.c
A OSA a camada de abstrao do sistema operacional e possui uma srie de
funes que permitem a manipulao de objetos do kernel. A Tabela 2 apresenta as funes
contidas no arquivo fsl_os_abstraction_free_rtos.c e sua descrio resumida.
3.1.2.8 Outros arquivos fonte comuns
Os arquivos fonte que compem o kernel do FreeRTOS e so comuns a todos os
portes, independentemente da plataforma, compreendem:
Captulo 3. Desenvolvimento
62
Nome da funo
Descrio resumida
OSA_SemaCreate()
Cria um semforo
OSA_MemFree()
OSA_TimeDelay()
OSA_TimeGetMsec()
OSA_InstallIntHandler()
OSA_SemaWait()
Semforo
OSA_SemaPost()
OSA_SemaDestroy()
OSA_MutexCreate()
Mutex
OSA_MutexLock()
OSA_MutexUnlock()
OSA_MutexDestroy()
OSA_EventCreate()
OSA_EventWait()
Evento
Tarefa
Fila de
mensagens
OSA_EventSet()
OSA_EventClear()
OSA_EventGetFlags()
OSA_EventDestroy()
OSA_TaskCreate()
OSA_TaskDestroy()
OSA_TaskYield()
OSA_TaskGetHandler()
OSA_TaskGetPriority()
OSA_TaskSetPriority()
OSA_MsgQCreate()
OSA_MsgQPut()
OSA_MsgQGet()
OSA_MsgQDestroy()
OSA_MemAlloc()
Memria
Diversos
OSA_MemAllocZero()
OSA_EnterCritical()
OSA_ExitCritical()
OSA_Init()
OSA_Start()
Captulo 3. Desenvolvimento
63
Captulo 3. Desenvolvimento
64
S)1S))c)))S1SScS1
SSSSSSSSSSSSSSSSS
ScSS)cSSSSSSSSSc
SSSSSSSSc
cS))Sc
c)S)c)S))c))S)))SSc
)SS))SS)S)))SSc
_S)ScSSS)SSSScS)c)S_S))S
SScSSc
cSSSc
_S))SSScSS)
SS)))SSsS c
SSSsSSc
))S)SS)S))))S))
ScSS)c)))S))
)))SS)SSSS)SS))
cS))))
c)S)c)S))c))S)))S))
)SS))SS)S)))S))
)S)S)))S))
sSSSSSSS)S)SSScc)SS
c))ScccSc)))SSS)))S))
cccSc)))SSS)))S))
c))S)))SSS))))))
SS)))SSsS)))S))
)S)S)SSscS)SS)))
))SSs))))S)ccS)SS)))
sSSSSSSS)S)SSScc)SSrcSr)SScS
sSSSSSSS)S)SSScc)SSrcSr)SScS
)S)SSSSSS))
c)SSsSSSSSSc)))S))S))
sSSSSSSS)S)SSScc)SS
)))))))))))
Neste projeto, foi adicionado o componente TSI (Touch Sensing Input), que
o slider de toque capacitivo. A Figura 26a apresenta a estrutura de diretrios com os
arquivos relacionados ao driver do TSI em destaque. As funes contidas nesses arquivos
podem ser visualizadas na janela de componentes, ilustrada na Figura 26b.
Captulo 3. Desenvolvimento
65
Captulo 3. Desenvolvimento
66
Captulo 3. Desenvolvimento
67
Captulo 3. Desenvolvimento
68
Captulo 3. Desenvolvimento
69
Captulo 3. Desenvolvimento
70
71
4 Experimentos
Neste captulo, apresentado o porte do FreeRTOS na plataforma de desenvolvimento FRDM-KL25Z realizado conforme a metodologia proposta neste trabalho de
pesquisa, para fins de verificao e validao.
Captulo 4. Experimentos
72
Captulo 4. Experimentos
73
b) Memria
128kB Flash
16kB SRAM (Static Random Access Memory)
c) Sistema
Controlador DMA
COP (Computer Operating Properly) watchdog timer
d) Clocks
Mdulo de gerao de clock com FLL (Frequency-Locked Loop) e PLL para o
sistema e a CPU
Clocks internos de referncia de 4MHz e 32 kHz
Oscilador do sistema com suporte para cristal externo ou ressonador
Oscilador RC de baixo-consumo de 1kHz para o RTC e o COP watchdog
e) Timers
Um mdulo Timer/PWM de 6 canais
Dois mdulos Timer/PWM de 2 canais
Timer de interrupo peridica - PIT (Periodic Interrupt Timer) - de 2 canais
RTC
Timer de baixo-consumo - LPT (Low-Power Timer)
System tick timer
f) Perifricos
USB (Host/Device)
SPI (x2)
I2 C (x2)
UART (x3)
ADC (16 bit)
DAC (12 bit)
Sensor de toque capacitivo
GPIO (x66)
Acelermetro de 3 eixos
LED RGB
g) Alimentao
Conectores USB (x2)
Bateria tipo moeda
Fontes externas
Captulo 4. Experimentos
74
A FRDM-KL25Z possui tambm uma interface de depurao OpenSDA (Openstandard Serial and Debug Adapter) com mltiplas aplicaes, incluindo:
programao da memria Flash por dispositivo de armazenamento em massa;
interface de debug P&E, que possibilita a depurao com controle de execuo e
compatibilidade com as ferramentas do IDE;
interface CMSIS-DAP: novo padro ARM para interface de depurao embarcada;
aplicao data logging.
Um diagrama de blocos simplificado ilustrado na Figura 30a e as principais
caractersticas da plataforma utilizada esto destacadas na Figura 30b.
Captulo 4. Experimentos
75
eII 2eIeIe
o eeeeIe e II e11
i eieI i eiie
ssssssssssssssssssssss
eeee
eeee
eeee
eeeeeeeee
eeeeeeee o
eeeer e ee
1ee1ee11
1ee1ee12
1ee1ee13
e e eee ee ee e
eeee eeeee e ee e
eee e eeee e
eeeee
...
e e eee ee ee e
eeee eee o e e
ee eeee. e eeee e
eeeee ...
e e eee ee eee
e
eee e ee eeee e
ee
e e e e
e eeee e ee
e e e e
e e ee ee .
Captulo 4. Experimentos
76
IsIIIIIISsnennInIssICsnssnIInIss
nsnnsiISnngnIisn
sssssssssssssssssss
nnnnnnnnnnn
snnsnsnCCnss
snnnssss
snssnss
snnnssss
snssnss
sngs
sngs
sngs
SsssSSSs
ssn
nnnnsss
nnsnnens
CnsnsCCCnCCCC
CsgCnng
Captulo 4. Experimentos
77
CMSIS (Cortex Microcontroller Software Interface Standard) uma norma que padroniza o desenvolvimento para dispositivos ARM Cortex-M, de forma a facilitar o trabalho de desenvolvedores de
software e fabricantes de plataformas e ferramentas.
Captulo 4. Experimentos
78
A tool-chain (ID 5) utilizada para gerao da imagem executvel foi a arm-noneeabi, que gera cdigo para arquitetura ARM, no possui distribuidor, no especfica
para nenhum sistema operacional e atende ao padro ARM EABI (Embedded-Application
Binary Interface) (DUTTA, 2012).
O prximo passo da metodologia (ID 6), expandido na Figura 28, realizar as
alteraes nos cdigos relacionados ao hardware. Como o vetor de inicializao (ID 6.a)
dependente apenas da plataforma de hardware e no do RTOS sendo portado e j
foi fornecido pelo fabricante, no foi necessrio implement-lo, nem efetuar nenhuma
alterao.
Como mencionado anteriormente, a configurao do clock do sistema (ID 6.b)
implementada no arquivo system_MKL25Z4.c, o qual no necessita de modificaes
pelo mesmo motivo do item ID 6.a. Para esta aplicao, foi utilizado o mdulo MCG
(Multipurpose Clock Generator) e selecionado o modo de operao PEE (PLL Engaged
External), que usa um cristal externo de 8 MHz e um PLL para alcanar a frequncia de
48 MHz de alta preciso (ARM, 2012). O modo de operao, com servio de watchdog
desabilitado, foi configurado no arquivo de cabealho system_MKL25Z4.h, onde foram
definidas duas constantes conforme o Quadro 1.
1
2
3
4
5
6
7
8
9
1
2
3
4
/* Architecture specifics. */
#define portSTACK_GROWTH
#define portTICK_PERIOD_MS
#define portBYTE_ALIGNMENT
( -1 )
( ( TickType_t ) 1000 / configTICK_RATE_HZ )
8
Captulo 4. Experimentos
79
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
0
( 1 )
5
( 80 )
Captulo 4. Experimentos
80
Captulo 4. Experimentos
81
SW
TP14
TP13
D3
PTB18
R8
220
LEDRGB_RED
P3V3
1
R
LEDRGB_GREEN
R7
LEDRGB_BLUE
R11
PTB19
220
220
D13
P3V
pg(3,5)
TP17
CLV1A-FKB-CJ1M1F1BB7R4S3
Figura 34 Diagrama esquemtico de ligao do LED RGB. Fonte: Freescale (2013, p. 3).
GND
5
oooooooooooooooo
oo ooo
o ooooo o o ooo
oooooooo
o oooo o ooo
oo%%o % %ooooo %%
o o% oooooooooo
o% %oooo %oooo o o
%o oo oooo oo ooo o o
ooo%o o% ooo
Por fim, o programa foi compilado e testado de forma iterativa, at que os requisitos
do sistema fossem satisfeitos, conforme sugerem os passos ID 8 a 10 da metodologia. O
diagrama de definio de blocos dos principais componentes do sistema so apresentados
na Figura 37. O cdigo completo pode ser encontrado em <https://github.com/tiagoukei/
tcc_blink>.
Os blocos destacados em amarelo na Figura 37 constituem o software aplicativo,
implementado pelo usurio, e o arquivo FreeRTOSConfig.h, que faz parte do cdigo
baixado do site do FreeRTOS, onde foram definidas as constantes para customizar o kernel
do sistema operacional para a aplicao. Os blocos verdes so especficos ao hardware
Captulo 4. Experimentos
82
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
iIiIIiIIiIiIIiiIi
222222222222222222222222222222
iIoIiIIIoIoooIII
io IIII I I IIoIIIII I
I IoI IoIoIIoI
iIIIII II
% IIIIIi%I % IIIIIII %
I II IIoIoooIII
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
iIiIIiIIiIiIIiiIi
InnInsginInIsInIIiIgIInIIIInIIInIIiginIIIn
sssssssssssssssssssssssssssssss
tIInIIIIIIgIgIIII nIIInIIiginIIIn
InnInsginInIIIInIIiIIInIIiginIIIn
innIinIiiIniiInnIIIIniiIiiI
IiIIiIndgIIIiiInnIIIIniittdII44
tIIgdIgdIIgtdnnIniinidid...
IIgtIdIgdtIIgdiiniiinididIiI
innIinIiiIniiIIIInIniiIII
innIinIiiIniiIIIInIniiIIni1
innIinIiiIniiIIIInIniiIIniI
ddIIIniidIIIiIIIdididIiI
IIni1diniiddidIiI
IIni1diInidnddIIInIiIIidIiII.did...
IIniIdiniiddidIiI
IIniIdiInidnddIIInIiIIidIiI.did...
innIinIiiIniiIIIInIniinIin
innIinIiiIniiInnIIIIniigIIIgIgIgIngii
IIIIInInIIIIi.IInInIIII.In...
dIniiiIIidIIIninddidIiI
dIniiiIIidIIInInIIIIddidIiI
dIniiiIIidIdIIinIIIIInddidIiI
nIinddiini
ddinIddIniIIddidIiI
gInIid.InIIIIddidIiI
tIgIIIiIIgddidIiI
IiIIiIndgIIIiiIIIInIniin*niIndttdII44
gIIIgIgIiinIIiIIIIiitIntIniiiIIInd1
IiII IIoI
IiIIiIndgIIIiiIIIInIniiniIIiIndttdII44
nIInnd7
nIInnd8
gIIIgIgIdIIIInIdgiIIn
nddIIitIIIInddidIiII.
ddIIigIIIdndidIiI.didIiI
ddIIiIniiiIIinItIIninddidIiI
.dIIiIIigIII.IInIidIddinidIdi
I*niIngIIIgIIniiIinitIdi
I*niInIniiddidIiI
I*niIngIIIgIIniinIIiIddidIiI
gIIIgIgIiinIIiIIIIiigIIiI.ttndIggiinIIinInII
gIIIgIgIiinIIiIIIIiigIIiI.ttndIggiinIIi
n.dIIiIniiiIIinIIiInidn.IInggIiIniiIiIniI*nIdi.*n.gIIIiIInigInniiIndi*nddIIInIiIInidIiI.diIiIniI*nIdi.
nIdIIniI.iiIIIIIddidIiI
ddIIiIiIIigiIniIIniddidIiI
.dIIiIiIIiInIIIIIIIdditInII*nIdi
ddIIiInIInIIIIIIIddidIiI
ddIIidiIIIddidIiI
ddIIiIniIIgIiiiinIIddidIiI
ddIIiI.iigIiiinIIddidIiI
IIIIiIniIIIInitInigIInIIgddiInniinIIIIIni
dgIIIIIniIIIInitInigIInIIgdIItIniiInniinIIIIInididIiI
dInIIdd.InIIIIddidIiI
I*nIinid.InIIIIddidIiI
nIdIIiInIinIIIniIIIIniddidIiI
nIIiIIigtdIggtI.iini
nIIiIIgtddIgIgtdtIiini
nIIitdIIdidIIttItIiini
nIIititdtIdidiini
nIIidIIdtddidIiI
nIIidIIdtdgggtdIIgddidIiI
nIIiIttdItIIg.ItIdIIgddidIiI
nIIitIIitdIdItIIggidIIddidIiI
nIIiItitdIdItIIggidIIddidIiI
nIIiItIIgdggIIIgidddidIiI
nIIiItIIdggIIIgidddidIiI
nIIiIiItdgitgIIgtddggIgddidIiI
nIIiIiItdgitgIIgtddidIiI
nIIitgdddidIiI
nIIiIIIdItIIggidIdtiItdgggtdIIgddidIiI
nIIigdIigdItIIggidIdtiItdgggtdIIgddidIiI
Captulo 4. Experimentos
83
ID 6.c
ID 6.d
ID 6.e
ID 6.f
ID 6.g
ID 6.h
ID 7.a
ID 7.b
Implementao
startup_MKL25Z4.S
system_MKL25Z4.c
system_MKL25Z4.h
- DISABLE_WDOG: desabilita watchdog timer
- CLOCK_SETUP: configura modo de clock
portmacro.h
- portSTACK_GROWTH: direo de crescimento da pilha
- portTICK_PERIOD_MS: perodo das interrupes do escalonador
- portBYTE_ALIGNMENT: alinhamento de memria
FreeRTOSConfig.h
port.c
- xPortStartScheduler(): configurao das prioridades de cada evento
- xPortSysTickHandler(): implementao da ISR do SysTick
- xPortPendSVHandler(): implementao da ISR de chamadas de sistema
do tipo PendSV
- prvSetupTimerInterrupt(): habilita interrupo do SysTick
port.c
- prvSetupTimerInterrupt()
port.c
- vPortEnterCritical(): seo crtica
- vPortExitCritical(): seo crtica
- PendSVHandler(): implementao da troca de contexto
- vPortYield(): solicita PendSV para troca de contexto
- SysTickHandler(): solicita PendSV para troca de contexto
- pxPortInitialiseStack(): inicializao da pilha
- vPortStartFirstTask(): inicializao do TCB
- xPortStartScheduler(): inicializao do escalonador
- vPortEndScheduler(): shutdown do escalonador
led_driver.c
led_driver.h
Task1.c
- Task1_init()
Task2.c
- Task2_init()
Task1.c
- Task1_task()
Task2.c
- Task2_task()
Captulo 4. Experimentos
84
85
5 Resultados
Os requisitos do sistema utilizado para validao da metodologia proposta neste
trabalho incluem restries temporais bem definidas, tratamento de interrupes e gerenciamento de recursos compartilhados, bem como acesso a perifricos da plataforma
de desenvolvimento, conforme o diagrama de requisitos apresentado na Figura 31, o que
confere ao sistema vrias caractersticas dos sistemas embarcados de tempo real.
O acionamento dos LEDs e o correto funcionamento do compartilhamento de
recursos (REQ3) podem ser comprovados por observao. A Figura 39 mostra uma
fotografia do sistema em movimento, com exposio durante 10 segundos, a fim de ilustrar
seu funcionamento bsico.
Pode-se notar que o acionamento dos LEDs ocorre de forma intercalada e que o
LED vermelho pisca a uma frequncia menor que o LED verde, conforme os requisitos
definidos para o sistema. Contudo, para verificar se os requisitos temporais so satisfeitos,
necessria uma anlise mais precisa da temporizao. Para tanto, foi utilizado um
osciloscpio de dois canais e a sada foi plotada utilizando-se o programa Matlab. A
Figura 40 ilustra a alternncia das tarefas e seu impacto na sada dos pinos que acionam
os LEDs. A Figura 41 mostra os sinais de sada em grficos separados, com alguns pontos
em destaque para verificar os requisitos de temporizao.
Deve-se notar que a conexo do LED implementa uma lgica inversa, isto , a
ativao ocorre em nvel baixo, como pode ser visto no esquemtico da Figura 34. Observase, a partir da Figura 41, que o perodo de acionamento do LED vermelho de 2 segundos,
com duty cycle de 50%, indicando que o REQ2 foi cumprido com preciso ( < 1ms). O
LED verde, por sua vez, apresentou perodo de 20 ms e duty cycle de 50%, satisfazendo o
REQ1.
importante ressaltar tambm que o volume de memria obtido no porte seguindo
a metodologia (18.556 bytes) foi reduzido em relao ao obtido pelo PEx (20.872 bytes), o
Captulo 5. Resultados
86
LEDRGB_RED
LEDRGB_GREEN
Tenso [V]
Task1
1
Task2
4
5
Tempo [s]
Figura 40 Sada nos pinos dos LEDs durante a execuo de cada tarefa.
4
X: 0.864
Y: 3.36
Tenso [V]
X: 2.864
Y: 3.36
X: 4.864
Y: 3.36
2
1
0
X: 1.864
Y: 0
X: 3.864
Y: 0
4
5
Tempo [s]
X: 5.864
Y: 0
X: 7.064
Y: 3.36
X: 6.864
Y: 3.44
3
Tenso [V]
X: 6.864
Y: 3.36
2
1
0
X: 6.964
Y: 0
4
5
Tempo [s]
87
6 Concluso
O objetivo da presente pesquisa consistiu em desenvolver uma metodologia de
porte de um RTOS em uma plataforma de hardware, bem como validar a metodologia
desenvolvida por meio da implementao de um porte especfico.
Conforme observa-se nos resultados apresentados no captulo anterior, Captulo 5,
a metodologia mostrou-se adequada para o porte efetuado, satisfazendo todos os requisitos
do sistema. Realizou-se um port do RTOS FreeRTOS para uma plataforma de hardware
baseada em ARM Cortex M0+.
A partir do experimento realizado pode-se concluir que os seguintes itens foram
executados com sucesso:
configurao do clock e do timer;
inicializao da pilha do sistema e dos TCBs das tarefas;
gerenciamento da troca de contexto;
lanamento de excees e tratamento de interrupes;
gerenciamento de recurso compartilhado;
utilizao dos perifricos de hardware.
Graas ao xito obtido em cada uma das atividades mencionadas anteriormente,
foi possvel cumprir os deadlines das tarefas, que um requisito intrnseco a todo sistema
de tempo real, indicando que houve um correto acoplamento entre hardware e software,
propiciado pelo porte adequado do sistema operacional conforme a metodologia proposta
neste trabalho.
A metodologia desenvolvida difere-se das estudadas na literatura no sentido em
que define claramente, por meio de um fluxograma de processo, a sequncia das atividades
necessrias para realizar o porte de um RTOS e tambm pelo fato de fornecer uma
abstrao que permite a aplicao desses conceitos a qualquer combinao de sistema
operacional e plataforma de hardware, embora a implementao do BSP seja bastante
especfica.
Pode-se concluir deste trabalho que uma sequncia de passos bem definidos capaz
de auxiliar o desenvolvedor no processo de porte para que este seja efetuado com sucesso.
A aplicao da metodologia proposta neste trabalho de pesquisa resultou em uma
reduo de aproximadamente 11% no volume de memria utilizado, quando comparado ao
resultado da ferramenta PEx.
Captulo 6. Concluso
88
89
Referncias
ABADIE, A. K. Adaptao da ferramenta Rhapsody para modelagem de aplicaes
embarcadas de tempo real sobre RTEMS. 53 f. Trabalho de Concluso de Curso (Graduao
em Engenharia Eletrnica) Instituto Tecnolgico de Aeronutica, So Jos dos Campos,
2008.
ABBOTT, D. Linux for Embedded and Real-time Applications. 2. ed. Burlington: Newnes,
2006.
ANDERSSON, K.; ANDERSSON, R. A comparison between FreeRTOS and RTLinux in
embedded real-time systems. 13 f. Linkping University, Linkping, 2005.
ARM. Booting a Cortex-M7 system. 2011. Disponvel em: <http://infocenter.arm.com/
help/index.jsp?topic=/com.arm.doc.dai0179b/ar01s02s06.html#>. Acesso em: 8 mai.
2016.
ARM. Cortex-M0+ Devices: Generic user guide. 2. ed. [S.l.], 2012.
ARM. Procedure Call Standard for the ARM Architecture. [S.l.], 2015.
ARM. System and clock configuration. 2015. Disponvel em: <https:
//www.keil.com/pack/doc/CMSIS/Core/html/group__system__init__gr.html#
ga93f514700ccf00d08dbdcff7f1224eb2>. Acesso em: 8 mai. 2016.
BARABANOV, M. A Linux-based real-time operating system. 36 f. Dissertao (Mestrado
em Cincia da Computao) New Mexico Institute of Mining and Technology, Socorro,
NM, USA, 1997.
BARBALACE, A. et al. Performance comparison of VxWorks, Linux, RTAI, and Xenomai
in a hard real-time application. IEEE Transactions on Nuclear Science, v. 55, n. 1, p.
435439, fev. 2008.
BARR, M.; MASSA, A. Programming Embedded Systems: with C and GNU Development
Tools. 2. ed. Sebastopol: OReilly Media, 2006.
BARRY, R. FreeRTOS - A Free RTOS for small real time embedded systems. [S.l.], 2005.
BUTTAZZO, G. C. Hard Real-Time Computing Systems: Predictable scheduling
algorithms and applications. 3. ed. New York: Springer US, 2011.
CHENG, A. M. K. Real-time systems: Scheduling, analysis, and verification. New Jersey:
Wiley-Interscience, 2002.
CORBET, J.; RUBINI, A.; KROAH-HARTMAN, G. Linux device drivers. 3. ed. [S.l.]:
OReilly, 2005.
CULHAM CENTRE FOR FUSION ENERGY. The tokamak. 2012. Disponvel em:
<http://www.ccfe.ac.uk/tokamak.aspx>. Acesso em: 5 fev. 2016.
Referncias
90
DAVIS, R.; MERRIAM, N.; TRACEY, N. How embedded applications using an RTOS
can stay within on-chip memory limits. In: CITESEER. 12th EuroMicro Conference on
Real-Time Systems. [S.l.], 2000. p. 7177.
DRFLER, T. Notas de aula. Introduction to RTEMS. Puccheim: Embedded Brains
GmbH, 2007.
DUTTA, P. Toolchains. Ann Arbor: University of Michigan, 2012. Lecture.
FARINES, J.-M.; FRAGA, J. da S.; OLIVEIRA, R. S. de. Sistemas de tempo real.
Florianpolis: Universidade Federal de Santa Catarina, 2000.
FREDERICKS, R. Faq: What is a board support package? Wind River, p. 11, ago. 2001.
Disponvel em: <http://www.windriver.com/products/bsp_web/what_is_a_bsp.pdf>.
FREERTOS. Creating a New FreeRTOS Port. 2016. Disponvel em: <http:
//www.freertos.org/FreeRTOS-porting-guide.html>. Acesso em: 8 fev. 2016.
FREERTOS. Creating a New FreeRTOS Project. 2016. Disponvel em: <http:
//www.freertos.org/Creating-a-new-FreeRTOS-project.html>. Acesso em: 8 fev. 2016.
FREERTOS. FreeRTOS FAQ. 2016. Disponvel em: <http://www.freertos.org/FAQMem.
html>. Acesso em: 7 abr. 2016.
FREERTOS. Modifying a FreeRTOS Demo. 2016. Disponvel em: <http://www.freertos.
org/porting-a-freertos-demo-to-different-hardware.html>. Acesso em: 8 fev. 2016.
FREESCALE. FRDM-KL25Z : Kl25z mcu. [S.l.], 2013. Drawing.
FREESCALE SEMICONDUCTOR. FRDM-KL25Z Users Manual. 1. ed. [S.l.], 2012.
FREESCALE SEMICONDUCTOR. KL25 Sub-Family Reference Manual. 3. ed. Tempe,
2012.
FURHT, B. et al. Real-Time UNIX Systems: Design and application guide. [S.l.]: Springer
US, 1991.
HEDLUND, M.; ARONSON, F. Evaluation of real-time operating systems for
safety-critical systems. 126 f. Dissertao (Mestrado em Engenharia Eletrnica)
Jnkping University, Jnkping, 2002.
JOSHI, M. et al. BSP customization and porting of Linux on ARM Cortex based i.Mx6
processor with Yocto build environment. International Journal of Research in Engineering
and Technology, v. 3, n. 5, p. 691696, mai. 2014.
KUMAR, K. E.; KAMARAJU, M.; YADAV, A. K. Porting and BSP customization of
Linux on ARM platform. International Journal of Computer Applications, v. 80, n. 15, p.
3642, out. 2013.
LAMIE, W. E. Keeping your priorities straight: Part 1 - context switching. [s.n.], 2009.
Disponvel em: <http://www.embedded.com/design/testissue/212902706>. Acesso em:
23 jun. 2009.
LEARNING about Kinetis SDK. [s.n.], 2015. Disponvel em: <http://mcuoneclipse.com/
2015/07/20/learning-about-kinetis-sdk/#more-15713>. Acesso em: 10 fev. 2016.
Referncias
91
LI, Q.; YAO, C. Real-Time Concepts for Embedded Systems. Berkeley: CMP Books, 2003.
LOCKE, C. D. Software architecture for hard real-time applications: Cyclic executives vs.
fixed priority executives. The Journal of Real-Time Systems, v. 4, n. 1, p. 3753, mar.
1992.
MARTINS, G. S. Anlise do uso de um sistema operacional de tempo real em um software
desenvolvido para um contador crescente/decrescente com resoluo de 100 ms. 168 f.
Trabalho de Concluso de Curso (Graduao em Engenharia de Controle e Automao)
Universidade Estadual de Campinas, Campinas, 2009.
SCHFER, P. A. Dynamic loading and linking native code on a real-time operating
system. 113 f. Dissertao (Mestrado em Engenharia Eletrnica e Cincia da Computao)
Instituto Tecnolgico de Aeronutica, So Jos dos Campos, 2007.
SHERIDAN-BARBIAN, K. K. A survey of real-time operating systems and virtualization
solutions for space systems. 147 f. Dissertao (Mestrado em Cincia da Computao)
Naval Postgraduate School, Monterey, 2015.
SOARES, M. S. Comparao entre metodologias geis e tradicionais para o
desenvolvimento de software. Journal of Computer Science, v. 3, n. 2, p. 813, nov. 2004.
SOUZA, O. de. Metodologia para porte do sistema operacional Linux para sistemas
embarcados. 78 f. Dissertao (Mestrado em Engenharia de Teleinformtica)
Universidade Federal do Cear, Fortaleza, 2007.
STANGACIU, C. S.; MICEA, M. V.; CRETU, V. I. Hard real-time execution environment
extension for FreeRTOS. IEEE International Symposium on Robotic and Sensors
Environments, p. 124129, out. 2014.
STANKOVIC, J. A. Misconceptions about real-time computing. IEEE Computer, v. 21,
n. 10, p. 1019, out. 1988.
STANKOVIC, J. A.; RAJKUMAR, R. Real-time operating systems. Kluwer Academic
Publishers, v. 28, p. 237253, 2004.
TANENBAUM, A. S. Modern operating systems. 2. ed. New Jersey: Prentice Hall, 2001.
VALVANO, J. W. Embedded microcomputer systems: Real time interfacing. 2. ed. Canad:
Thomson, 2007. 814 p.
VEERABAHU, M. Using Android for embedded systems. [s.n.], 2011. Disponvel em:
<http://www.e-consystems.com/blog/linux-android/?p=457>. Acesso em: 5 fev. 2016.
VINCENT, J. et al. Principles of built-in-test for run-time-testability in component-based
software systems. Software Quality Journal, v. 10, n. 2, p. 115133, set. 2002.
WOLF, M. Computers as Components. 3. ed. Boston: Morgan Kaufmann, 2012.
YOCTO PROJECT. About. 2013. Disponvel em: <https://www.yoctoproject.org/about>.
Acesso em: 5 fev. 2016.
YOUNG, R. Porting a real-time operating system and developing a board support package.
18 f. Trabalho de Concluso de Curso (Graduao em Engenharia da Computao)
University of Evansville, Evansville, IN, USA, 2015.
Apndices
93
94
95
96
97
98
APNDICE B Cdigos
B.1 port.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*
FreeRTOS V8.2.3 - Copyright (C) 2015 Real Time Engineers Ltd.
All rights reserved
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
This file is part of the FreeRTOS distribution.
FreeRTOS is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License (version 2) as published by the
Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception.
***************************************************************************
>>!
NOTE: The modification to the GPL is included to allow you to
!<<
>>!
distribute a combined work that includes FreeRTOS without being
!<<
>>!
obliged to provide the source code for proprietary components
!<<
>>!
outside of the FreeRTOS kernel.
!<<
***************************************************************************
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. Full license text is available on the following
link: http://www.freertos.org/a00114.html
***************************************************************************
*
*
FreeRTOS provides completely free yet professionally developed,
*
*
robust, strictly quality controlled, supported, and cross
*
*
platform software that is more than just the market leader, it
*
*
is the industry's de facto standard.
*
*
*
*
Help yourself get started quickly while simultaneously helping
*
*
to support the FreeRTOS project by purchasing a FreeRTOS
*
*
tutorial book, reference manual, or both:
*
*
http://www.FreeRTOS.org/Documentation
*
*
*
*
***************************************************************************
http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading
the FAQ page "My application does not run, what could be wrong?". Have you
defined configASSERT()?
http://www.FreeRTOS.org/support - In return for receiving this top quality
embedded software for free we request you assist our global community by
participating in the support forum.
http://www.FreeRTOS.org/training - Investing in training allows your team to
be as productive as possible as early as possible. Now you can receive
FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers
APNDICE B. Cdigos
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
99
Ltd, and the world's leading authority on the world's leading RTOS.
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
including FreeRTOS+Trace - an indispensable productivity tool, a DOS
compatible FAT file system, and our tiny thread aware UDP/IP stack.
http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High
Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS
licenses offer ticketed support, indemnification and commercial middleware.
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
engineered and independently SIL3 certified version for use in safety and
mission critical applications that require provable dependability.
1 tab == 4 spaces!
*/
/*----------------------------------------------------------* Implementation of functions defined in portable.h for the ARM CM0 port.
* Modified by: Tiago Ukei
*----------------------------------------------------------*/
/* Scheduler includes. */
#include "FreeRTOS.h"
#include "task.h"
#include "portmacro.h"
#include "MKL25Z4.h"
/* Constants required to manipulate
#define portNVIC_SYSTICK_CLK
#define portNVIC_SYSTICK_INT
#define portNVIC_SYSTICK_ENABLE
#define portNVIC_PENDSVSET
#define portNVIC_PENDSV_PRI
#define portNVIC_SYSTICK_PRI
the NVIC. */
(1UL << 2UL)
(1UL << 1UL)
1UL
(1UL << 28UL)
(255UL)
(255UL)
//processor clock
//enables systick interrupt
//enables the counter
//set pending SV bit
//pending SV priority
//systick configuration
APNDICE B. Cdigos
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
*pxTopOfStack =
pxTopOfStack--;
*pxTopOfStack =
pxTopOfStack -=
*pxTopOfStack =
pxTopOfStack -=
100
( StackType_t ) pxCode; /* PC */
( StackType_t ) prvTaskExitError;
/* LR */
5; /* R12, R3, R2 and R1. */
( StackType_t ) pvParameters;
/* R0 */
8; /* R11..R4. */
return pxTopOfStack;
}
/*-----------------------------------------------------------*/
static void prvTaskExitError( void )
{
/* A function that implements a task must not exit or attempt to return to
its caller as there is nothing to return to. If a task wants to exit it
should instead call vTaskDelete( NULL ).
Artificially force an assert() to be triggered if configASSERT() is
defined, then stop here so application writers can catch the error. */
configASSERT( uxCriticalNesting == ~0UL );
portDISABLE_INTERRUPTS();
for( ;; );
}
/*-----------------------------------------------------------*/
void vPortStartFirstTask( void )
{
/* The MSP stack is not reset as, unlike on M3/4 parts, there is no vector
table offset register that can be used to locate the initial stack value.
Not all M0 parts have the application vector table at address 0. */
__asm volatile(
"
ldr r2, pxCurrentTCBConst2 \n" /* Obtain location of pxCurrentTCB. */
"
ldr r3, [r2]
\n"
"
ldr r0, [r3]
\n" /* The first item in pxCurrentTCB is the task top ofstack. */
"
add r0, #32
\n" /* Discard everything up to r0. */
"
msr psp, r0
\n" /* This is now the new top of stack to use in the task. */
"
movs r0, #2
\n" /* Switch to the psp stack. */
"
msr CONTROL, r0
\n"
"
pop {r0-r5}
\n" /* Pop the registers that are saved automatically. */
"
mov lr, r5
\n" /* lr is now in r5. */
"
cpsie i
\n" /* The first task has its context and interrupts canbe enabled. */
"
pop {pc}
\n" /* Finally, pop the PC to jump to the user defined task code. */
"
\n"
"
.align 2
\n"
"pxCurrentTCBConst2: .word pxCurrentTCB
"
);
}
/*-----------------------------------------------------------*/
/*
* See header file for description.
*/
BaseType_t xPortStartScheduler( void )
{
/* Make PendSV, CallSV and SysTick the same priority as the kernel. */
APNDICE B. Cdigos
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
101
NVIC_SetPriority(PendSV_IRQn,portNVIC_PENDSV_PRI);
NVIC_SetPriority(SysTick_IRQn,portNVIC_SYSTICK_PRI);
/* Start the timer that generates the tick ISR.
here already. */
prvSetupTimerInterrupt();
/* Initialize the critical nesting count ready for the first task. */
uxCriticalNesting = 0;
/* Start the first task. */
vPortStartFirstTask();
/* Should never get here as the tasks will now be executing! Call the task
exit error function to prevent compiler warnings about a static function
not being called in the case that the application writer overrides this
functionality by defining configTASK_RETURN_ADDRESS. */
prvTaskExitError();
/* Should not get here! */
return 0;
}
/*-----------------------------------------------------------*/
void vPortEndScheduler( void )
{
/* Not implemented in ports where there is nothing to return to.
Artificially force an assert. */
configASSERT( uxCriticalNesting == 1000UL );
}
/*-----------------------------------------------------------*/
void vPortYield( void )
{
/* Set a PendSV to request a context switch. */
SCB->ICSR |= portNVIC_PENDSVSET;
/* Barriers are normally not required but do ensure the code is completely
within the specified behaviour for the architecture. */
__asm volatile( "dsb" );
__asm volatile( "isb" );
}
/*-----------------------------------------------------------*/
void vPortEnterCritical( void )
{
portDISABLE_INTERRUPTS();
uxCriticalNesting++;
__asm volatile( "dsb" );
__asm volatile( "isb" );
}
/*-----------------------------------------------------------*/
void vPortExitCritical( void )
{
configASSERT( uxCriticalNesting );
uxCriticalNesting--;
if( uxCriticalNesting == 0 )
{
portENABLE_INTERRUPTS();
APNDICE B. Cdigos
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
102
}
}
/*-----------------------------------------------------------*/
uint32_t ulSetInterruptMaskFromISR( void )
{
__asm volatile(
" mrs r0, PRIMASK
\n"
" cpsid i
\n"
" bx lr
"
);
/* To avoid compiler warnings.
return 0;
}
/*-----------------------------------------------------------*/
void vClearInterruptMaskFromISR( uint32_t ulMask )
{
__asm volatile(
" msr PRIMASK, r0
\n"
" bx lr
"
);
/* Just to avoid compiler warning. */
( void ) ulMask;
}
/*-----------------------------------------------------------*/
void xPortPendSVHandler( void )
{
/* This is a naked function. */
__asm volatile
(
"
mrs r0, psp
"
"
ldr r3, pxCurrentTCBConst
"
ldr r2, [r3]
"
"
sub r0, r0, #32
registers. */
"
str r0, [r2]
"
stmia r0!, {r4-r7}
saved automatically. */
"
mov r4, r8
"
mov r5, r9
"
mov r6, r10
"
mov r7, r11
"
stmia r0!, {r4-r7}
"
"
push {r3, r14}
"
cpsid i
"
bl vTaskSwitchContext
"
cpsie i
"
pop {r2, r3}
*/
"
"
ldr r1, [r2]
\n"
\n"
\n" /* Get the location of the current TCB. */
\n"
\n"
\n" /* Make space for the remaining low \n" /* Save the new top of stack. */
\n" /* Store the low registers that are not \n" /* Store the high registers. */
\n"
\n"
\n"
\n"
\n"
\n"
\n"
\n"
\n"
\n" /* lr goes in r3. r2 now holds tcb pointer. \n"
\n"
APNDICE B. Cdigos
279
"
280
281
282
283
284
285
286
287
"
"
"
"
"
"
"
"
288
289
"
"
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
"
"
"
bx r3
"
"
.align 2
"pxCurrentTCBConst: .word pxCurrentTCB
);
103
\n" /* The first item in pxCurrentTCB is the \n" /* Move to the high registers. */
\n" /* Pop the high registers. */
\n"
\n"
\n"
\n"
\n"
\n" /* Remember the new top of stack for the \n"
\n" /* Go back for the low registers that are \n" /* Pop low registers.
\n"
\n"
\n"
\n"
"
*/
}
/*-----------------------------------------------------------*/
void xPortSysTickHandler( void )
{
uint32_t ulPreviousMask;
ulPreviousMask = portSET_INTERRUPT_MASK_FROM_ISR();
{
/* Increment the RTOS tick. */
if( xTaskIncrementTick() != pdFALSE )
{
/* Pend a context switch. */
SCB->ICSR |= portNVIC_PENDSVSET;
}
}
portCLEAR_INTERRUPT_MASK_FROM_ISR( ulPreviousMask );
}
/*-----------------------------------------------------------*/
/*
* Setup the systick timer to generate the tick interrupts at the required
* frequency.
*/
void prvSetupTimerInterrupt( void )
{
/* Configure SysTick to interrupt at the requested rate. */
SysTick->LOAD = ( configCPU_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;
SysTick->CTRL = portNVIC_SYSTICK_CLK | portNVIC_SYSTICK_INT | portNVIC_SYSTICK_ENABLE;
}
/*-----------------------------------------------------------*/
APNDICE B. Cdigos
104
B.2 led_driver.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/*
* led_driver.c
*
* Contains the functions that handle the LED
*
* Created on: 08/05/2016
Author: Tiago Ukei
*
*/
#include "MKL25Z4.h"
#include "led_driver.h"
void vLedInit(led_t led) {
SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK;
switch(led) {
case LEDRGB_RED:
PORTB_PCR18 = PORT_PCR_MUX(1);
GPIOB_PDDR |= LEDRGB_RED_DIR;
GPIOB_PSOR |= LEDRGB_RED_SET;
break;
case LEDRGB_GREEN:
PORTB_PCR19 = PORT_PCR_MUX(1);
GPIOB_PDDR |= LEDRGB_GREEN_DIR;
GPIOB_PSOR |= LEDRGB_GREEN_SET;
break;
default:
break;
}
}
void vLedToggle(led_t led) {
switch(led) {
case LEDRGB_RED:
GPIOB_PTOR |= LEDRGB_RED_SET;
//toggle red led
break;
case LEDRGB_GREEN:
GPIOB_PTOR |= LEDRGB_GREEN_SET; //toggle green led
break;
default:
break;
}
}
APNDICE B. Cdigos
105
B.3 led_driver.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
* led_driver.h
*
* Header file for led.c
*
* Created on: 08/05/2016
Author: Tiago Ukei
*
*/
#ifndef APPLICATION_INCLUDES_LED_DRIVER_H_
#define APPLICATION_INCLUDES_LED_DRIVER_H_
#define INPUT
#define OUTPUT
0
1
#define LEDRGB_RED_DIR
#define LEDRGB_RED_SET
#define LEDRGB_GREEN_DIR
#define LEDRGB_GREEN_SET
106
APNDICE C Artigos
C.1 CBA 2016
Artigo submetido ao SBA para avaliao, com o objetivo de apresent-lo no XXI
Congresso Brasileiro de Automtica.
Laborat
orio de Computac
ao Avancada, Controle e Sistemas Embarcados - FEM
Universidade Estadual de Campinas - UNICAMP
Campinas, SP, Brasil
Emails: tiago.ukei@gmail.com, dloubach@fem.unicamp.br
Abstract Real-time embedded systems have become more and more complex, requiring the development
of more reliable and more efficient code. Although the testing stage of these systems has been improved in
the past few years, it is not able to simulate all the possible conditions to which the system will be exposed
during its lifecycle, making it necessary to develop techniques and methodologies in order to increase quality
and reliability of such systems. Despite the vast research performed on this subject, a unified and systematic
method for porting a real-time operating system on a hardware platform is hardly found in the literature. This
article presents, therefore, a methodology with this purpose, which was then tested and validated through porting
FreeRTOS on an ARM platform. We suggest the use of our methodology in future works for further testing and
possible improvements.
Keywords
Introdu
c
ao
tempo real e sua importancia, bem como a motivacao e o objetivo deste trabalho. A Secao 2 contem uma revisao de literatura, com as principais
definicoes e trabalhos relacionados. Na Sec
ao 3
e apresentada nossa proposta de metodologia de
porting de um RTOS em forma de um fluxograma
de processo, o qual e utilizado para a implementacao de um port especfico, descrita na Sec
ao 4. A
Secao 5 apresenta os resultados obtidos do experimento e, por fim, na Secao 6, sao apresentadas as
conclusoes e principais contribuicoes deste artigo.
2
Revis
ao de literatura
Os sistemas embarcados com hardware relativamente simples (e.g., relogio digital), onde n
ao se
justifica a adocao de um sistema operacional devido ao overhead introduzido na aplicacao, s
ao geralmente implementados com base em uma arquitetura bare metal. Em contrapartida, aplicac
oes
mais complexas, como um sistema avionico, requerem um gerenciamento mais preciso do escalonamento das tarefas, o que justifica a utilizac
ao
de um RTOS.
De acordo com Barabanov (1997, p. 1), um
sistema operacional de tempo real e um sistema
operacional capaz de garantir os requisitos de
tempo dos processos sob seu controle. Ele deve
escalonar a execucao dos programas de maneira
temporizada, gerenciar os recursos do sistema e
prover suporte basico para sincronizacao, comunicacao, temporizacao precisa, gerenciamento de
dispositivos de entrada/sada (E/S) e uma fundacao consistente para o desenvolvimento do c
odigo
de aplicativo (Li and Yao, 2003; Stankovic and
Rajkumar, 2004).
Para que o RTOS comunique-se de forma
adequada com o hardware, e necessario um conjunto de drivers especficos para os componentes
de hardware do sistema, conhecido como board
support package (BSP) (Li and Yao, 2003). O
BSP e um componente de software que faz parte
da imagem executavel, assim como uma serie de
outros modulos, como mostra a Figura 1.
Aplicativo
Software
uma implementac
ao do c
odigo de suporte especfico para uma dada placa que se conforma a um
dado sistema operacional, ou seja, o BSP fornece
o suporte mnimo para carregar o sistema operacional e contem os device drivers para todos os dispositivos no sistema target, disponibilizando uma
abstrac
ao do hardware para as camadas mais altas do software. Segundo Hedlund and Aronson
(2002), a estrutura de um BSP inclui a configurac
ao da CPU, da mem
oria (stack, heap), das interrupc
oes de hardware, do timer do escalonador do
sistema e os drivers de dispositivos.
O desenvolvimento de um BSP n
ao e uma tarefa trivial, dependendo do nvel de complexidade
do hardware. Para escrever um BSP, e necess
ario
conhecer a arquitetura de hardware do target, o
fluxo de dados, o mapa de mem
oria, o mapa de
interrupc
oes, alem da linguagem de montagem especfica para o microprocessador. Boa parte dos
desenvolvedores, no entanto, utiliza o BSP de um
port anteriormente realizado para uma plataforma
de hardware similar e faz as devidas adaptac
oes no
c
odigo para a aplicac
ao especfica. Em geral, os
registradores necess
arios para o port s
ao listados
nesses BSPs, juntamente com uma sequencia para
inicializar corretamente o hardware do target (Li
and Yao, 2003).
A metodologia empregada por Young (2015)
para realizar o port do FreeRTOS em uma plataforma de desenvolvimento FRDM-KL25Z resumese nos seguintes passos:
1. Pesquisar sobre a arquitetura do processador
e o esquema de gerenciamento de mem
oria.
Definir as constantes e macros apropriadas
nos arquivos de cabecalho, necess
arias para
a configurac
ao do clock, tamanho do heap e
da pilha, nveis de prioridade, entre outras
definic
oes;
2. Utilizando o c
odigo de um port anterior para
uma plataforma semelhante, realizar as modificac
oes necess
arias no arquivo port.c, implementando inicialmente a func
ao de inicializac
ao da pilha (pxPortInitialiseStack());
3. Determinar quais func
oes s
ao dependentes de
pxPortInitialiseStack() e implement
a-las
de forma incremental ate que seja possvel
compilar o FreeRTOS;
ETHERNET
PORTA SERIAL
Hardware
BDM / JTAG
TIMER
Figura 1: Componentes de software de uma imagem executavel. Fonte: Li and Yao (2003).
Kumar et al. (2013, p. 36) definem BSP como
pelo autor para que o port fosse realizado com sucesso envolvem a implementacao das func
oes de
gerenciamento da troca de contexto e das rotinas
de tratamento de interrupcoes, alem dos drivers de
necess
dispositivos e configuracao do clock. E
ario
ainda configurar adequadamente algumas macros
para a correta inicializacao e utilizacao da pilha,
tais como as que definem a direcao de crescimento,
o tamanho mnimo e o alinhamento.
No trabalho apresentado por Souza (2007) e
desenvolvida um metodologia iterativa para realizar o porting do Linux em sistemas embarcados.
A metodologia proposta consiste, basicamente, na
deteccao das partes dos codigos-fonte que devem
ser modificadas para que seja realizado o port
do sistema operacional para a nova plataforma,
respeitando-se os passos apresentados na Figura 2
(Souza, 2007, p. 52).
um RTOS qualquer em uma plataforma de hardware, sem considerar suas peculiaridades. A Figura 3 mostra o fluxograma do processo de porting
proposto. Os pontos mais importantes desta metodologia ser
ao discorridos adiante.
T0-0
T0-1
N0
N1
T1-0
T2-1
T2-0
T0-2
N2
T1-2
T2-3
T3-4
N3
N4
T4-3
T3-3
A nossa metodologia baseou-se em um estudo previamente realizado de um BSP existente e funcional fornecido pelo KSDK (Kinetis Software
Development Kit) para o port do FreeRTOS em
uma plataforma FRDM-KL25Z, utilizando-se o
Processor Expert, que e uma ferramenta integrada
ao ambiente de desenvolvimento para auxiliar na
geracao automatica de codigo. Apos analisadas a
estrutura e a implementacao do codigo, foi desenvolvida uma metodologia que visa fornecer os passos, em aspecto geral, para a realizacao do port de
Inicializa
c
ao do hardware: compreende os
codigos que sao essenciais para a inicializacao do sistema, porem sao independentes do
RTOS sendo portado, tais como o vetor de
inicializacao e as funcoes de configurac
ao do
clock e PLL (Phase Locked Loop).
Port do RTOS: sao os arquivos de configuracao que adaptam o RTOS para ser executado na plataforma de hardware especfica.
Drivers de dispositivos: e a parte do BSP
adicional, necessaria para a utilizacao dos perifericos pelo aplicativo.
o controlador de interrupc
ao, os timers e demais
perifericos. Entre essas informac
oes, destacam-se
o endereco dos registradores, os bits de configurac
ao e os modos de operac
ao de cada dispositivo.
Um arquivo de cabecalho contendo o mapeamento
dos registradores dos perifericos e geralmente fornecido pelo fabricante do microcontrolador ou desenvolvedores third party.
Para realizar o port do sistema operacional, e
necess
ario ainda consultar o manual de porting e a
documentac
ao fornecida pelos desenvolvedores do
RTOS, que servem de guia para a implementacao
da interface completa para que o sistema operacional se comunique adequadamente com o hardware.
Em geral, essa interface e composta por uma lista
de constantes que devem ser definidas e um conjunto de func
oes que devem ser implementadas.
Os passos subsequentes da metodologia sao
necess
arios para verificar e validar o port realizado, apesar de n
ao fazerem parte do processo de
porting propriamente dito. O passo ID 7, expandido na Figura 5, consiste em implementar um codigo mnimo de aplicativo e a func
ao main() para
verificar se o port foi realizado com sucesso.
O passo ID 8 equivale `
a gerac
ao da imagem
execut
avel e carregamento no target. Em caso de
erro de compilac
ao, deve-se realizar as correc
oes
necess
arias (ID 9) e recompilar o c
odigo, em um
processo iterativo, ate que se obtenha a imagem
execut
avel com exito.
Por fim, deve-se testar e depurar o programa
(ID 10) para verificar se o sistema atende aos
requisitos funcionais e, principalmente, temporais, validando o processo de porting do RTOS.
Recomenda-se fortemente que esse processo seja
iterativo e implementado gradativamente, isto e,
deve-se compilar e testar o programa inicialmente
com uma estrutura b
asica para seu funcionamento
e ent
ao adicionar, de forma gradual, as funcionalidades do RTOS no programa de usu
ario.
4
Teste e valida
c
ao da metodologia
Para validac
ao da metodologia proposta, foi realizado o port do FreeRTOS em uma plataforma
FRDM-KL25Z e de um programa aplicativo basico capaz de testar algumas funcionalidades do
eeee
eeee
eeeeeeeee
eeee
eeeeeeee o
eeeer e ee
1ee1ee11
1ee1ee12
1ee1ee13
e e eee ee ee e
eeee eeeee e ee e
eee e eeee e
eeeee
...
e e eee ee ee e
eeee eee o e e
ee eeee. e eeee e
eeeee ...
e e eee ee eee
e
eee e ee eeee e
ee
e e e e
e eeee e ee
e e e e
e e ee ee .
nnnnnnnnnnn
1 iee1e
e1
snnnssss
snnsnsnCCnss
snssnss
snnnssss
snssnss
sngs
sngs
sngs
SsssSSSs
ssn
nnnnsss
nnsnnens
CnsnsCCCnCCCC
CsgCnng
oooooooooooooooo
oo ooo
o ooooo o o ooo
oooooooo
o oooo o ooo
oo%%o % %ooooo %%
o o% oooooooooo
o% %oooo %oooo o o
%o oo oooo oo ooo o o
ooo%o o% ooo
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaahahaaaaahhaaaaahaaaaahaahaah
sssssssssssssssssssssssssssssss
annaaaaaaaahhdaaaaaaahhaaaa
naaaaandaaaahhdaaaaaaahhtth2444
tndadhgdhdatdaaaahaaadhd...
hdatndhgdtndadaaahhaaadhdaaa
annaaaaaaaahhnaaaaaahhaaadaaadaa
annaaaaaaaahhnaaaaaahhhaah1
annaaaaaaaahhnaaaaaahhhaah2
dhaadaaadaaahaaadadhdaaa
haah1daaaaddhdaaa
haah1daaahdnddaaaaaaaahdaaaa.dhd...
haah2daaaaddhdaaa
haah2daaahdnddaaaaaaaahdaaa.dhdaaa
annaaaaaaaahhnaaaaaahhaaaa
annaaaaaaaahhdaaaaaaahhgaaaghgnaaagaa
aaanaaanhaaah.naaanhaaa.aa...
ddaaaaaaadahaahaddhdaaa
ddaaaaaaadanaaanhaaaddhdaaa
ddaaaaaaadadaaanhaaaaaddhdaaa
aaaaddhaaa
naaaaandaaaahhnaaaaaahhaaaaaandtth2444
ddaaaddaaaaaddhdaaa
gaaaad.aaaaaaddhdaaa
hagaaaadngddhdaaa
naaaaandaaaahhnaaaaaahha*aaaadtth2444
gaaaghgnhhnaaaahaahhtaataaahhhaand1
aaaaad7
aaaaad8
gaaaghgndnaaaaadgaaaa
nddaaataaaaaddhdaaaa.
ddaaagaaadndhdaaa.dhdaaa
ddaaadaaaaaaaaaaaaahaddhdaaa
.daaataagaaa.aannadaddhaadada
n*aaaaaaaaaaaahhaaaat2da
n*aaaadaaaddhdaaa
n*aaaaaaaaaaaahhnaaaaddhdaaa
gaaaghgnhhnaaaahaahhaaaaa.ttndtaahhnaaaaaaaa
gaaaghgnhhnaaaahaahhaaaaa.ttndtaahhnaaa
n.daaadaaaaaaaaanaaahdn.hanggnaaahhnaaahh*nada.*n.aaaahhaahgaaaaaaada*nddaaaaaaaaahdaaa.dhnaaahh*nada.
nadhaahd.aadaaaaddhdaaa
ddaaanda.aaaaaaddhdaaa
ddaaanaaaagaaaahaahddhdaaa
.daaanaaaanahaaaaaaddhaaaah*nada
ddaaadaanahaaaaaaddhdaaa
ddaaadaaaaddhdaaa
ddaaadaaaaaaaaaaaaaddhdaaa
ddaaad.aaaaaaaaaaddhdaaa
aanaadaaaaaanataahgaaadngddhaaaaaaaaaaaaa
daaaaadaaaaaanataahgaaadngdaataahhaaaaaaaaaaaaadhdaaa
daaandd.aaaaaaddhdaaa
n*ahaahd.aaaaaaddhdaaa
nadnaaanhaaaadaaaaaanaddhdaaa
naaanhaatdtggth.haaa
naaahdatdddgdghdtnhaaa
naaaadhddahdtttdthhaaa
naaatatdhdhadhaaa
naaadddhhddhdaaa
naaadddhhdgggtddngddhdaaa
naaadthdntdha.dttddngddhdaaa
naaahdnaahdddthdgghdhnddhdaaa
naaadtaahdddthdgghdhnddhdaaa
naaadthdgdagdhdaahddhdaaa
naaadtdhdagdhdaahddhdaaa
naaahantdghtahdgtddgghgddhdaaa
naaahantdghtahdgtddhdaaa
naaatgdddhdaaa
naaandhddthdgghdhdtantdgggtddngddhdaaa
naaaahdagddthdgghdhdtantdgggtddngddhdaaa
Resultados
Os resultados obtidos seguindo a metodologia proposta podem ser considerados satisfatorios, visto
que os requisitos do sistema foram atendidos. Esses requisitos incluem restricoes temporais bem
definidas, tratamento de interrupcoes e gerenciamento de recursos compartilhados, bem como
acesso a perifericos da plataforma de desenvolvimento, conforme o diagrama de requisitos apresentado na Figura 6, o que confere ao sistema
varias caractersticas dos sistemas embarcados de
tempo real.
importante ressaltar tambem que o
E
footprint de memoria obtido no port seguindo a
metodologia (18.556 bytes) foi reduzido em relacao ao obtido pelo Processor Expert (20.872
bytes). Essa reducao deve-se ao fato de o programa ser customizado para a aplicacao, sendo
retirada boa parte de codigo desnecessario.
6
Conclus
oes
Como apontado na Secao 5, a metodologia apresentada neste artigo mostrou-se adequada para o
porting realizado, satisfazendo todos os requisitos do sistema. Por meio dos resultados obtidos,
pode-se observar que os deadlines das tarefas foram cumpridos, o que nos permite concluir que
o software foi adequadamente acoplado ao hardware, utilizando suas funcoes de clock, timers, controladores de interrupcao e perifericos.
Agradecemos `
a Universidade Estadual de Campinas e `
a Faculdade de Engenharia Mec
anica por
fornecerem os meios necess
arios para o desenvolvimento deste trabalho.
Refer
encias
Abadie, A. K. (2008). Adaptac
ao da ferramenta
Rhapsody para modelagem de aplicac
oes embarcadas de tempo real sobre RTEMS, Trabalho de conclus
ao de curso (graduac
ao em
engenharia eletr
onica), Instituto Tecnol
ogico
de Aeron
autica, S
ao Jose dos Campos.
Barabanov, M. (1997). A Linux-based real-time
operating system, Dissertac
ao (mestrado em
ciencia da computac
ao), New Mexico Institute of Mining and Technology, Socorro, NM,
USA.
Buttazzo, G. C. (2011). Hard Real-Time Computing Systems, 3 edn, Springer US, New York.
Hedlund, M. and Aronson, F. (2002). Evaluation of real-time operating systems for safetycritical systems, Dissertac
ao (mestrado em
engenharia eletr
onica), J
onk
oping University,
J
onk
oping.
Kumar, K. E., Kamaraju, M. and Yadav, A. K.
(2013). Porting and BSP customization of Linux on ARM platform, International Journal
of Computer Applications 80(15): 3642.
Li, Q. and Yao, C. (2003). Real-Time Concepts for
Embedded Systems, CMP Books, Berkeley.
Sch
afer, P. A. (2007). Dynamic loading and linking
native code on a real-time operating system,
Dissertac
ao (mestrado em engenharia eletronica e ciencia da computac
ao), Instituto Tecnol
ogico de Aeron
autica, S
ao Jose dos Campos.
Souza, O. (2007). Metodologia para porte do sistema operacional Linux para sistemas embarcados, Dissertacao (mestrado em engenharia
de teleinformatica), Universidade Federal do
Ceara, Fortaleza.
Stankovic, J. A. and Rajkumar, R. (2004). Realtime operating systems, Kluwer Academic
Publishers 28: 237253.
Young, R. (2015). Porting a real-time operating
system and developing a board support package, Trabalho de conclusao de curso (graduacao em engenharia da computacao), University of Evansville, Evansville, IN, USA.