0% acharam este documento útil (0 voto)
15 visualizações49 páginas

Aula 01 - Sistemas Embarcados

Sistemas embarcados são sistemas dedicados e microprocessados com hardware simplificado e baixo custo, enfrentando desafios como mão de obra qualificada e integração de hardware e software. O curso abrange programação em C, compilação e uso de ferramentas como MPLABX e PICSimLab, além de conceitos de pré-processamento e definição de funções. A função main é crucial em sistemas embarcados, sendo a primeira a ser executada e geralmente implementada em loops infinitos para operação contínua.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
15 visualizações49 páginas

Aula 01 - Sistemas Embarcados

Sistemas embarcados são sistemas dedicados e microprocessados com hardware simplificado e baixo custo, enfrentando desafios como mão de obra qualificada e integração de hardware e software. O curso abrange programação em C, compilação e uso de ferramentas como MPLABX e PICSimLab, além de conceitos de pré-processamento e definição de funções. A função main é crucial em sistemas embarcados, sendo a primeira a ser executada e geralmente implementada em loops infinitos para operação contínua.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Sistemas embarcados

Prof. Décio Rennó


O que é um
sistema
embarcado?
Sistema embarcado?

Sistema dedicado

Microprocessado

Hardware simplificado

Baixo custo

Recursos escassos
O que é um sistema embarcado?
• Sistema dedicado
O que é um sistema embarcado?
• Microprocessado

Microprocessador
O que é um sistema embarcado?
• Hardware simplificado
• Baixo custo
• Recursos escassos
Sistemas embarcados
• Desafios:
• Mão de obra Computação

qualificada
• Conhecimento em
várias áreas Comunicação Eletrônica

• Projeto em times Sistemas


• Hardware x Software Embarcados
• Normas
• Concorrência
Segurança Confiabilidade
Projeto de sistemas embarcados

Circuito eletrônico

Documentação

Software
Sistemas embarcados

Raspberry Pi Smart Phone


FPGA
Aplicações
Planejamento do
curso
Referências bibliográficas
• Programação de Sistemas Embarcados.
Almeida, R.M.A., Moraes, C.H.V, Seraphim
T.F.P., Elsevier 2016

• C completo e total. Herbert Schildt. Makron


Books. 3a Edição. 1997.

• Datasheets e manuais
Laboratório

Harware e software utilizados


Kit de desenvolvimento

Módulo Exsto com processador PIC18f4520


Simulador

PICSimLab (PICGenios)
Ferramentas a serem utilizadas:
• MPLABX (versão 6.10+)

• Compilador XC8 (versão 2.41+)

• PICSimLab (versão 0.9.1)


Requisitos
• Linguagem C
• Estruturas de decisão: if/switch
• Estruturas de repetição: for
• Vetores
• Funções
• Circuitos
• Tensão x Corrente x Resistência
• Fontes de Tensão
• Divisor de tensão
Linguagem C
Linguagens utilizadas
 Linguagem C
 Linguagem C++
 Assembly
 Python
 HTML
 Java
Comparativo
Linguagem C Linguagem ASM Linguagem
de máquina
ldaa 10 // carrega 10 no acum. a
x = 10; staa x // salva o valor do acum. a em x 0x83 0x0a
y = 20; ldaa 20 // carrega o valor 20 no acum. a 0x84 0x00
z = x*y; staa y // salva o valor do acum. a em y 0x83 0x14
ldaa x // carrega o acum. a com valor de x 0x84 0x01
ldab y // carrega o acum. b com valor de y 0x83 0x00
mulab // mult. acum. a por b, salva em a 0x93 0x01
staa z // salva o valor do acum. a em z 0x5f
0x83 0x02
Programação em Bare-metal

Programando em baixo nível (nível de hardware)

Sem uso de abstrações

Sem sistema operacional

O código está muito próximo da eletrônica
Compilação em C
Etapas da compilação

• Pré processamento
• Compilador
• Assemblador
• Linker
Etapas da compilação
Código fonte
Hello.c Outros códigos
objetos
Pré processor

Código
Pré-processado

Compilador Linker EXECUTÁVEL

Código
Assembly

Assembler
Arquivos da
Código objeto biblioteca
Hello.o
O pré processador
Código fonte
Hello.c Outros códigos
objetos
Pré processor

Código
Pré-processado

Compilador Linker EXECUTÁVEL

Código
Assembly

Assembler
Arquivos da
Código objeto biblioteca
Hello.o
O pré processador
Uma ferramenta de substituição de textos

