Construindo Sistemas Embarcados - 2ª Edição

Padrões de projeto para um ótimo software

Construindo Sistemas Embarcados - 2ª Edição
× Construindo Sistemas Embarcados - 2ª Edição

Construindo Sistemas Embarcados - 2ª Edição

Autor:

ISBN impresso: 978-85-7522-919-4
ISBN ebook: 978-85-7522-920-0
Ano: 2024
Páginas: 464
Preço impresso: R$ 149,00 O ebook deste livro está disponível na Amazon.

Opine sobre este livro

Descrição do livro

Interessado em desenvolver sistemas embarcados? Como eles não toleram ineficiência, esses sistemas exigem uma abordagem disciplinada de programação. Este guia de fácil leitura ajuda você a cultivar boas práticas de desenvolvimento baseadas em padrões clássicos de projeto de software e novos padrões exclusivos para programação embarcada.

Você aprenderá a construir arquitetura de sistema para processadores, não para sistemas operacionais, e descobrirá técnicas para lidar com dificuldades de hardware, alterações de projeto e requisitos de fabricação.

Escrito por uma especialista que criou sistemas que vão de scanners de DNA a brinquedos infantis, este livro é ideal para programadores intermediários e experientes, independentemente da plataforma usada. Esta segunda edição expandida inclui novos capítulos sobre IoT e sensores em rede, motores e movimento, depuração, estratégias de tratamento de dados e muito mais.

• Otimize seu sistema para reduzir custos e aumentar o desempenho

• Desenvolva uma arquitetura que torne seu software robusto em ambientes com recursos limitados

• Explore sensores, displays, motores e outros dispositivos de E/S

• Reduza a RAM, espaço de código, ciclos de processador e consumo de energia

• Aprenda a interpretar esquemas, fichas técnicas e requisitos de energia

• Descubra como implementar matemática complexa em pequenos processadores

• Projete sistemas embarcados eficazes para IoT e sensores em rede

Ver menos ▲

Sumário

