Contributors |
|
xi | |
Acknowledgments |
|
xiii | |
Chapter 1 Software Engineering for Embedded and Real- Time Systems |
|
1 | (32) |
|
|
|
2 | (5) |
|
|
7 | (5) |
|
|
12 | (3) |
|
4 Example of a Hard Real- Time System |
|
|
15 | (2) |
|
5 Real- Time Event Characteristics |
|
|
17 | (2) |
|
6 Challenges in Real- Time System Design |
|
|
19 | (3) |
|
7 The Embedded System's Software Build Process |
|
|
22 | (2) |
|
8 Distributed and Multiprocessor Architectures |
|
|
24 | (1) |
|
9 Software for Embedded Systems |
|
|
25 | (3) |
|
10 Hardware Abstraction Layers for Embedded Systems |
|
|
28 | (5) |
Chapter 2 Software Development Process |
|
33 | (56) |
|
|
|
|
34 | (3) |
|
|
37 | (2) |
|
|
39 | (3) |
|
|
42 | (6) |
|
|
48 | (1) |
|
|
49 | (3) |
|
7 Rolling It Together: Agile Development |
|
|
52 | (25) |
|
|
77 | (8) |
|
|
85 | (1) |
|
|
86 | (1) |
|
|
86 | (1) |
|
|
87 | (2) |
Chapter 3 Embedded and Multicore System Architecture-Design and Optimization |
|
89 | (12) |
|
|
|
89 | (1) |
|
2 The Right Way and the Wrong Way |
|
|
90 | (1) |
|
3 Understanding Requirements |
|
|
91 | (1) |
|
4 Mapping the Application |
|
|
92 | (4) |
|
5 Helping the Compiler and Build Tools |
|
|
96 | (2) |
|
|
98 | (3) |
Chapter 4 Basic Programming Techniques |
|
101 | (30) |
|
|
|
101 | (1) |
|
2 Reference Platform Overview |
|
|
102 | (1) |
|
|
103 | (4) |
|
4 Target System Configuration and Initialization |
|
|
107 | (9) |
|
|
116 | (13) |
|
|
129 | (1) |
|
|
129 | (2) |
Chapter 5 Programming and Implementation Guidelines |
|
131 | (22) |
|
|
|
131 | (4) |
|
2 Starting the Embedded Software Project |
|
|
135 | (8) |
|
|
143 | (8) |
|
Content Learning Exercises |
|
|
151 | (2) |
Chapter 6 Operating Systems |
|
153 | (54) |
|
|
1 Foreground/Background Systems |
|
|
155 | (1) |
|
|
156 | (2) |
|
3 R TOS (Real- Time Operating System) |
|
|
158 | (4) |
|
4 Assigning Task Priorities |
|
|
162 | (1) |
|
5 Determining the Size of a Stack |
|
|
163 | (4) |
|
|
167 | (1) |
|
|
168 | (1) |
|
|
169 | (1) |
|
|
169 | (4) |
|
|
173 | (8) |
|
11 The Clock Tick (or System Tick) |
|
|
181 | (3) |
|
|
184 | (12) |
|
|
196 | (2) |
|
|
198 | (1) |
|
|
199 | (3) |
|
|
202 | (2) |
|
|
204 | (2) |
|
|
206 | (1) |
Chapter 7 Open-Source Software |
|
207 | (38) |
|
|
|
|
|
|
|
208 | (22) |
|
|
230 | (9) |
|
|
239 | (5) |
|
|
244 | (1) |
Chapter 8 Software and Compiler Optimization for Microcontrollers, Embedded Processors, and DSPs |
|
245 | (24) |
|
|
|
246 | (1) |
|
2 Development Tools Overview |
|
|
246 | (3) |
|
3 Understanding the Embedded Target Architecture |
|
|
249 | (1) |
|
4 Basic Optimization Goals and Practices |
|
|
250 | (6) |
|
5 General Loop Transformations |
|
|
256 | (3) |
|
|
259 | (4) |
|
|
263 | (6) |
Chapter 9 Embedded Software Quality, Integration, and Testing Techniques |
|
269 | (70) |
|
|
|
270 | (1) |
|
2 Why Should We Test Software? |
|
|
270 | (1) |
|
3 How Much Testing Is Enough? |
|
|
270 | (2) |
|
4 When Should Testing Take Place? |
|
|
272 | (1) |
|
5 Who Makes the Decisions? |
|
|
272 | (1) |
|
|
273 | (29) |
|
|
302 | (13) |
|
8 Dealing With the Unusual |
|
|
315 | (17) |
|
9 Implementing a Test Solution Environment |
|
|
332 | (3) |
|
10 Summary and Conclusions |
|
|
335 | (1) |
|
|
336 | (1) |
|
|
337 | (2) |
Chapter 10 Embedded Multicore Software Development |
|
339 | (54) |
|
|
1 Symmetric and Asymmetric Multiprocessing |
|
|
340 | (3) |
|
2 Parallelism Saves Power |
|
|
343 | (2) |
|
3 Look for Parallelism Opportunities |
|
|
345 | (7) |
|
4 Multicore Application Locality |
|
|
352 | (8) |
|
5 Multicore Programming Models |
|
|
360 | (2) |
|
6 Performance and Optimization of Multicore Systems |
|
|
362 | (16) |
|
7 Language Extensions Example-OpenMP |
|
|
378 | (3) |
|
8 Pulling It All Together |
|
|
381 | (12) |
Chapter 11 Safety-Critical Development |
|
393 | (34) |
|
|
|
394 | (3) |
|
2 Project-Planning Strategies |
|
|
397 | (5) |
|
3 Faults, Failures, Hazards, and Risk Analysis |
|
|
402 | (6) |
|
4 Safety-Critical Architectures |
|
|
408 | (4) |
|
5 Software Implementation Strategies |
|
|
412 | (15) |
Chapter 12 Networking Software |
|
427 | (38) |
|
|
|
|
|
427 | (1) |
|
2 Embedded Linux Networking |
|
|
428 | (8) |
|
3 Moving From the Linux Kernel to User Space |
|
|
436 | (10) |
|
4 Life of a Packet in a Native Linux Network Stack |
|
|
446 | (2) |
|
5 Networking Performance Optimization Techniques |
|
|
448 | (11) |
|
6 Case Studies: Covering Microcontrollers to Network Processors |
|
|
459 | (4) |
|
|
463 | (1) |
|
|
463 | (2) |
Chapter 13 Internet of Things |
|
465 | (36) |
|
|
|
|
466 | (2) |
|
2 History and Device Progression |
|
|
468 | (4) |
|
|
472 | (7) |
|
|
479 | (4) |
|
5 Internet of Things Architecture |
|
|
483 | (3) |
|
6 Communications Used in Internet of Things |
|
|
486 | (8) |
|
|
494 | (2) |
|
8 Internet of Things Development Challenges |
|
|
496 | (3) |
|
|
499 | (2) |
Chapter 14 Security and Cryptography |
|
501 | (48) |
|
|
|
|
|
501 | (4) |
|
|
505 | (9) |
|
3 Life Cycle of a Secure Embedded System |
|
|
514 | (4) |
|
|
518 | (9) |
|
5 Components of Secure Embedded Systems |
|
|
527 | (19) |
|
|
546 | (1) |
|
|
546 | (1) |
|
|
546 | (3) |
Chapter 15 Machine Learning at the Edge |
|
549 | (54) |
|
|
|
550 | (1) |
|
2 What Is Artificial Intelligence |
|
|
551 | (1) |
|
3 What Is Machine Learning? |
|
|
552 | (5) |
|
4 Feeding Your Brain-Data |
|
|
557 | (6) |
|
|
563 | (5) |
|
6 k-NN (Nearest Neighbor) Algorithm |
|
|
568 | (1) |
|
|
569 | (3) |
|
|
572 | (22) |
|
9 What Is Necessary to Bring ML to the Edge? |
|
|
594 | (4) |
|
10 Edge Learning/ Training |
|
|
598 | (1) |
|
|
599 | (2) |
|
|
601 | (2) |
Performance Analysis Using NXP's i.MX R T1050 Crossover Processor and the Zephyr™ Real- Time Operating System |
|
603 | (14) |
Index |
|
617 | |