Aplicação das ferramentas de software que permitem o desenvolvimento de sistemas embarcados com a linguagem C.
Propósito
A avaliação prática de ferramentas de software utilizadas no desenvolvimento de sistemas embarcados com a
linguagem C, como ambientes de edição e compilação, depuradores e simuladores, é essencial para a formação do
profissional que busca se integrar em equipes de projeto em diversas indústrias que utilizam sistemas embarcados.
Objetivos
Módulo 1
Sistemas embarcados
Acessar módulo
Módulo 2
Acessar módulo
Módulo 3
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 1/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
Acessar módulo
search
Módulo 4
Formular testes para projeto de sistemas embarcados sem usar um destino físico
Acessar módulo
Introdução
Os sistemas de computação estão em toda parte. Não é nenhuma surpresa que milhões de sistemas de computação são construídos todos
os anos para computadores desktop, estações de trabalho e grandes servidores. Também não deve ser surpresa que bilhões de sistemas de
computação são construídos todos os anos para uma finalidade específica, tão ampla como os sistemas citados. Eles podem estar
incorporados em dispositivos eletrônicos maiores, realizando repetidamente uma função, muitas vezes passando completamente
despercebidos pelo usuário do dispositivo. Podem também ser independentes, controlando uma infinidade de equipamentos que nos
cercam. Estes são os sistemas de computação embutidos/embarcados, ou simplesmente sistemas embarcados.
Eletrônicos de consumo, máquinas industriais, automóveis, câmeras, relógios digitais, eletrodomésticos, aviões, bem como dispositivos
móveis, são alguns locais possíveis para um sistema embarcado. Vamos aprender as características dos sistemas embarcados, os seus
possíveis caminhos de evolução e analisaremos as ferramentas essenciais para programar esses sistemas com a linguagem C.
Sistemas embarcados
Ao final deste módulo, você será capaz de distinguir as características básicas dos sistemas embarcados e a sua evolução.
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 2/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
Visão geral
Um sistema é um arranjo em que todos os seus componentes funcionam de acordo com as regras específicas que foram definidas. Assim, o
sistema embarcado pode ser descrito como uma maneira de executar ou organizar uma ou várias tarefas de acordo com um conjunto de regras,
uma associação em que dispositivos eletrônicos são reunidos coletivamente em sintonia com um programa ou plano de controle.
Citamos “programa” e “dispositivos eletrônicos”. Contudo, podemos substituir esses termos por software e hardware. Assim como nos PCs, a
maioria dos sistemas embarcados são compostos por um software. A seguir, vamos discutir as características comuns dos sistemas embarcados,
e em particular os compostos por software e hardware, em que o software em sua maioria é desenvolvido na linguagem C.
Podemos dizer que para cada sistema embarcado existe uma visão conceitual ou modelo de controle do sistema, ou seja, uma abstração da
funcionalidade do sistema que consiste em um conjunto de objetos e interações entre eles. A seguir apresentamos dois modelos de controle de
sistema:
No modelo de controle baseado em máquina de estados, os objetos são o conjunto de estados, enquanto as interações entre eles são
representadas pelas transições na máquina de estados.
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 3/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
close
search
Conceitual algorítmico
No modelo de controle conceitual algorítmico, um conjunto de instruções (os objetos) é executado sob uma sequência de controle (as
interações), que usa ramificações e construções em estruturas de repetição.
O modelo de controle conceitual algorítmico é o mais utilizado em sistemas embarcados, em que um software (mais conhecido como firmware) é
executado em um processador e, em geral, integrado em um microcontrolador. Exploraremos, neste conteúdo, a programação desse
microcontrolador em linguagem C.
Apesar de menos utilizado nos projetos de sistemas embarcados, o modelo de controle baseado em máquina de estados é muito importante
quando o foco é o alto desempenho do sistema. Nesse caso, estamos falando da criação de um controle baseado em hardware digital, sem
software embarcado, com alto desempenho e confiabilidade para soluções que visam expandir ou complementar o uso dos microcontroladores.
Uma das soluções mais usadas hoje em dia para esse fim é o uso de dispositivos FPGA.
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 4/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 5/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
Microprocessadores e microcontroladores surgiram mais ou menos na mesma época. Entre 1970 e 1971, quando a Intel estava trabalhando na
invenção do primeiro microprocessador do mundo, a Texas Instruments desenvolvia um conceito bastante semelhante e inventou o search
microcontrolador, um único chip de circuito integrado que poderia conter quase todos os circuitos essenciais para formar uma calculadora; apenas
o mostrador e o teclado não foram incorporados. O microcontrolador desenvolvido na Texas Instruments (TMS1000) foi usado internamente em
seus produtos de calculadora entre 1972 e 1974. Em 1983, quase 100 milhões de TMS1000 já tinham sido vendidos.
Mesmo que os microprocessadores representassem uma grande melhoria em relação aos grandes circuitos digitais que substituíram, eles não
eram uma solução mágica completa para reduzir os custos e a complexidade dos projetos. O problema era que, para fazer um microprocessador
fazer algo útil, ele precisava ser cercado por muitos chips adicionais para entrada e saída (E/S) e geralmente precisava de outros chips de suporte
também, como chips de relógio em tempo real e decodificadores de endereços.
Os sistemas baseados em microprocessador, como o mostrado na imagem a seguir, são sistemas de uso geral que podem ser programados e
reprogramados dependendo da tarefa ou do aplicativo; normalmente os chamamos de computadores.
warning
Atenção
O computador pessoal destaca-se como uma das aplicações mais importantes e úteis dos sistemas baseados em microprocessadores.
Na década de 1990, as técnicas aprimoradas de processamento de silício e fabricação de chips resultaram na capacidade de colocar cada vez mais
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 6/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
circuitos em um chip. Uma das maneiras pelas quais isso foi usado foi para aumentar o chip do microprocessador com funções e recursos
search em
adicionais que foram previamente implementados por chips externos separados, criando famílias de microcontroladores. O sistema baseado
microcontrolador, mostrado na imagem a seguir, é o clássico sistema embarcado com as características de sistema de função única, fortemente
restrito às métricas de projeto e com resposta em tempo real.
Os microcontroladores são frequentemente descritos como computadores de chip único. Isso porque já têm todos os componentes que permitem
operá-lo sozinho, em particular para tarefas de monitoramento e/ou controle. Como mostrado na imagem anterior, eles contêm um núcleo de
processamento, memórias e vários dispositivos periféricos, como portas de E/S paralelas, temporizadores e vários outros subsistemas de funções
especiais. Veremos mais detalhes dos componentes a seguir.
CPU
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 7/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 8/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
É a unidade central de processamento, responsável por executar o programa armazenado e gerenciar os periféricos. Ela busca instruções na
search
memória, os códigos de operação (opcodes), uma por uma, as interpreta e executa alguma operação para obter o resultado. Os programas
consistem em uma coleção desses opcodes misturados com dados numéricos.
Os opcodes são o resultado da compilação dos programas escritos em uma linguagem de programação, como a linguagem de montagem ou a
linguagem C. A CPU funciona sequencialmente por meio dessas instruções, às vezes, com saltos de uma posição para outra da memória como
resultado do algoritmo descrito no programa ou como resultado das condições operacionais.
Registradores expand_more
ALU expand_more
Decodificador expand_more
Memórias
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 9/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
Usada para armazenar valores que podem mudar durante a execução de um programa, como os relacionados às variáveis de um programa.
Esse tipo de memória é volátil, ou seja, o seu conteúdo é perdido toda vez que os sistemas são desligados. Como resultado disso, a RAM não é
útil para armazenamento de programas de longo prazo.
close
É usada para armazenamento de programas de longo prazo, pois não perde seu conteúdo quando a alimentação é removida. Esse tipo de
memória é geralmente utilizado para armazenar programas, mas não variáveis de um programa. Existem diferentes tecnologias usadas para
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 10/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
implementar memória de programa, como EPROM, EEPROM e memória Flash.
search
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 11/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
Porta LPT.
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 12/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
Microcontroladores enviam e recebem dados para o mundo exterior por meio de portas. A porta de entrada e saída (E/S) paralela é a de utilização
mais simples. Essas portas podem ser vistas como registradores que são conectados ao núcleo da CPU, usando o barramento de dadossearch
e, ao
mesmo tempo, ao mundo externo, por meio de pinos do microcontrolador.
No caso de portas paralelas, cada bit no registrador da porta é conectado a um pino no chip. Se um bit está em nível lógico alto, o pino é acionado
para qualquer tensão que represente a lógica '1' para aquele sistema (geralmente 5 Volts ou 3,3 Volts). Da mesma forma, bits na lógica '0' conduzem
0 Volts no pino apropriado. As portas LPT são exemplos de E/S paralela.
E/S serial
As comunicações seriais exigem que o remetente envie dados de 1 bit por vez, a uma taxa acordada com o receptor. O receptor verifica a tensão
que chega do emissor no meio de cada intervalo de tempo de bit. Ele pode, portanto, decidir se um '1' ou '0' foi enviado para um determinado bit.
RS232, USB e Ethernet são exemplos de transmissão serial.
post_add
Saiba mais
A transmissão de dados seriais é mais barata do que a transmissão paralela, pois há menos condutores envolvidos.
Temporizadores e contadores
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 13/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
Os temporizadores são normalmente construídos usando uma fonte de clock e um registrador específico com função de contador. Os contadores
searchou para
contam os períodos de clock que são inseridos neles, mas têm um número de bits limitado e, como resultado, só podem contar para cima
baixo até esse limite sem reiniciar a contagem.
extension
Exemplo
Um contador de 8 bits pode contar apenas até 255 decimais; com mais uma entrada de período ele transborda e reverte seu valor para
zero.
ADCs e DACs
É comum que os sistemas embarcados sejam usados para processar sinais analógicos, que se alteram em valores contínuos de tensão. Para que
eles façam isso, é necessário um dispositivo especial denominado conversor analógico para digital (ADC). Microcontroladores atuais, em sua
maioria, possuem ADCs integrados ao chip.
O ADC aceita uma entrada analógica e a traduz em um número digital cujo tamanho é proporcional à magnitude do sinal analógico. Cada conversor
analógico para digital tem uma faixa de tensão de entrada associada e uma faixa numérica de saída.
flag
Exemplo
Consideremos um ADC de 10 bits que opera com faixa do sinal de entrada de 0 a 5V. O ADC, por comando da CPU, tira um instantâneo
(amostra e espera) da entrada analógica e, nesse caso, usa uma aproximação sucessiva para mapear esse sinal para um número digital
proporcional. O programa monitora o estado do sinal de “conversão concluída” em um bit de um registrador específico. Quando a
conversão é concluída, o resultado de 10 bits convertido pode ser lido em um registrador.
A imagem a seguir ilustra a conversão de valores de um sinal contínuo (as curvas em vermelho) para valores discretos (em azul) no caso de dados
digitais representados com 2 e 3 bits.
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 14/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
Na imagem observamos que o aumento no número de bits implica no aumento no número de valores específicos na representação digital. Esse
aumento no número de bits permite, portanto, o aumento na resolução da representação binária do valor de entrada.
flag
Exemplo
Para um ADC de 10 bits, a representação do sinal de entrada terá 1024 ($$$2^{10}$$$) valores discretos. Se esse ADC trabalha com uma
tensão de referência de 5V, a resolução que ele possui é de 5/1024, aproximadamente 4,88mV ($$$10^{(-3)}V$$$). Ou seja, os valores
binários resultantes da conversão do ADC representam múltiplos de 4,88mV. Dessa forma, quanto maior o número de bits de um ADC,
maior é a resolução da representação binária do valor de entrada e mais fiel é a representação digital do valor contínuo de entrada.
Os conversores digitais para analógico (DACs) executam o inverso dos ADCs. Eles aceitam um sinal de entrada digital e emitem um sinal analógico
proporcional, permitindo a atuação para controlar um componente externo com tensão contínua. Historicamente, os DACs raramente foram
encontrados integrados a microcontroladores por motivos de fabricação. Se uma saída analógica for necessária para um microcontrolador sem um
DAC interno, um circuito DAC externo deve ser adicionado. Alternativamente, pode ser possível gerar uma saída que simula uma saída analógica
controlando o ciclo de trabalho de um pino da porta digital de saída.
Por exemplo, se um pino de saída digital gasta metade de seu tempo em 5V e o resto em 0V, sua tensão média é 2,5V. Variando a porcentagem de
tempo em nível alto, a tensão média de saída pode ser controlada. Isso é conhecido como modulação por largura de pulso (PWM). A saída pulsada
pode ser filtrada para criar um sinal analógico contínuo.
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 15/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
As interrupções são sinais que fazem com que a CPU suspenda sua atividade atual e execute alguma outra tarefa. Os sinais de interrupção são
produzidos por dispositivos de hardware que requerem atenção urgente. O modem, a impressora, o mouse e o teclado são exemplos de dispositivos
que podem solicitar atenção urgente.
Veja alguns exemplos de atividade desempenhadas pelos controladores de interrupções dos Microcontroladores:
portable_wifi_off
Contar pulsos de entrada.
code
Executar uma determina função a cada intervalo de tempo.
settings_input_hdmi
Receber dados por porta serial.
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 16/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
Interrupções permitem retirar alguns microcontroladores de um estado de baixo consumo de energia, permitindo que este esteja sempre disponível,
mesmo mantendo boa parte de seus circuitos desligados. search
flag
Exemplo
Em um sistema automotivo, os sistemas de telemetria, frenagem e conectividade podem trabalhar juntos para enviar dados do veículo ao
fabricante, ao proprietário da frota ou até mesmo a um sistema de direção autônomo. Esses sistemas automotivos embarcados, agora
conectados uns aos outros, precisam de contramedidas de segurança maiores do que quando estavam isolados. Como muitas das
principais violações de dados recentes demonstraram, um sistema pode fornecer aos hackers o caminho para ocasionar danos em larga
escala.
Os motivadores das mudanças no projeto de sistemas embarcados incluem melhorias no hardware, bem como a evolução contínua nos métodos de
desenvolvimento de software, conforme descritos a seguir.
Hardware Software
É possível fazer mais com microcontroladores de alto desempenho e mais periféricos integrados. Em vez de hospedar apenas uma
aplicação, novos sistemas de múltiplos núcleos em um chip ou de FPGAs associados a núcleos de microcontroladores, chamados SoCs
(System on a Chip - Sistema em um chip), podem oferecer suporte a várias aplicações em uma única plataforma de hardware, mantendo
ainda os requisitos de energia e custo.
Como muitas mudanças se apresentam no mundo dos sistemas embarcados, os requisitos essenciais não só permanecem, como também se
tornam mais exigentes. Os sistemas embarcados modernos incrementam a necessidade de serem seguros, tolerantes a falhas, confiáveis e
certificáveis.
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 17/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
flag
Comentário
Todos esses requisitos tornam o domínio das ferramentas de programação para sistemas embarcados algo essencial, incluindo os
ambientes de programação com a linguagem C, as técnicas para depuração de erros nos programas embarcados e o uso de simuladores
para otimizar recursos e tempo no desenvolvimento com os dispositivos mais utilizados.
video_library
As características de um sistema embarcado
No vídeo a seguir, abordamos as características de um sistema embarcado, apresentando sua evolução e os componentes que o integram.
emoji_events
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 18/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
Questão 1
Um sistema embarcado para acionamento de airbags em automóveis foi desenvolvido com microcontrolador. Considere as afirmações a seguir
sobre esse sistema.
A I e III.
B II e III.
C I e II.
D Somente a I.
E Somente a III.
Responder
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 19/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
Questão 2 search
Avalie as asserções a seguir e a relação sugerida entre elas.
I. Microcontroladores e microprocessadores são usados de forma distinta nos projetos de sistema embarcados
PORQUE
II. O microcontrolador possui funções e recursos internos ao chip que nos microprocessadores estão disponíveis em chips externos, como
memórias e portas de entrada e saída.
Responder
starstarstarstarstar
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 20/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
No desenvolvimento moderno de software, os programadores possuem mais recursos e ferramentas do que simplesmente o que temos no
processo de compilação. Agora, podemos trabalhar em um ambiente de desenvolvimento que chamamos de IDE, que significa Ambiente de
Desenvolvimento Integrado (Integrated Development Environment).
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 21/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
TurboPascal
Visual Basic.
Enquanto o TurboPascal lançou a ideia de um ambiente de desenvolvimento integrado, muitos acreditam que o Visual Basic (VB) da Microsoft,
lançado em 1991, foi o primeiro IDE real. O VB foi construído na linguagem BASIC (linguagem de programação popular dos anos 1980). Com o
surgimento do VB, a programação pôde ser pensada em termos gráficos e surgiram benefícios de produtividade significativos.
Podemos definir IDE como um software para construir aplicativos que combina ferramentas comuns de desenvolvedor em uma única interface
gráfica de usuário (GUI).
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 22/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
Um IDE normalmente é integrado pelas seguintes ferramentas:
Um editor de texto ajuda a escrever código de software com recursos, como destaque de sintaxe com dicas visuais, preenchimento
automático específico de linguagem e verificação de bugs à medida que o código está sendo escrito.
Bibliotecas
Outro conceito indispensável quando falamos dos elementos que formam um IDE é o das bibliotecas. Embora não sejam uma ferramenta que se
integra em um IDE, bibliotecas constituem-se em um recurso muito importante, principalmente em se tratando de IDEs para sistemas embarcados.
Para um desenvolvedor de software, a ideia de uma biblioteca é bastante simples: é um arquivo contendo um número (normalmente grande) de
funções/ procedimentos/sub-rotinas em um formato especial. Isso significa que o programador precisa apenas fazer referência às funções
comumente usadas e seu código é “puxado” automaticamente.
flag
Saiba mais
Como acontece com a maioria dos aspectos da programação embarcada, as bibliotecas apresentam mais desafios e opções para os
desenvolvedores. O fato de cada sistema embarcado ser diferente é frequentemente citado como uma razão para grande parte da
complexidade do desenvolvimento de software embarcado. O uso de bibliotecas reflete isso. Além de obter uma biblioteca certa para a
família de dispositivos alvo e o compilador escolhido, pode haver uma ampla seleção de outras variações: especificações de membros da
família de chips, endereçamento relativo de registro, otimização de tamanho/velocidade, dentre outras.
O objetivo geral e o principal benefício de um ambiente de desenvolvimento integrado é o aumento da produtividade do desenvolvedor, que pode ser
alcançado por:
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 23/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
settings_applications
Configuração mais rápida
Sem uma interface IDE, os desenvolvedores precisariam gastar tempo configurando várias ferramentas. Com a integração de ferramentas
de um IDE, os desenvolvedores têm o mesmo conjunto de recursos em um só lugar, sem a necessidade de trocar de ferramenta
constantemente.
pending_actions
Tarefas de desenvolvimento mais rápidas
A integração mais estreita de todas as tarefas de desenvolvimento melhora a produtividade do desenvolvedor. Por exemplo, o código e a
sintaxe podem ser verificados durante a edição, fornecendo retorno instantâneo quando erros são inseridos, sem precisar alternar entre os
aplicativos para concluir as tarefas.
school
Aprendizagem contínua
Manter-se atualizado e informado é outro benefício. Por exemplo, os tópicos de ajuda do IDE são constantemente atualizados, bem como
novos exemplos, modelos de projeto etc.
pattern
Padronização
O IDE padroniza o processo de desenvolvimento, o que ajuda os desenvolvedores a trabalharem juntos com mais facilidade e ajuda os
novos contratados a trabalhar mais rapidamente.
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 24/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
IDE.
flag
Atenção
É importante certificar-se de que todas as ferramentas necessárias estão disponíveis para o modelo de microcontrolador selecionado para
o projeto, incluindo o compilador que se integra ao IDE escolhido.
Vários IDEs para microcontroladores podem incorporar mais de um compilador e montador, que deve ser escolhido pelo programador quando
monta o projeto. Também existem fabricantes de IDEs que desenvolvem versões dos seus produtos para várias famílias de microcontroladores.
Alguns IDEs são completamente gratuitos, enquanto outros são gratuitos para teste ou até um tamanho limitado de código. A seguir, conheça
alguns dos fabricantes e seus IDEs.
Keil expand_more
IAR expand_more
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 25/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
Arduino IDE expand_more
Ao examinar os vários ambientes de desenvolvimento, é importante observar que o MDK Keil e o IAR Embedded Workbench oferecem a capacidade
de programar uma ampla variedade de microcontroladores de diferentes fabricantes. Muitas empresas de desenvolvimento de sistemas
embarcados preferem usar ferramentas deste tipo, pois podem manter uma padronização de projetos e bibliotecas com diferentes times de
desenvolvimento dentro da empresa. MPLAB X, Arduino IDE e Code Composer são amplamente suportados e oferecem muitos exemplos de código
para você começar, mas se concentrarão apenas em seu próprio subconjunto de microcontroladores.
Siga os passos:
Instale o software
Configure o hardware
Configure a placa com microcontrolador PIC para ser reconhecida pelo MPLAB. Algumas placas com microcontrolador PIC podem ser
reconhecidas diretamente pelo MPLAB, mas isso não é uma regra. No caso mais geral, ao final do processo, o arquivo compilado com
extensão .hex, gerado pelo MPLAB, é usado em um programador de dispositivos específico para PIC.
Instale um compilador
Instale um dos compiladores disponíveis para MPLAB, como os gratuitos da série XC C, MikroC ou CCS para escolher na construção o
projeto. Certifique-se de que o MPLAB X IDE esteja apto a usar o compilador instalado, selecionando Tools > Options > Embedded >
Build Tools e verificando seu compilador na lista.
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 26/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
O projeto será construído para criar um arquivo HEX, que será programado em seu dispositivo. Para criar um projeto no MPLAB X IDE
selecione Arquivo > Novo projeto e configure um projeto MPLAB X IDE, seguindo as etapas no assistente de projeto. As escolhas
incluem o modelo de microcontrolador usado e o compilador escolhido. Depois de concluído, a árvore do projeto será aberta na janela
Projetos. Selecione Arquivo > Novo arquivo para abrir um modelo de arquivo no qual inserir seu código. Ou você pode importar o
código existente para o projeto clicando com o botão direito na pasta Arquivos de código-fonte da árvore do projeto e selecionando
Adicionar item existente. Para abrir um projeto existente, selecione Arquivo > Abrir projeto, navegue até seu projeto e clique em Abrir
projeto.
Para construir o projeto e gerar um arquivo HEX, clique com o botão direito no nome do projeto na janela Projetos e selecione
Construir (Build) no menu suspenso. Se você tiver erros de compilação, verifique a configuração do projeto e quaisquer problemas
sinalizados em seu código. Então, construa-o novamente.
Caso a placa seja reconhecida pelo MPLAB, na barra de ferramentas MPLAB X IDE clique no ícone Executar (Run). O projeto será
construído e o dispositivo será programado. O programa começará a ser executado imediatamente após a conclusão da
programação.
Siga os passos:
Separe os equipamentos
Primeiro, você deve ter sua placa Arduino e um cabo USB. Caso você use Arduino UNO, você precisará de um cabo USB padrão
(plugue A para plugue B), do tipo que é usado para conectar uma impressora USB.
Você pode obter diferentes versões do Arduino IDE na página de download no site oficial do Arduino. Você deve selecionar seu
software, que é compatível com seu sistema operacional (Windows, MacOS ou Linux). Após a conclusão do download do arquivo,
descompacte o arquivo.
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 27/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
Ligue sua placa
O Arduino Uno extrai energia automaticamente de qualquer uma das conexões USB para o computador ou de uma fonte de
alimentação externa. Conecte a placa Arduino ao seu computador usando o cabo USB. O LED verde de alimentação (identificado
como PWR) deve acender.
Clique duas vezes no ícone do aplicativo, com um logo infinito e nome arduino, para iniciar o IDE.
Depois que o software é iniciado, você pode criar um novo projeto selecionando Arquivo > Novo, ou abrir um exemplo de projeto
existente selecionando Arquivo > Exemplo > Básico > Piscar. Ele liga e desliga o LED com algum atraso. Você pode selecionar
qualquer outro exemplo da lista.
Para evitar qualquer erro ao enviar seu programa para a placa, você deve selecionar o nome da placa Arduino correta, que
corresponde ao da placa conectada ao seu computador. Vá para Ferramentas > Placas e selecione a sua placa.
Selecione a porta serial onde está conectada a placa Arduino. Vá para o menu Ferramentas > Porta serial. É provável que seja COM3
ou superior (COM1 e COM2 são geralmente reservados para portas seriais de hardware). Para descobrir, você pode desconectar sua
placa Arduino e reabrir o menu, a entrada que desaparece deve ser da placa Arduino. Reconecte a placa e selecione essa porta serial.
Agora, basta clicar no botão Upload do IDE, uma seta para a direita. Aguarde alguns segundos; você verá os LEDs RX e TX na placa
piscando. Se o upload for bem-sucedido, a mensagem Upload concluído aparecerá na barra de status.
video_library
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 28/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
No vídeo a seguir, falamos sobre sobre IDE e as vantagens em empregá-lo no desenvolvimento de um sistema embarcado.
emoji_events
Questão 1
Os ambientes de desenvolvimento integrados atuam consideravelmente no aumento da produtividade do desenvolvedor. Considere os fatores
citados a seguir.
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 29/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
Qual ou quais dos fatores citados são características dos IDEs que atuam no aumento da produtividade?
A I e II.
B I e III.
C II e III.
D Somente a I.
E Somente a II.
Responder
Questão 2
Quais dos IDEs a seguir criam versões para várias famílias de microcontroladores de vários fabricantes?
E Keil e IAR.
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 30/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
Responder
starstarstarstarstar
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 31/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
Rastreando bugs.
Conforme um projeto de sistemas embarcados amadurece e cresce em complexidade, torna-se cada vez mais difícil rastrear e isolar bugs no
código.
Muitos recursos e tempo são gastos em cada projeto de depuração de código, aumentando o orçamento dos projetos. Nesse sentido, é essencial
investigar técnicas tradicionais de depuração em tempo de execução, valorizar os benefícios dos testes e verificar como os desenvolvedores podem
implementar a depuração de rastreamento em tempo real para descobrir e retificar bugs de software, trazendo produtos ao mercado com mais
rapidez e menos erros.
O que é um depurador
Os depuradores (debuggers) ajudam os programadores a avaliar e corrigir seus programas. Vejamos algumas das características do funcionamento
do depurador.
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 32/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
Uma boa capacidade de depuração é crucial, pois os programas de hoje podem ser bastante complexos e difíceis de escrever corretamente. Mas, a
search não
detecção de erros em tempo de execução não é tão óbvia. Como a maioria dos sistemas embarcados não possui uma “tela” ou mostrador,
podemos encontrar os erros em tempo de execução como no desenvolvimento de software em geral. Por isso, examinar as técnicas de depuração
em sistemas embarcados é essencial.
settings_applications
Controle de execução
find_in_page
Análise em tempo real
A ferramenta de depuração de nível de origem, como vimos, atende a esses requisitos, permitindo percorrer o código, interrompê-lo e, em seguida,
examinar o conteúdo da memória e as variáveis do programa. É a primeira ferramenta, fundamental para resolver um problema de erro em sistemas
embarcados mais complexos. Sem uma ferramenta desse tipo disponível, técnicas de depuração tradicionais podem ser utilizadas.
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 33/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
O método é executado observando as instruções de impressão ao vivo que são escritas à medida que o código é executado. Essa escrita
pode ser para uma porta serial do microcontrolador, por exemplo, capturando a saída em um programa no computador. Para conseguir isso,
o desenvolvedor deve intercalar as instruções de impressão em todo o código que será impresso, quando partes específicas do código
forem executadas, permitindo visualizar a execução de partes específicas do código.
Embora o método de impressão possa fornecer transparência sobre o comportamento do código, normalmente não é ideal para projetos mais
complexos. As instruções impressas podem confirmar que uma parte específica do código foi executada, mas não fornecem uma visão completa
do estado do sistema, o que seria útil (e às vezes necessário) para rastrear erros mais elusivos. Assim, embora o método de impressão seja útil para
aplicações simples e para desenvolvedores que não têm acesso a um ambiente de depuração completo, uma solução mais robusta é necessária
para atender às necessidades de projetos de sistemas embarcados mais complexos.
O método de depuração por impressão é realmente apenas a versão mais simples de uma técnica de depuração em tempo de execução. Os
métodos de depuração em tempo de execução compartilham uma característica comum: eles monitoram a execução de um processo ou parte do
código em tempo real, enquanto o desenvolvedor usa técnicas manuais ou software para depurar o processo. Há dois métodos de depuração em
tempo de execução:
Há duas ferramentas de depuração tradicionais muito importantes em análises de tempo real, são elas:
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 34/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
Analisadores lógicos
Equipamento de laboratório projetado especialmente para solucionar problemas de hardware digital. Ele pode ter várias entradas (até 100
pares), cada uma capaz de detectar se o sinal elétrico ao qual está conectado está atualmente no nível lógico 1 ou 0.
Osciloscópios
Equipamento de laboratório para depuração de hardware. É usado para examinar qualquer sinal elétrico, analógico ou digital, em qualquer
peça de hardware. Osciloscópios são úteis para observar rapidamente a tensão em um pino específico, na ausência de um analisador
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 35/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
lógico.
search
Emulação refere-se à capacidade de um programa de computador ou dispositivo eletrônico de imitar outro programa ou dispositivo.
O emulador de circuito (ICE) toma o lugar do microcontrolador de destino. Ele contém uma cópia do microcontrolador de destino, além de RAM,
ROM e seu próprio software embarcado. Mas por que usar um emulador? Veja a seguir:
Além das vantagens mencionadas, vale destacar que um emulador de circuito fornece muito mais funcionalidades do que um depurador remoto.
Um ICE não só fornece os recursos disponíveis com um depurador remoto, como também permite:
flag
Atenção
Pontos de interrupção de hardware permitem que se interrompa a execução em resposta a uma ampla variedade de eventos, não apenas
buscas de instruções, mas também interrupções, leituras e gravações de memória.
Teste de integração
O teste de integração, às vezes chamado de teste de integração de sistema, descreve uma abordagem fundamentalmente diferente para testar e
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 36/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
depurar sistemas embarcados em todo o processo de desenvolvimento. Esse método pega emprestado a sabedoria de métodos de trabalho de
searchum único
desenvolvimento de software, como Agile e DevOps, que promovem testes periódicos em todo o processo de desenvolvimento, em vez de
processo de depuração longo, nos estágios finais do desenvolvimento do produto. O teste de integração funciona da seguinte forma:
Teste de unidade
O teste de integração começa com o teste de unidade. Antes que os módulos de código sejam integrados, eles devem ser submetidos
a testes de unidade isoladamente para garantir que operem sem erros por conta própria. O teste de unidade garante que cada
componente de software funcione conforme o esperado antes de ser integrado ao todo.
Depois que um módulo passa no teste de unidade, ele pode ser integrado a outros módulos para começar a desenvolver um sistema.
Os desenvolvedores podem começar combinando módulos de baixo nível que implementam uma funcionalidade comum e
estabelecendo casos de teste e procedimentos para verificar seu funcionamento correto.
Casos de teste
Os desenvolvedores devem escrever uma bateria de casos de teste que serão usados para verificar se tudo está funcionando
corretamente. Quando dois ou mais módulos são integrados com sucesso e passam em todos os testes relevantes, os
desenvolvedores podem continuar a incorporar mais módulos, escrever novos casos de teste e repetir o teste até que as partes finais
do código sejam adicionadas ao sistema.
A integração bem-sucedida significa que o software funcionou corretamente no hardware de destino e que o desempenho do software foi esperado
de acordo com os requisitos especificados durante a fase do plano do projeto.
Existem várias maneiras que os desenvolvedores podem escolher para organizar os testes de integração, mas os pontos mais importantes são:
check_circle_outline
Teste de unidade primeiro
Realizar testes de unidade antes de integrar o novo código para garantir que ele funcione corretamente.
published_withe_changas
Casos de teste sempre
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 37/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
Escrever casos de teste para cada nova integração e certificar-se de que um módulo recém-integrado esteja funcional antes de criar
complexidade adicional. search
done_all
Testar, testar e testar
Testar o quanto antes e com frequência para evitar um processo de depuração demorado e complicado no final do processo de
desenvolvimento.
description
Com o rastreamento em tempo real, os desenvolvedores implementam um dispositivo de hardware, como um analisador de protocolo, que
registra informações sobre a execução de processos no código. Essas informações podem incluir sequências de valores de contadores de
programa, leituras e gravações de registradores, alterações na memória do dispositivo e valores de dados associados.
close
manage_search
Identificação de anomalias
Quando um desenvolvedor percebe que um processo está se comportando de maneira inesperada, a depuração de rastreamento em tempo
real fornece uma visão completa e total do funcionamento do processo dentro do código. O desenvolvedor pode produzir um log que indica
exatamente como o sistema mudou durante a execução do processo, tornando significativamente mais fácil isolar, identificar e corrigir bugs de
software.
A depuração de rastreamento em tempo real pode ser implementada em qualquer estágio de desenvolvimento, como um complemento ao teste de
integração ou quando o software e o hardware do sistema embarcado estiverem totalmente integrados. As informações de rastreamento também
podem ser capturadas de forma não intrusiva, o que significa que o tempo e o desempenho do sistema não serão afetados pelo rastreamento. O
rastreamento em tempo real também permite que os desenvolvedores capturem, registrem e coletem mais facilmente os resultados dos testes para
análises futuras de bugs.
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 38/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
Depurando com simuladores
Simulador é um programa baseado em PC ou em nuvem que simula a funcionalidade e o conjunto de instruções do microcontrolador alvo. Um
simulador pode ser muito valioso no estágio inicial de um projeto, quando ainda não há nenhuma implementação de hardware real para os
programadores experimentarem. Soluções de depuração de código usando simuladores se popularizaram nos últimos anos. Essas ferramentas têm
se tornado bem fiéis ao modelo físico das placas e permitem testes do código antes da aquisição, diminuindo o tempo de desenvolvimento e os
custos.
video_library
As ferramentas de depuração
No vídeo a seguir, apresentamos os tipos de ferramentas de depuração.
emoji_events
search
Vamos praticar alguns conceitos?
Questão 1
Depuradores são ferramentas fornecidas pelos ambientes de desenvolvimento integrados (IDEs), que permitem inspecionar e modificar o
estado de uma aplicação enquanto ela está sendo executada. Considere as afirmações a seguir sobre os requisitos para depuradores em
sistemas embarcados.
A I e III.
B II e III.
C I e II.
D Somente a II.
E Somente a I.
Responder
Questão 2
O processo de depuração inclui historicamente perguntas que você faz para verificar se o sistema está funcionando conforme o esperado. Uma
pergunta é: “Onde meu código está sendo executado agora?” Qual técnica de depuração é utilizada para esse fim?
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 40/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
D Depuração remota.
E Teste de integração.
Responder
starstarstarstarstar
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 41/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
Uso de simuladores
Uma maneira de lidar com os diversos desafios inerentes à dependência de laboratórios físicos para desenvolvimento e teste de sistemas
embarcados é usar software para simular a funcionalidade do hardware e do sistema. Usar um simulador de sistema embarcado permite que as
equipes adotem uma abordagem diferente e mais eficiente, separando o processo de desenvolvimento de software da disponibilidade de hardware.
Existem muitos simuladores para diferentes famílias de microcontroladores, poucos acessíveis gratuitamente. Veremos dois simuladores gratuitos:
Tinkercad
PICSimLab
Montagem
Para realizar uma montagem com Arduino no Tinkercad, ache a placa Arduino Uno e coloque na área central da página.
Os orifícios ao longo de ambos os lados da placa são os pinos de Entrada/Saída. Cada um é um conector que pode ser ligado a uma protoboard ou
diretamente a algum componente com um fio. A maioria deles está marcada com um número, que são usados para identificar os pinos no código
que escrevemos. Para controlar um LED no pino 13, por exemplo, podemos ligá-lo à placa, conforme a imagem.
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 42/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
No painel de componentes dos circuitos do Tinkercad, à direita da tela, arraste um resistor e um LED para o plano de trabalho. As pernas do LED são
conectadas a dois pinos no Arduino:
power
Terra
power
Pino 13
warning
Atenção
O componente entre o LED e o pino 13 é um resistor, que ajuda a limitar a corrente para evitar que o LED se queime. Sem ele, você receberá
um aviso de que o LED poderá queimar em breve. As listras coloridas identificam o valor do resistor e, para este circuito, qualquer valor de
100 ohms a 1000 ohms funcionará corretamente.
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 43/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
O LED é um diodo emissor de luz (Light Emitting Diode) que possui conexões que o tornam diferente de uma lâmpada normal. Um LED tem uma
searchser
conexão chamada catodo e outra chamada de anodo. O anodo é maior do que o catodo. Essa distinção é importante porque o anodo deve
conectado à extremidade positiva de um circuito elétrico. A corrente flui em apenas uma direção através de um LED.
Tendo uma placa programável no plano de trabalho do Tinkercad, como a placa Arduino Uno, habilita-se a opção CÓDIGO (CODE) no menu superior
direito. Clicando nesse botão, você pode editar o seu código em modo de blocos ou texto. Escolhendo texto, você verá o código para piscar o LED no
pino 13, como mostrado a seguir.
Arduino No Tinkercad
content_copy
1
2 void setup()
3 {
4 pinMode(13, OUTPUT); // Configura o pino 13 como saída
5 }
6 void loop()
7 {
8 digitalWrite(13, HIGH); // Configura o pino 13 como HIGH
9 delay(1000); // Espera 1000 ms (1 segundo)
10 digitalWrite(13, LOW); // Configura o pino 13 como LOW
11 delay(1000); // Espera 1000 ms (1 segundo)
12 }
Veja que no ambiente de programação, um programa (chamado de sketch) apresenta duas funções básicas:
setup() loop()
A função setup() é chamada quando um programa começa a executar. É usada para inicializar as variáveis, os tipos dos pinos, declarar o uso
de bibliotecas, entre outros. Essa função será executada apenas uma vez após a placa Arduino ser ligada ou reiniciada.
No Arduino Uno, os 14 pinos digitais podem ser utilizados como uma entrada ou uma saída, utilizando-se as seguintes funções:
pinMode
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 44/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
digitalWrite
digitalRead
Os pinos operam a 5V. Há um LED integrado ao pino digital 13. Quando esse pino está no valor HIGH, o LED está aceso, quando o pino está em LOW,
o LED está apagado. Clicando em Iniciar Simulação, será possível observar os dois LEDs, o da placa e o ligado externamente, piscando em
intervalos de um segundo.
Os componentes são normalmente montados usando uma placa de ensaio ou protoboard. Encontre o componente protoboard e clique nele uma
vez para selecioná-lo e colocá-lo na área de trabalho. O protoboard pode parecer muito pequeno ou muito grande na área de trabalho. Clique no
zoom para que o protoboard fique centralizado na tela.
Mova o ponteiro do mouse sobre um dos orifícios na parte central da placa. O orifício será identificado em um quadrado vermelho com uma borda
preta, como visto na imagem a seguir. Os outros orifícios serão identificados com círculos verdes. Esses círculos verdes indicam que cada orifício
na linha está conectado a cada um dos outros orifícios na linha. Há uma ligação entre qualquer conexão dentro da mesma linha.
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 45/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
Além dos LEDs, os testes mais simples com circuitos no Tinkercad podem utilizar:
Potenciômetros expand_more
Simulador PICSimLab
O PICSimLab é um acrônimo de PIC Simulator Laboratory, um simulador desenvolvido pelo professor Luis Claudio Gambôa Lopes, do CEFET/MG.
Inicialmente suportando apenas uma placa de desenvolvimento com o modelo PIC16F628A, a versão atual pode simular 5 placas com vários
periféricos e vários microcontroladores PIC, como o PIC18F4550. Essa versão integra também uma placa Arduino Uno.
Para gerar o arquivo executável em uma IDE para PIC, como a MPLAB X IDE, precisamos usar um compilador integrado, que para PIC pode ser CCS
C. A escolha do compilador irá definir as bibliotecas de funções e diretivas para configurar o microcontrolador PIC. Mesmo usando a mesma
linguagem C, diferentes compiladores usarão a sua própria biblioteca de funções e diretivas. Portanto, é importante entender os passos para gerar
um arquivo executável para PIC com essas ferramentas.
warning
Atenção
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 46/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
O PICSimLab não roda em página web e tem a vantagem de exigir o uso das mesmas ferramentas profissionais que seriam usadas no
search
desenvolvimento de um projeto com microcontroladores PIC. Ele necessita ser carregado com o mesmo arquivo executável com extensão
.hex, que você usaria para carregar em uma placa real com microcontrolador PIC. Desse modo, antes de usar o simulador PICSimLab, você
precisa programar o código em uma IDE para PIC, usando um compilador profissional, como faria para desenvolver projetos para o
mercado.
Com os programas MPLAB X IDE e CCS C instalados, e com o CCS C disponível como compilador ao MPLAB, os passos para geração de um
executável para PIC são os seguintes:
Criar um projeto no MPLAB. Nas janelas que se abrem para a seleção das configurações do projeto, escolher um nome e o
microcontrolador PIC16F628A. Deixar os demais valores com o padrão, com exceção da janela onde se solicita a escolha do
compilador a ser usado, onde deve-se escolher o CCS C.
Com o projeto criado, abre-se um conjunto de pastas na lateral esquerda do ambiente MPLAB. Na pasta Source Files, podemos criar
arquivos-fonte para o nosso projeto. Clicando com o botão direito nessa pasta, deve-se escolher C Source File. Será solicitado um
nome para esse arquivo, que será o arquivo-fonte do projeto.
Na área central do ambiente MPLAB abre-se o arquivo-fonte que foi criado. Nele, podemos digitar o programa em linguagem C que
será executado no PICSimLab. Um programa simples pode ser usado como teste.
A seguir, temos um exemplo de código simples que pode ser usado no último passo:
Linguagem C
content_copy
1
2 #include <16F628A.h>
3 #fuses XT
4 #use delay( clock=4MHz )
5
6 void main () {
7 while (1) {
8 output_high(PIN_B0);
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 47/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
9 delay_ms(1000);
10 output_low(PIN_B0); search
11 delay_ms(1000);
12 }
13 }
Programa teste.
Esse programa executa a tarefa clássica na iniciação de estudos com microcontroladores, o piscar de um LED ligado a um pino, como fizemos no
Arduino com o simulador Tinkercad. O esquema mostrado na imagem a seguir exemplifica as ligações esperadas por esse programa.
No esquema, além do LED ligado ao pino 6, temos o cristal oscilador (XT) que será usado para sincronizar a execução do programa. Vamos
examinar as instruções do programa:
#fuses XT expand_more
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 48/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
while (1)
search expand_more
delay_ms(1000) expand_more
Clicando no botão para compilar no MPLAB, um arquivo com extensão .hex será gerado, caso o compilador CCS C não detecte erros ou
inconsistências no programa. Esse arquivo pode ser usado para programar uma placa no simulador PICSimLab. Podemos, então, abrir o simulador e
no menu Board, escolher McLab1, uma placa que trabalha com o microcontrolador PIC16F628A. Com a placa selecionada, conforme a imagem a
seguir, deve-se carregar o arquivo HEX gerado no menu File -> Load HEX. Você verá o LED correspondente piscando e poderá alterar o código no
MPLAB, diminuindo o valor para a função delay_ms(), por exemplo, recompilando o programa e recarregando o arquivo HEX no PICSimLab.
A placa McLab1 é bem simples, possuindo dois displays de 7 segmentos, 8 leds, uma lâmpada ligada à saída PWM e 4 pushbuttons. Não possui
mostrador LCD ou conversor analógico-digital (ADC). Para testar programas com esses periféricos uma placa mais completa, chamada PICGenios, a
placa 4 do simulador, pode ser usada.
Com a PICGenios, vários testes podem ser realizados, utilizando sensores de temperatura, ventoinha, buzzer, potenciômetros, além de mostrador
LCD, mostrador de 7 segmentos, 16 LEDS e 19 pushbuttons. A placa trabalha com alguns modelos de microcontroladores PIC, entre eles, o
PIC18F4550. A placa PICGenios é mostrada na imagem a seguir.
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 49/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
O simulador PICSimLab está em frequente atualização, com novas placas experimentais sendo adicionadas. Como possui código aberto, um grupo
de contribuidores pode acrescentar novas placas para facilitar o desenvolvimento com microcontroladores, inclusive placas que não utilizam os
microcontroladores PIC. Mesmo assim, ele não possui as facilidades de integrar dispositivos externos às placas (sensores e atuadores), como
ocorre no simulador do Tinkercad.
De modo geral, os simuladores para microcontroladores têm evoluído e se tornado uma alternativa muito boa para realizar testes com circuitos. O
aparecimento de ferramentas gratuitas com boa qualidade, como a Tinkercad e o PICSimLab, tende a incentivar que os próprios fabricantes
empreendam esforços para a implementação de novas ferramentas gratuitas de simulação. Mas, no momento, a maioria dos simuladores para
microcontroladores são versões pagas, que dependem de licença, o que restringe seu uso ao ambiente profissional.
video_library
Simuladores para sistemas embarcados
Os simuladores PICSimLab e Tinkercad e a finalidade do uso de simuladores para o desenvolvimento dos sistemas embarcados são apresentados
no vídeo a seguir.
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 50/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
emoji_events
Questão 1
O simulador para placas da família de microcontroladores PIC, o PICSimLab, permite fazer testes, que depois podem ser usados em um projeto
real. A seguir, temos afirmações sobre esse simulador.
A I, II e IV
B I, III e IV
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 51/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
C II e IV
search
D I, II e III
E II e III
Responder
Questão 2
Sabendo-se que a função de leitura no pino digital no ambiente Arduino possui a sintaxe digitalRead(pino), em que pino é o número do pino
digital que se quer verificar o estado; sabendo-se também que essa função retorna HIGH ou LOW para indicar o estado do pino, e que
digitalWrite (pino, HIGH ou LOW) realiza uma escrita de nível alto ou baixo no pino indicado, diga o que o trecho de código a seguir realiza.
Considere um LED ligado ao pino 13 e que ele se acende com nível alto.
Responder
starstarstarstarstar
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 52/53
24/03/2022 14:34 Linguagem C nos sistemas embarcados
search
Considerações finais
Verificamos as características mais importantes dos sistemas embarcados e as ferramentas profissionais utilizadas para o desenvolvimento do
software embarcado em linguagem C, incluindo os ambientes integrados de programação mais importantes, as técnicas de depuração de
programas e os simuladores mais conhecidos da plataforma Arduino e da família de microcontroladores PIC.
headset
Podcast
Ouça o podcast sobre a importância da linguagem C para o desenvolvimento de sistemas embarcados, as vantagens e desvantagens do
seu emprego.
00:00 14:11
speed
1x
Referências
MONK, Simon. Programação com Arduino: Começando com Sketches. 1. ed. Porto Alegre: Bookman, 2017.
OLIVEIRA, A. S.; ANDRADE, F. S. Sistemas Embarcados – Hardware e Firmware na Prática. 1. ed. São Paulo: Érica, 2010.
PECKOL, J. K. Embedded Systems: A Contemporary Design Tool. 1. ed. Nova Jersey, EUA: Wiley, 2019.
ZANCO, W. S. Microcontroladores PIC18 com Linguagem C – Uma Abordagem Prática e Objetiva. São Paulo: Érica, 2010.
Explore +
Veja a aplicação da linguagem C em um sistema embarcado com Arduino no artigo Experimento de difração luminosa utilizando coleta de dados
totalmente automatizada por Arduino, de Tiago Destéffani Admiral, publicado na Revista Brasileira de Ensino de Física, 2020.
Veja o desenvolvimento de um sistema embarcado baseado em PIC para busca de pessoas no artigo Plataforma robótica para busca de pessoas em
locais de risco, de Edgar Natanael Gregorio e Ricardo Teixeira de Almeida, publicado na Revista de Engenharia e Pesquisa Aplicada, 2017.
Veja a aplicação de simuladores via web no desenvolvimento de ensino remoto no artigo Desenvolvimento de Laboratório Remoto Utilizando Módulo
Didático para Ensino de Microcontroladores, de Flávio Henrique Toribio Destro e Fabio Iaione, publicado no Simpósio Brasileiro de Informática na
Educação (SBIE), 2019.
https://stecine.azureedge.net/repositorio/00212ti/02574/index.html# 53/53