Log In
Or create an account ->
Imperial Library
Home
About
News
Upload
Forum
Help
Login/SignUp
Index
Title Page
Copyright and Credits
Embedded Programming with Modern C++ Cookbook
Dedication
About Packt
Why subscribe?
Contributors
About the author
About the reviewer
Packt is searching for authors like you
Preface
Who this book is for
What this book covers
To get the most out of this book
Download the example code files
Download the color images
Conventions used
Sections
Getting ready
How to do it…
How it works…
There's more…
See also
Get in touch
Reviews
Fundamentals of Embedded Systems
Exploring embedded systems
How are they different from desktop or web applications?
Types of embedded systems
Microcontrollers
System on Chip
Application-specific integrated circuits
Field programmable gate arrays
Working with limited resources
Looking at performance implications
Working with different architectures
Endianness
Alignment
Fixed-width integer types
Working with hardware errors
Early versions of hardware
Hardware is unreliable
The influence of environmental conditions
Using C++ for embedded development
You don't pay for what you don't use
Object-oriented programming to time the code complexity
Resource acquisition is initialization
Exceptions
The powerful standard library
Threads and a memory model as part of the language specification
Deploying software remotely
Running software remotely
Logging and diagnostics
Summary
Setting Up the Environment
Setting up the build system in a Docker container
How to do it...
How it works...
There's more...
Working with emulators
How to do it...
How it works...
There's more...
Cross-compilation
Getting ready
How to do it...
How it works...
There's more...
Connecting to the embedded system
Getting ready
How to do it...
How it works...
There's more...
Debugging embedded applications
Getting ready
How to do it...
How it works...
There's more...
Using gdbserver for remote debugging
Getting ready
How to do it...
How it works...
There's more...
Using CMake as a build system
Getting ready
How to do it...
How it works...
There's more...
Working with Different Architectures
Exploring fixed-width integer types
How to do it...
How it works...
There's more...
Working with the size_t type
How to do it...
How it works...
There's more...
Detecting the endianness of the platform
How to do it...
How it works...
There's more...
Converting the endianness
How to do it...
How it works...
Working with data alignment
How to do it...
How it works...
There's more...
Working with packed structures
How to do it...
How it works...
There's more...
Aligning data with cache lines
How to do it...
How it works...
There's more...
Handling Interrupts
Data polling
Interrupt service routines
General considerations for ISRs
8051 microcontroller interrupts
Implementing an interrupt service routine
How to do it...
How it works...
Generating a 5 kHz square signal using 8-bit auto-reload mode
How to do it...
How it works...
Using Timer 1 as an event counter to count a 1 Hz pulse
How to do it...
How it works...
There's more...
Receiving and transmitting data serially
How to do it...
How it works...
There's more...
Debugging, Logging, and Profiling
Technical requirements
Running your applications in the GDB
How to do it...
How it works...
There's more...
Working with breakpoints
How to do it...
How it works...
There's more...
Working with core dumps
How to do it...
How it works...
There's more...
Using gdbserver for debugging
Getting ready...
How to do it...
How it works...
Adding debug logging
How to do it...
How it works...
There's more...
Working with debug and release builds
How to do it...
How it works...
There's more...
Memory Management
Using dynamic memory allocation
How to do it...
How it works...
Exploring object pools
How to do it...
How it works...
There's more...
Using ring buffers
How to do it...
How it works...
Using shared memory
How to do it...
How it works...
There's more...
Using specialized memory
How to do it...
How it works...
There's more...
Multithreading and Synchronization
Exploring thread support in C++
How to do it...
How it works...
Exploring data synchronization
How to do it...
How it works...
There's more...
Using condition variables
How to do it...
How it works...
There's more...
Using atomic variables
How to do it...
How it works...
There's more...
Using the C++ memory model
How to do it...
How it works...
There's more...
Exploring lock-free synchronization
How to do it...
How it works...
There's more...
Using atomic variables in shared memory
How to do it...
How it works...
Exploring async functions and futures
How to do it...
How it works...
There's more...
Communication and Serialization
Using inter-process communication in applications
How to do it...
How it works...
There's more...
Exploring the mechanisms of inter-process communication
Getting ready
How to do it...
How it works...
There's more...
Learning about message queue and publisher-subscriber models
How to do it...
How it works...
There's more...
Using C++ lambdas for callbacks
How to do it...
How it works...
There's more...
Exploring data serialization
How to do it...
How it works...
There's more...
Using the FlatBuffers library
How to do it...
How it works...
There's more...
Peripherals
Controlling devices connected via GPIO
How to do it...
How it works...
Exploring pulse-width modulation
How to do it...
How it works...
There's more...
Using ioctl to access a real-time clock in Linux
How to do it...
How it works...
There's more
Using libgpiod to control GPIO pins
How to do it...
How it works...
There's more...
Controlling I2C peripheral devices
How to do it...
How it works...
There's more...
Reducing Power Consumption
Technical requirements
Exploring power-saving modes in Linux
How to do it...
How it works...
There's more...
Waking up using RTC
How to do it...
How it works...
There's more...
Controlling the autosuspend of USB devices
How to do it...
How it works...
There's more...
Configuring CPU frequency
How to do it...
How it works...
There's more...
Using events for waiting
How to do it...
How it works...
There's more...
Profiling power consumption with PowerTOP
How to do it...
How it works...
There's more...
Time Points and Intervals
Exploring the C++ Chrono library
How to do it...
How it works...
There's more...
Measuring time intervals
How to do it...
How it works...
There's more...
Working with delays
How to do it...
How it works...
There's more...
Using the monotonic clock
How to do it...
How it works...
There's more...
Using POSIX timestamps
How to do it...
How it works...
There's more...
Error Handling and Fault Tolerance
Working with error codes
How to do it...
How it works...
There's more...
Using exceptions for error handling
How to do it...
How it works...
There's more...
Using constant references when catching exceptions
How to do it...
How it works...
There's more...
Tackling static objects
How to do it...
How it works...
Working with watchdogs
How to do it...
How it works...
Exploring heartbeats for highly available systems
How to do it...
How it works...
There's more...
Implementing software debouncing logic
How to do it...
How it works...
Guidelines for Real-Time Systems
Using real-time schedulers in Linux
How to do it...
How it works...
Using statically allocated memory
How to do it...
How it works...
There's more...
Avoiding exceptions for error handling
How to do it...
How it works...
There's more...
Exploring real-time operating systems
How to do it...
How it works...
There's more...
Guidelines for Safety-Critical Systems
Using the return values of all functions
How to do it...
How it works...
There's more...
Using static code analyzers
How to do it...
How it works...
There's more...
Using preconditions and postconditions
How to do it...
How it works...
There's more...
Exploring the formal validation of code correctness
How to do it...
How it works...
There's more...
Microcontroller Programming
Setting up the development environment
How to do it...
How it works...
There's more...
Compiling and uploading a program
How to do it...
How it works...
There's more...
Debugging microcontroller code
How to do it...
How it works...
Other Books You May Enjoy
Leave a review - let other readers know what you think
← Prev
Back
Next →
← Prev
Back
Next →