C++ em Sistemas Embarcados

Uma transição prática de C para C++ moderno

C++ em Sistemas Embarcados
× C++ em Sistemas Embarcados

C++ em Sistemas Embarcados

VER AMOSTRA

Autor:

ISBN impresso: 978-85-7522-986-6
ISBN ebook: 978-85-7522-987-3
Ano: 2026
Páginas: 328
Preço impresso: R$ 119,00 O ebook deste livro está disponível na Amazon.

1 opinião | Opine sobre este livro

Descrição do livro

A transição de C pode ser desafiadora, com preocupações sobre sobrecarga para o desempenho, complexidade adicional e ferramentas desconhecidas. Abordando esses desafios, Amar Mahmutbegovic, um defensor de C++ moderno no desenvolvimento embarcado, mostra como podemos nos beneficiar de abstrações de custo zero, verificações de tempo de compilação e poderosos recursos da linguagem para preservar o desempenho, chegando ao mesmo tempo a um código mais seguro e limpo.

Este livro preenche a lacuna entre C tradicional e C++ avançado, e o ajudará a manter a eficiência exigida dos desenvolvedores C, além de fornecer a segurança e a expressividade de C++ moderno.

Começando com uma configuração de ambiente de desenvolvimento moderno, que inclui um contêiner Docker para a replicação contínua dos exemplos, você superará os obstáculos de usar a biblioteca padrão de C++ em ambientes com restrição de memória e se familiarizará com a ETL (Embedded Template Library) como alternativa. O livro o guiará por conceitos essenciais de C++ antes de explorar tópicos avançados, como os templates, a tipagem forte, a manipulação de erros, a computação no tempo de compilação e o RAII. Com a ajuda de exemplos práticos, você implementará um sequenciador, escreverá uma HAL com segurança de tipos e aplicará padrões como Command, State e Observer para resolver problemas comuns de desenvolvimento embarcado.

Quando chegar no fim do livro, você terá aprendido a aplicar C++ moderno para desenvolver um firmware robusto e modular com desempenho igual ou superior às soluções codificadas manualmente em C.

Você aprenderá a

• Desconstruir mitos e concepções errôneas sobre o uso de C++ em sistemas embarcados.

• Definir uma automação de build personalizada para C++ em ambientes restritos.

• Usar a tipagem forte para melhorar a segurança de tipos.

• Aplicar técnicas do C++ moderno, como o RAII (Resource Acquisition Is Initialization).

• Usar a DSL (Domain Specific Language) com um exemplo prático que emprega o Boost SML.

• Implementar melhores práticas de desenvolvimento de software, incluindo o princípio SOLID, no desenvolvimento embarcado.

Ver menos ▲

Sumário

