C++ w systemach wbudowanych. Skuteczna migracja z C do nowoczesnego C++ - Helion

ebook
Autor: Amar MahmutbegoviTytuł oryginału: C++ in Embedded Systems: A practical transition from C to modern C++
Tłumaczenie: Robert G
ISBN: 978-83-289-3561-7
stron: 328, Format: ebook
Data wydania: 2026-04-01
Księgarnia: Helion
Cena książki: 62,30 zł (poprzednio: 89,00 zł)
Oszczędzasz: 30% (-26,70 zł)
Nakład wyczerpany
Tagi: C++ - Programowanie
Programi
Spis treści
C++ w systemach wbudowanych. Skuteczna migracja z C do nowoczesnego C++ eBook -- spis treści
Przedmowa
O autorze
O korektorach merytorycznych
Wprowadzenie
Część 1. Wprowadzenie do języka C++ w programowaniu systemów wbudowanych
- Rozdział 1. Obalanie popularnych mitów na temat C++
- Wymogi techniczne
- Krótka historia języka C++
- C z klasami
- Nowoczesny C++
- Typy generyczne
- constexpr
- Nadmiar kodu i obciążenie wydajności
- Konstruktory i destruktory
- Optymalizacja
- Szablony
- RTTI i wyjątki
- Podsumowanie
- Rozdział 2. Wyzwania w systemach wbudowanych o ograniczonych zasobach
- Wymogi techniczne
- Systemy wbudowane o znaczeniu krytycznym dla bezpieczeństwa i systemy czasu rzeczywistego
- Moduł sterowania poduszkami powietrznymi i wymagania dotyczące działania w czasie rzeczywistym
- Pomiar wydajności i nieprzewidywalności oprogramowania wbudowanego
- Zarządzanie pamięcią dynamiczną
- Fragmentacja pamięci
- Wytyczne bezpieczeństwa o znaczeniu krytycznym podczas dynamicznego zarządzania pamięcią w C++
- Dynamiczne zarządzanie pamięcią w bibliotece standardowej C++
- Wyłączanie niepożądanych funkcji C++
- Podsumowanie
- Rozdział 3. Ekosystem C++ dla systemów wbudowanych
- Wymogi techniczne
- Kompilatory i środowiska programistyczne
- Środowisko programistyczne Arm Keil MDK i kompilator Arm dla systemów wbudowanych
- Kompilator IAR C/C++ i środowisko programistyczne IAR Embedded Workbench dla architektury ARM
- Kompilator GCC oraz zintegrowane środowiska programistyczne producentów
- Analizatory statyczne
- Testy jednostkowe
- Profilowanie
- Podsumowanie
- Rozdział 4. Przygotowanie środowiska programistycznego C++ dla projektu wbudowanego
- Wymogi techniczne
- Wymagania dla nowoczesnego środowiska programistycznego
- Kompilator
- Automatyzacja procesu kompilacji
- Symulator
- Edytor kodu
- Środowisko programistyczne oparte na kontenerach
- Tworzenie programu "Witaj, świecie!" przy użyciu narzędzia CMake
- Tworzenie oprogramowania wbudowanego przy użyciu narzędzia CMake
- Środowisko programistyczne oparte na kontenerach i Visual Studio Code
- Podsumowanie
Część 2. Podstawy języka C++
- Rozdział 5. Klasy - podstawowe elementy w C++
- Wymogi techniczne
- Hermetyzacja
- Metody dostępowe
- Metody statyczne
- Struktury
- Inicjalizacja i czas przechowywania
- Inicjalizacja niestatycznych elementów składowych
- Inicjalizacja statycznych elementów składowych
- Dziedziczenie i polimorfizm dynamiczny
- Funkcje wirtualne
- Polimorfizm dynamiczny
- Podsumowanie
- Rozdział 6. Poza klasami - podstawowe koncepcje C++
- Wymogi techniczne
- Przestrzenie nazw
- Nienazwane przestrzenie nazw
- Zagnieżdżone przestrzenie nazw
- Przeciążanie funkcji
- Współpraca z językiem C
- Łączenie zewnętrzne i językowe w C++
- Biblioteka standardowa C w C++
- Referencje
- Kategorie wartości
- Referencje do l-wartości
- Referencje do r-wartości
- Algorytmy i kontenery biblioteki standardowej
- Tablica
- Adaptery kontenerów
- Algorytmy
- Podsumowanie
- Rozdział 7. Wzmacnianie oprogramowania wbudowanego - praktyczne metody obsługi błędów w C++
- Wymogi techniczne
- Kody błędów i asercje
- Globalna obsługa błędów
- Asercje
- Wyjątki
- std::optional i std::expected
- Podsumowanie
Część 3. Zaawansowane koncepcje języka C++
- Rozdział 8. Tworzenie za pomocą szablonów kodu ogólnego i wielokrotnego użytku
- Wymogi techniczne
- Podstawy szablonów
- Wywołanie funkcji szablonowej
- Specjalizacja szablonu
- Metaprogramowanie z użyciem szablonów
- Koncepty
- Polimorfizm podczas kompilacji
- Wykorzystanie szablonów klas do polimorfizmu w trakcie kompilacji
- Wzorzec CRTP
- Podsumowanie
- Rozdział 9. Poprawa bezpieczeństwa typów za pomocą silnych typów
- Wymogi techniczne
- Konwersja niejawna
- Promocje i konwersje typów liczbowych
- Konwersja tablicy na wskaźnik
- Konwersja funkcji na wskaźnik
- Konwersja jawna
- Operator rzutowania const_cast
- Operator rzutowania static_cast
- Operator rzutowania dynamic_cast
- Operator rzutowania reinterpret_cast
- Silne typy
- Podsumowanie
- Rozdział 10. Tworzenie ekspresyjnego kodu za pomocą wyrażeń lambda
- Wymogi techniczne
- Podstawy wyrażeń lambda
- Przechowywanie lambdy za pomocą std::function
- Wzorzec Polecenie
- Menedżer przerwań GPIO
- Szablon klasy std::function i dynamiczna alokacja pamięci
- Podsumowanie
- Rozdział 11. Obliczenia w trakcie kompilacji
- Wymogi techniczne
- Szablony
- Specyfikator constexpr
- Przykład 1. Analizator adresów MAC
- Przykład 2. Tworzenie tablicy wyszukiwania
- Specyfikator consteval
- Podsumowanie
Część 4. Zastosowanie języka C++ do rozwiązywania problemów w systemach wbudowanych
- Rozdział 12. Tworzenie w C++ warstwy abstrakcji sprzętowej
- Wymogi techniczne
- Urządzenia peryferyjne odwzorowane w pamięci
- Urządzenia peryferyjne standardu CMSIS z odwzorowaniem w pamięci
- Urządzenia peryferyjne odwzorowane w pamięci w C++
- Bezpieczne odwzorowanie pamięci urządzeń peryferyjnych w C++
- Liczniki czasu
- Podsumowanie
- Rozdział 13. Praca z bibliotekami C
- Wymogi techniczne
- Użycie w projektach tworzonych w C++ warstwy abstrakcji sprzętowej napisanej w C
- Interfejs UART na potrzeby elastycznego projektowania oprogramowania
- Interfejs UART we wzorcu Adapter
- Wprowadzenie do klas statycznych
- Wykorzystanie techniki RAII do opakowania biblioteki littlefs utworzonej w C
- LittleFS - system plików dla mikrokontrolerów
- Klasa opakowująca C++ oparta na wzorcu RAII
- Lepsze zarządzanie plikami dzięki RAII
- Podsumowanie
- Rozdział 14. Ulepszanie pętli głównej programu za pomocą sekwencera
- Wymogi techniczne
- Pętla główna programu i powody stosowania sekwencera
- Projektowanie sekwencera
- Przechowywanie funkcji wywoływalnej
- Implementacja sekwencera
- Podsumowanie
- Rozdział 15. Praktyczne wzorce - tworzenie systemu publikowania temperatur
- Wymogi techniczne
- Wzorzec projektowy Obserwator
- Implementacja w czasie działania programu
- Implementacja w trakcie kompilacji programu
- Wykorzystanie szablonów o zmiennej liczbie argumentów
- Usprawnianie implementacji na etapie kompilacji
- Podsumowanie
- Rozdział 16. Projektowanie skalowalnych automatów skończonych
- Wymogi techniczne
- Prosta implementacja automatu skończonego
- Opisywanie stanów i zdarzeń
- Śledzenie bieżącego stanu i obsługa zdarzeń - klasa automatu skończonego
- Korzystanie z klasy ble_fsm
- Analiza danych wyjściowych
- Implementacja automatu skończonego przy użyciu wzorca projektowego Stan
- Interfejsy klas stanów automatu skończonego
- Refaktoryzacja klasy ble_fsm
- Implementacja wzorca projektowego Stan
- Wzorzec projektowy Stan
- Implementacja wzorca stanu z wykorzystaniem techniki tag dispatching
- Boost SML
- Podsumowanie
- Rozdział 17. Biblioteki i frameworki
- Wymogi techniczne
- Biblioteka standardowa
- Implementacje biblioteki standardowej w GCC
- Liczby i matematyka
- Kontenery i algorytmy
- Metaprogramowanie z użyciem szablonów
- Elementy biblioteki standardowej, których należy unikać w aplikacjach wbudowanych
- Biblioteka ETL
- Kontenery o stałej wielkości
- Użycie etl::delegate do przechowywania funkcji wywoływalnej
- Inne narzędzia z ETL
- Pigweed
- Przewodnik po bibliotece Pigweed
- RPC i Protocol Buffers
- Biblioteka CIB
- Wykorzystanie CIB do publikowania temperatury
- Rozbudowa przykładu publikującego temperaturę
- Podsumowanie
- Rozdział 18. Programowanie dla wielu platform
- Wymogi techniczne
- Znaczenie tworzenia przenośnego kodu
- Reguły projektowe SOLID
- Reguła jednej odpowiedzialności
- Reguła otwarte-zamknięte
- Zasada podstawień Barbary Liskov
- Zasada rozdzielania interfejsów
- Zasada odwrócenia zależności
- Testowalność
- Podsumowanie