#define – Substitui uma macro

#include – Inclui um texto de outro arquivo

#if – Testa uma condição para compilar

Outros...
O pré processador
Exemplos de diretivas do pré processador
O Compilador e Assemblador
Código fonte
Hello.c Outros códigos
objetos
Pré processor

Código
Pré-processado

Compilador Linker EXECUTÁVEL

Código
Assembly

Assembler
Arquivos da
Código objeto biblioteca
Hello.o
O Compilador e Assemblador
Transforma texto em código de máquina

O arquivo gerado é chamado de código objeto


O Linker

Código objeto

Código objeto Linker EXECUTÁVEL

Código objeto

Arquivos da
biblioteca
Programando em C
Linguagem C
• Coleção de funções
Criadas pelo programador
Utilizadas através de biblioteca

• Os programas em linguagem C possuem


Diretivas de pré processamento
Definição de variáveis
Definição de funções
Etc.
As diretivas de pré-processamento
• Mensagens do programador ao
compilador com tarefas para antes ou
no momento da compilação

# • as diretivas são iniciadas pelo caractere


# (hash)

• as diretivas mais comuns são #include


e #define
Diretivas de pré-compilação
• A diretiva #define permite que o código fonte seja
modificado antes de ser compilado.
#define CONST 15
void main(void){
printf("%d", CONST * 3);
}

//no processo de compilação


void main(void){
printf("%d", 15 * 3);
//é possível: printf("%d", 45);
}
Compilação condicional

Verificando um #define Exemplo de uso:


antes de compilar void ImprimirTemp(char valor){
#ifdef LCD
#ifdef nome Imprime_LCD(valor);
#else
if (valor > 30) led = 1;
#else
else led = 0;
#endif //LCD
#endif }
Compilação condicional
Com selecionar entre Serial e LCD:
Outro exemplo
#include <stdio.h>
void MostraSaidaPadrao(){ #define SERIAL
#ifdef SERIAL void main(void){
char *msg = "SERIAL"; MostraSaidaPadrao();
#else }
char *msg = "LCD";
#endif #include <stdio.h>
printf(“%s”,msg); //#define SERIAL
} void main(void){
MostraSaidaPadrao();
}
Includes
• Especifica ao compilador novas funções,
tipos e macros que estão disponíveis em
outros arquivos

#include <nome do arquivo>


#include "nome do arquivo"
A diferença entre os Includes
Header files: são os arquivos com extensão .h que contém as definições
de tipos, dados e declarações de várias funções já prontas

#include <nome do arquivo>

• O arquivo é procurado no diretório definido pelo


compilador C

#include "nome do arquivo":

• O arquivo é procurado no diretório do programa criado.


Os Includes não podem repetir
Na grande maioria dos casos é necessário fazer uma verificação para
garantir que o include não seja chamado duas ou mais vezes

Cuidado #ifndef STDIO_H


#define STDIO_H

//Protótipos, definições, …

Imagem: www.graphicsfactory.com #endif // Fim do STDIO_H


Funções
Blocos de comandos a serem executados

• A função pode, ou não, receber valores.

• As funções podem, se necessário retornar um valor.

• A função “main” é onde começa o programa.

• Não há ordem obrigatória para codificar as funções


Definição de funções
Exemplo:

A definição da função possui: int main(int argc, char *argv[]){


return 0;

O tipo de dado que ela retorna
}//end main

O nome da função
void funcao01(char var){

O que ela recebe ...
}//end funcao01

O que ela faz

void funcao02(void){
...
}//end funcao02
Função main
Função main
• Indica o ponto de início de um programa

• O linker aloca a função main() em algum


lugar disponível na memória

• O linker atualiza o vetor de reset colocando


um pulo para a função main()
Função main
• Em sistemas embarcados a função main é a primeira a
ser executada, portanto não pode receber parâmetro e
não retorna nada.

• Deve ser declarada como:

void main(void){
//aqui entra o código do programa
}
Função main
• Geralmente os sistemas embarcados são feitos
para serem executados continuamente

• As rotinas/funções devem ser pensadas para serem


executadas ciclicamente

• O sistema só para quando desligado

• Nesta situação devemos utilizar loops infinitos


Loop infinito?
Função main

Exemplos de loop infinito em software embarcado

void main (void){ void main (void){


for(;;){ while(1){
//aqui entra o //aqui entra o
//código principal //código principal
//e nunca termina //e nunca termina
} }
} }
Até a próxima

Você também pode gostar