Sumário

  • Prefácio
  • PARTE I: Introdução ao C++ no desenvolvimento embarcado
  • CAPÍTULO 1: Desfazendo mitos comuns sobre C++
  • Requisitos técnicos
  • Uma breve história do C++
  • C with Classes
    • C++ moderno
    • Tipos genéricos
    • constexpr
  • Inchaço e sobrecarga no runtime
    • Construtores e destrutores
    • Otimização
    • Templates
    • RTTI e exceções
  • Resumo
  • CAPÍTULO 2: Desafios de sistemas embarcados com recursos limitados
  • Requisitos técnicos
  • Sistemas embarcados críticos de segurança e de tempo real rigoroso
    • Unidade de controle de airbag e os requisitos de tempo real
    • Medindo o desempenho do firmware e o não determinismo
  • Gerenciamento dinâmico de memória
    • Fragmentação de memória
    • Diretrizes críticas de segurança para o gerenciamento dinâmico de memória em C++
    • Gerenciamento dinâmico de memória na biblioteca padrão do C++
  • Desativando recursos indesejados do C++
  • Resumo
  • CAPÍTULO 3: Ecossistema de C++ embarcado
  • Requisitos técnicos
  • Compiladores e ambientes de desenvolvimento
    • Arm Keil MDK e Arm Compiler for Embedded
    • IAR C/C++ Compiler e IAR Embedded Workbench for Arm
    • IDEs suportados pelo fornecedor e o GCC
  • Analisadores estáticos
  • Teste de unidade
  • Perfilamento
  • Resumo
  • CAPÍTULO 4: Definindo o ambiente de desenvolvimento para um projeto C++ embarcado
  • Requisitos técnicos
  • Requisitos para um ambiente moderno de desenvolvimento de software
    • Compilador
    • Automação de build
    • Simulador
    • Editor de código
  • Ambiente de desenvolvimento conteinerizado
    • Construindo o programa Hello, World! usando o CMake
    • Construindo um firmware usando o CMake
  • Ambiente de desenvolvimento conteinerizado e o VS Code
  • Resumo
  • PARTE II: Fundamentos de C++
  • CAPÍTULO 5: Classes – construindo blocos de aplicações C++
  • Requisitos técnicos
  • Encapsulamento
    • Setters e getters
    • Métodos estáticos
    • Estruturas
  • Duração do armazenamento e inicialização
    • Inicialização de membros não estáticos
    • Inicialização de membros estáticos
  • Herança e polimorfismo dinâmico
    • Funções virtuais
    • Polimorfismo dinâmico
  • Resumo
  • CAPÍTULO 6: Além das classes – conceitos primordiais de C++
  • Requisitos técnicos
  • Namespaces
    • Namespaces não nomeados
    • Namespaces aninhados
  • Sobrecarga de funções
  • Interoperabilidade com C
    • Vinculação externa e de linguagens em C++
    • Biblioteca padrão do C em C++
  • Referências
    • Categorias de valor
    • Referências lvalue
    • Referências rvalue
  • Contêineres e algoritmos da biblioteca padrão
    • Array
    • Adaptadores de contêiner
    • Algoritmos
  • Resumo
  • CAPÍTULO 7: Fortalecendo o firmware – métodos práticos de manipulação de erros em C++
  • Requisitos técnicos
  • Códigos de erro e asserções
    • Tratadores de erros globais
    • Asserções
  • Exceções
  • std::optional e std::expected
  • Resumo
  • PARTE III: Conceitos avançados de C++
  • CAPÍTULO 8: Construindo código genérico e reutilizável com templates
  • Requisitos técnicos
  • Aspectos básicos dos templates
    • Fazendo uma chamada à função de template
    • Especialização de template
  • Metaprogramação com templates
  • Concepts
  • Polimorfismo no tempo de compilação
    • CRTP (curiously recurring template pattern)
  • Resumo
  • CAPÍTULO 9: Melhorando a segurança de tipos com tipos fortes
  • Requisitos técnicos
  • Conversão implícita
    • Promoções e conversões numéricas
    • Conversão de array para ponteiro
    • Conversão de função para ponteiro
  • Conversão explícita
    • const_cast
    • static_cast
    • dynamic_cast
    • reinterpret_cast
  • Tipos fortes
  • Resumo
  • CAPÍTULO 10: Escrevendo código expressivo com lambdas
  • Requisitos técnicos
  • Aspectos básicos das expressões lambda
  • Armazenando lambdas usando std::function
    • Padrão command
    • Gerenciador de interrupção de GPIO
  • std::function e alocação dinâmica de memória
  • Resumo
  • CAPÍTULO 11: Computação em tempo de compilação
  • Requisitos técnicos
  • Templates
  • Especificador constexpr
    • Exemplo 1 – Analisador de endereço MAC
    • Exemplo 2 – Gerando uma tabela de consulta
  • Especificador consteval
  • Resumo
  • PARTE IV: Aplicando C++ à solução de problemas no domínio embarcado
  • CAPÍTULO 12: Escrevendo uma HAL C++
  • Requisitos técnicos
  • Periféricos mapeados na memória
    • Periféricos mapeados na memória via CMSIS
    • Periféricos mapeados na memória em C++
    • Periféricos type-safe mapeados na memória em C++
  • Timers
  • Resumo
  • CAPÍTULO 13: Trabalhando com bibliotecas C
  • Requisitos técnicos
  • Usando a HAL C em projetos C++
    • Interface UART para design de software flexível
    • A interface UART no padrão Adapter
  • Introdução às classes estáticas
  • Usando o RAII para encapsular a biblioteca C littlefs
    • LittleFS – um sistema de arquivos para microcontroladores
    • Introdução ao encapsulador C++ baseado em RAII
    • Gerenciamento de arquivos mais limpo com o RAII
  • Resumo
  • CAPÍTULO 14: Melhorando o superloop com sequenciador
  • Requisitos técnicos
  • O superloop e a motivação para o uso de um sequenciador
  • Projetando um sequenciador
  • Armazenando um callable
  • Implementando um sequenciador
  • Resumo
  • CAPÍTULO 15: Padrões práticos – construindo um publicador de temperatura
  • Requisitos técnicos
  • Padrão Observer
  • Implementação no runtime
  • Implementação no tempo de compilação
    • Usando templates variádicos
    • Melhorando a implementação de tempo de compilação
  • Resumo
  • CAPÍTULO 16: Projetando máquinas de estados finitos escaláveis
  • Requisitos técnicos
  • FSM – uma implementação simples
    • Descrevendo estados e eventos
    • Rastreando o estado atual e manipulando eventos – a classe da FSM
    • Usando a classe ble_fsm
    • Analisando a saída
  • FSM – implementação com o uso do padrão State
    • Entendendo as interfaces de classe state
    • Refatorando a classe ble_fsm
    • Implementando o padrão State
    • Padrão de projeto State
  • Implementação do padrão State usando tag dispatching
  • Boost SML
  • Resumo
  • CAPÍTULO 17: Bibliotecas e frameworks
  • Requisitos técnicos
  • Biblioteca padrão
    • Implementações autônoma e hospedada no GCC
    • Cabeçalhos numéricos e matemáticos
    • Contêineres e algoritmos
    • Metaprogramação com templates
    • Partes da biblioteca padrão a serem evitadas em aplicações embarcadas
  • Embedded template library
    • Contêineres de tamanho fixo
    • Armazenando um callable com etl::delegate
    • Outros utilitários fornecidos pela ETL
  • Pigweed
    • Tutorial Sense do Pigweed
    • RPC e protocol buffers
  • Compile-time Inicialization and Build
    • Usando o CIB no exemplo de um publicador de temperatura
    • Estendendo o exemplo do publicador de temperatura
  • Resumo
  • CAPÍTULO 18: Desenvolvimento multiplataforma
  • Requisitos técnicos
  • Importância de escrever código portável
  • Princípios de design SOLID
  • Testabilidade
  • Resumo
  • ÍNDICE REMISSIVO
Ver sumário completo ▼

Opinião dos leitores

Djan de A d R

Muito bom livro, dicas bem interessantes para quem cogita empregar C++ em sistemas embarcados.

Ver todas ▼