Sumário

  • Prefácio
  • Capítulo 1 ■ Introdução
  • Desenvolvimento de sistemas embarcados
    • Compiladores e linguagens
    • Depuração
    • Restrições de recursos
    • Princípios para enfrentar esses desafios
  • Protótipos e placas maker
  • Leitura adicional
  • Capítulo 2 ■ Criando uma arquitetura de sistema
  • Introdução
  • Criando diagramas de sistema
    • Diagrama de contexto
    • Diagrama de blocos
    • Organograma
    • Diagrama de camadas
  • Projetando para mudança
    • Encapsular módulos
    • Delegação de tarefas
    • Interface de driver: Open, Close, Read, Write, IOCTL
    • Padrão do adaptador
  • Criando interfaces
    • Exemplo: uma interface de log
  • Um ambiente de teste (sandbox) para brincar
  • De volta à prancheta
  • Leituras adicionais
  • Capítulo 3 ■ Colocando as mãos no hardware
  • Integração hardware/software
    • Fluxo ideal de projeto
    • Projeto de hardware
    • Validação da placa
  • Lendo uma ficha técnica
    • Seções da ficha técnica que são úteis para você quando as coisas dão errado
    • Seções da ficha técnica para desenvolvedores de software
    • Avaliando componentes usando a ficha técnica
  • Seu processador é uma linguagem
  • Lendo um esquema
  • Pratique a leitura de um esquema: Arduino!
  • Mantenha sua placa segura
  • Criando sua própria caixa de ferramentas de depuração
    • Multímetro digital
    • Osciloscópios e analisadores lógicos
    • Configurando um osciloscópio
  • Testando o hardware (e o software)
    • Construindo testes
    • Exemplo de teste de memória flash
    • Comando e resposta
    • Padrão de comando
  • Lidando com erros
    • Metodologia consistente
    • Erro ao verificar o fluxo
    • Biblioteca de tratamento de erros
    • Depurando erros de timing
  • Leituras adicionais
  • Capítulo 4 ■ Entradas, saídas e timers
  • Lidando com registradores
    • Matemática binária e hexadecimal
    • Operações bit a bit
    • Testar, configurar, limpar e alternar
  • Alternando uma saída
    • Configurando o pino para ser uma saída
    • Acendendo o LED
    • Piscando o LED
    • Solução de problemas
  • Separando o hardware da ação
    • Arquivo de cabeçalho específico da placa
    • Código de tratamento de E/S
    • Loop principal
    • Padrão fachada
  • A entrada em E/S
  • Pressionamento momentâneo do botão
    • Interrupção com o pressionamento de um botão
    • Configurando a interrupção
    • Filtrando o ruído dos interruptores
  • Incerteza em tempo de execução
    • Aumentando a flexibilidade do código
    • Injeção de dependência
  • Usando um timer
    • Timers
    • Calculando
    • Mais matemática: frequência desejada difícil
    • Uma longa espera entre os tiques do timer
    • Usando um timer
  • Usando modulação por largura de pulso
  • Enviando o produto
  • Leituras adicionais
  • Capítulo 5 ■ Interrupções
  • Uma galinha pressiona um botão
  • Ocorre uma IRQ
    • Interrupções não mascaráveis
    • Prioridade da interrupção
    • Interrupções aninhadas
  • Salvar o contexto
  • Obter a ISR da tabela de vetores
    • Inicializando a tabela de vetores
    • Procurar a ISR
  • Chamar a ISR
    • Múltiplas origens para uma interrupção
    • Desativando interrupções
    • Seções críticas
  • Restaurar o contexto
  • Configurando interrupções
  • Quando usar e quando não usar interrupções
    • Como evitar o uso de interrupções
    • Consulta (Polling)
    • Tique do sistema
    • Eventos baseados no tempo
    • Um escalonador muito pequeno
  • Leituras adicionais
  • Capítulo 6 ■ Gerenciando o fluxo de atividade
  • Noções básicas de escalonamento e sistema operacional
    • Tarefas
    • Comunicação entre tarefas
    • Evitando condições de corrida
    • Inversão de prioridade
  • Máquinas de estado
    • Exemplo de máquina de estado: controlador de semáforo
    • Máquina de estado centrada no estado
    • Máquina de estado centrada no estado com transições ocultas
    • Máquina de estado centrada no evento
    • Padrão de estado
    • Máquina de estado baseada em tabela
    • Escolhendo uma implementação de máquina de estado
  • Watchdog
  • Loops principais
    • Consultando e aguardando
    • Interrupção do timer
    • Interrupções fazem tudo
    • Interrupções causam eventos
    • Escalonador muito pequeno
  • Objetos ativos
  • Leituras adicionais
  • Capítulo 7 ■ Comunicação com periféricos
  • Comunicação serial
    • TTL serial
    • RS-232 serial
    • SPI
    • I2C e TWI
    • 1-fio
    • Paralela
    • SPI dual e quádruplo
    • USB
    • Considerando outros protocolos
  • Comunicações na prática
    • Exemplo de ADC externo: dados prontos com SPI
    • Use uma FIFO se disponível
    • Acesso direto à memória (DMA) é mais rápido
    • Exemplo de ADC externo: SPI e DMA
  • Buffers circulares
  • Leituras adicionais
  • Capítulo 8 ■ Construindo um sistema
  • Matrizes de teclas
  • Displays segmentados
  • Displays de pixels
    • Recursos de display
    • Dados mutáveis? Padrões Flyweight e de fábrica
  • Memória flash externa
    • Recursos de display
    • EEPROMs emuladas e armazenamento KV
    • Pequenos sistemas de arquivo
    • Armazenamento de dados
  • Sinais analógicos
  • Sensores digitais
  • Tratamento de dados
    • Alterando algoritmos: estratégia
    • Estágios do algoritmo: pipelines e filtros
  • Calculando necessidades: velocidades e feeds
    • Largura de banda de dados
    • Taxa de transferência e buffer de memória
  • Leituras adicionais
  • Capítulo 9 ■ Arranjando problemas
  • Lutando contra as otimizações do compilador
  • Bugs impossíveis
    • Reproduzir o bug
    • Explicar o bug
  • Criando caos e falhas graves
    • Dividindo por zero
    • Conversando com coisas que não existem
    • Executando instruções indefinidas
    • Acesso incorreto à memória (acesso desalinhado)
    • Retornando um ponteiro para memória em pilha
    • Estouros de pilha e estouros de buffer
  • Depurando falhas graves
    • Registradores do processador: o que deu errado?
    • Criando um core dump
    • Usando o core dump
  • Erros simplesmente muito difíceis
  • Consequências de ser inteligente
  • Leituras adicionais
  • Capítulo 10 ■ Construindo dispositivos conectados
  • Conectando-se remotamente
    • Diretamente: Ethernet e WiFi
    • Através de um gateway
    • Via uma rede mesh
  • Comunicação robusta
    • Versão!
    • Somas de verificação, CRCs, hashes
    • Criptografia e autenticação
    • Análise de risco
  • Atualizando código
    • Segurança de atualização de firmware
    • Vários trechos de código
    • Bote salva-vidas de reserva
    • Implantação gradual
  • Gerenciando sistemas grandes
  • Fabricação
  • Leituras adicionais
  • Capítulo 11 ■ Fazendo mais com menos
  • Necessidade de mais espaço de código
    • Lendo um arquivo de mapa (Parte 1)
    • Processo de eliminação
    • Bibliotecas
    • Funções x Macros: quais são menores?
    • Constantes e strings
  • Necessidade de mais RAM
    • Remover malloc
    • Lendo um arquivo de mapa (Parte 2)
    • Registradores e variáveis locais
    • Cadeias de funções
    • Prós e contras das variáveis globais: RAM x pilha
    • Sobreposições de memória inteligentes
  • Necessidade de mais velocidade
    • Criando um perfil
    • Otimizando os ciclos do processador
    • Considere as instruções
  • Resumo
  • Leituras adicionais
  • Capítulo 12 ■ Matemática
  • Identificando operações rápidas e lentas
    • Calculando uma média
    • Diferentes médias: acumulada e mediana
  • Usando um algoritmo existente
  • Projetando e modificando Algoritmos
    • Fatorar polinômios
    • Série de Taylor
    • Dividindo por uma constante
    • Ajustando a escala da entrada
    • Tabelas de consulta
  • Falsos números de ponto flutuante
    • Números racionais
    • Precisão
    • Adição (e subtração)
    • Multiplicação (e divisão)
  • Aprendizado de máquina
  • Procure a resposta!
  • Leituras adicionais
  • Capítulo 13 ■ Reduzindo o consumo de energia
  • Compreendendo o consumo de energia
    • Medindo o consumo de energia
    • Projetando para menor consumo de energia
  • Apague a luz ao sair da sala
    • Desligue periféricos
    • Desligue dispositivos de E/S não utilizados
    • Desligue os subsistemas do processador
    • Desacelere para economizar energia
  • Suspendendo o processador
    • Modelo de fluxo de código baseado em interrupção
    • Uma análise mais detalhada do loop principal
    • Watchdog do processador
    • Evite despertares frequentes
    • Processadores encadeados
  • Leituras adicionais
  • Capítulo 14 ■ Motores e movimento
  • Criando movimento
  • Codificação de posição
  • Acionando um motor CC simples com PWM
  • Controle do motor
    • Controle PID
    • Perfis de movimento
  • Dez coisas que odeio nos motores
  • Leituras adicionais
  • Índice remissivo
Ver sumário completo ▼

Sobre o autor

Elecia White

Elecia White é fundadora e principal engenheira de sistemas embarcados na Logical Elegance, Inc. Ela trabalhou com monitores ICU, unidades de medição inercial para aviões e carros de corrida, brinquedos educativos e diversos outros dispositivos médicos, científicos e de consumo. Formada pelo Harvey Mudd College, em Claremont, Califórnia. Elecia… Ver perfil completo ▶

Títulos relacionados