Este documento apresenta os detalhes de uma disciplina de programação de sistemas embarcados, incluindo informações sobre local e horário das aulas, datas importantes, referências bibliográficas, tópicos abordados como linguagem C, hardware utilizado e ambiente de programação, e conceitos como diretivas de compilação e uso de arquivos .c e .h.
1. Programação de sistemas embarcados: Introdução
Prof. Rodrigo Maximiano Antunes de Almeida
Universidade Federal de Itajubá
rodrigomax@unifei.edu.br
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 1 / 25
2. Dados Importantes
Teórica:
Local ⇒ Sala I.2.1.11
Horário ⇒ 15:45-17:35 (ter)
Laboratório:
Local ⇒ Sala LEC I
Horário ⇒
P1: 8:00-9:45 (sex) ELT024
P2: 10:15-12:00 (sex) ELT024
P3: 15:50-17:30 (qui) ELT024
P1: 13:30-15:10 (ter) ELT802
Levar a placa + adaptador de tomada
Datas Importantes *:
Prova 01 ⇒ 25/09
Prova 02 ⇒ 11/12
Sub ⇒ 18/12
* Datas
Todas as datas estão sujeitas a alterações
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 2 / 25
3. Referências Bibliográcas
Notas de Aula de Programação de Sistemas Embarcados (ELT024)
Almeida, Rodrigo M.A., Unifei 2013*
Embedded systems: design and applications with the 68HC12 and
HCS12. BARRETT,Steven F; PACK, Daniel J., Prentice Hall, 2005
C completo e total. Herbert Schildt. Makron Books. 3
a Edição. 1997.
The art of Programming Embedded Systems, Ganssle, J. Academic
Press, 1991
*Erros na apostila
Cada erro vale 1 (um) ponto na média, saturado em 10 pontos.
Os erros encontrados devem ser enviados via e-mail:
rodrigomax@unifei.edu.br/rmaalmeida@gmail.com indicando lugar do erro e número de
matrícula do aluno.
Será considerado apenas o primeiro e-mail.
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 3 / 25
5. Tópicos da Disciplina
Linguagem C
Hardware utilizado
Ambiente de programação
Programação em C para sistemas embarcados
Indentação e padrão de escrita
Comentários
Arquivos .c e .h
Diretivas de compilação
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 5 / 25
6. Introdução
Linguagem C
Lógica de Programação
é necessária para as pessoas que desejam trabalhar com
desenvolvimento de programas e sistemas
permite denir uma sequência natural de atividades com a intenção de
atingir um objetivo
Lógica de Programação
É a técnica de encadear pensamentos em uma sequência lógica para atingir
um determinado objetivo.
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 6 / 25
10. Introdução
Hardware Utilizado
Kit de desenvolvimento PIC18f4550
1 display LCD 2 linhas por 16 caracteres
4 displays de 7 segmentos multiplexados
8 leds ligados ao mesmo barramento dos displays
16 mini switches organizadas em formato matricial 4x4
1 sensor de temperatura LM35C
1 resistência de aquecimento ligada à uma saída PWM
1 buzzer ligada à uma saída PWM
1 motor DC tipo ventilador à uma saída PWM
1 canal de comunicação serial padrão RS-232
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 10 / 25
11. Introdução
Ambiente de Programação
Ferramentas a serem utilizadas:
IDE: MPLAB 8.92 - Proprietário
Compilador: SDCC 2.9.0 (win32) - GPL
Linker/Assembler: GPUtils 0.13.7 (win32) - GPL
Plugin MPLAB: sdcc-mplab 0.1 - GPL
Cuidado
O processo de instalação exige certos cuidados. Referenciem pela apostila.
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 11 / 25
12. Linguagem C
Indentação e padrão de escrita
O estilo adotado é conhecido como estilo Allman, bsd (no emacs)
ou ANSI.
Todos os documentos do padrão ANSI C utilizam este estilo.
Apesar disto o padrão ANSI C não especica um estilo para ser usado.
Atenção
Detalhes não são importantes. A coerência dentro do projeto sim.
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 12 / 25
13. Linguagem C
Comentários
Comentários são textos no meio do programa fonte com a intenção de
explicar ou esclarecer um trecho do código
1 #include s t d i o . h
2 #define DIST 260 // d i s t â n c i a entre SP e I t a
3 int main ( int argc , char* argv [ ] )
4 {
5 /* esse programa s e r v e para
6 mostrar como se i n s e r e comentários */
7 printf ( São Paulo está %d Km de Itajubá , DIST ) ;
8 return 0 ;
9 }
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 13 / 25
14. Linguagem C
Arquivos .c e .h
Arquivo de código (code)
terminado com a extensão .c
contém a implementação do código
é compilado gerando um arquivo .o
Arquivo de cabeçalho (header)
terminado com a extensão .h
contém apenas denes e protótipos
não é compilado
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 14 / 25
15. Linguagem C
Arquivos .c e .h
1 // v a r i á v e l usada apenas dentro deste arquivo
2 static char temp ;
3 // v a r i á v e l que s erá usada também f o r a do arquivo
4 static char valor ;
5 // funções usadas dentro e f o r a do arquivo
6 void MudaDigito ( char val ) {
7 valor = val ;
8 }
9 char LerDigito ( void) {
10 return valor ;
11 }
12 void InicializaDisplays ( void) {
13 // código da função
14 }
15 // função usada apenas dentro deste arquivo
16 void AtualizaDisplay ( void) {
17 // código da função
18 }
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 15 / 25
16. Linguagem C
Arquivos .c e .h
1 #ifndef VAR_H
2 #define VAR_H
3 void MudaDigito ( char val ) ;
4 char LerDigito ( void) ;
5 void InicializaDisplays ( void) ;
6 #endif //VAR_H
Atenção
Não existe a função AtualizaDisplay()
A variável digito só pode ser lida ou gravada pelas funções
MudarDigito() e LerDigito()
Cuidado com o overhead de funções
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 16 / 25
17. Linguagem C
Diretivas de compilação
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 17 / 25
18. Linguagem C
Diretivas de compilação
As diretivas de compilação são instruções dadas ao compilador.
Elas não são executadas.
As diretivas de compilação começam com um sinal #, conhecido
como jogo da velha ou hash.
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 18 / 25
19. Linguagem C
#dene
A diretiva #dene é utilizada para que o código fonte seja modicado
antes de ser compilado.
1 #define CONST 15
2 void main ( void)
3 {
4 printf ( %d , CONST * 3 ) ;
5 }
7 // depois de compilado
8 void main ( void)
9 {
10 printf ( %d , 15 * 3 ) ;
11 //é p o s s í v e l : p r i n t f (%d , 45) ;
12 }
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 19 / 25
20. Linguagem C
#dene
Função Original Opções de uso com o #dene
Resultado
na Tela
1 void MostraSaidaPadrao ( ) {
2 #ifdef PADRAO Serial
3 char * msg = SERIAL ;
4 #else
5 char * msg = LCD ;
6 #endif
7 printf ( msg ) ;
8 }
1 #include s t d i o . h
2 #define PADRAO S e r i a l
3 void main ( void)
4 {
5 MostraSaidaPadrao ( ) ;
6 }
SERIAL
1 #include s t d i o . h
2 #define PADRAO LCD
3 void main ( void)
4 {
5 MostraSaidaPadrao ( ) ;
6 }
LCD
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 20 / 25
21. Linguagem C
#ifdef, #ifndef, #else e #endif
1 void ImprimirTemp ( char valor ) {
2 #ifdef LCD
3 Imprime_LCD ( valor )
4 #else
5 if ( valor 3 0 ) {
6 led = 1 ;
7 } else{
8 led = 0 ;
9 }
10 #endif //LCD
11 }
Funcionamento
No momento da compilação o pré-compilador irá vericar se a tag LCD foi denida em algum
lugar. Em caso positivo o pré-compilador irá deixar tudo que estiver entre o #ifdef e o #else e
retirará tudo que está entre o #else e o #endif.
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 21 / 25
22. Linguagem C
Referência circular
A função LerTemperatura() faz um teste: se o valor for maior que um
patamar chama a função EnviaSerial() com o código 0x30.
1 #include serial.h
2 char LerTemperatura ( void) ;
3 void AjustaCalor ( char val ) ;
A função LerSerial() recebe um valor e repassa para a função AjustaCalor().
1 #include temp.h
2 char LerSerial ( void) ;
3 void EnviaSerial ( char val ) ;
ELT024 Programação de sistemas embarcados: Introduçãorodrigomax@unifei.edu.br 22 / 25