Software Engineering for Embedded Systems, Training Workshop
The field of embedded software engineers has seen quite a resurgence over the past decade.
This is due in large part to the emergence of 5G technology, which has given rise to the Internet of Things (IoT) massive connectivity, and the coming of age of smart wearable devices.
Embedded systems are typically popular in medical science, consumer electronics, manufacturing science, aviation, automotive technology.
A typical embedded system requires a wide range of programming tools, microprocessors and operating systems. Embedded software engineering, performed by embedded software engineers, needs to be tailored to the needs of the hardware that it has to control and run on.
The software and operating system requirements of an embedded system is also different from a traditional computer based system. Typically embedded systems use basic embedded system software such as C, C++, ADA, etc. Some specialized embedded systems may use OS such as Windows CE, LINUX, TreadX, Nucleus RTOS, OSE, etc.
Embedded software engineering differs from traditional application development in terms of the additional consideration to external factors such as temperature and other environmental factors that may affect performance.
Like so many systems engineering areas, the embedded software engineer’s job has changed dramatically over the past two decades and continues to evolve.
In the early days of embedded systems, developers used “simple” 8-bit or 16-bit architectures that a developer could master over the course of several months during a development cycle. Over the past several years, many teams have moved to more complex 32-bit architectures.
They don’t just include a few peripherals for sampling sensors and communicating, but also hardware for USB, external memory, DMA, TCP/IP, Bluetooth, and many other peripherals that would take a developer perhaps years to truly master.
Bottom line: Embedded systems have started to become extremely complex
Embedded software is the first layer of code that runs on a device. You can think of it as BIOS on a PC. Embedded engineers write code, but unlike software engineers, they need a profound understand of the hardware it runs on — an embedded engineer knows the schematics of hardware and how chip datasheets relate to the code written for them.
Embedded software engineers determine the smallest possible number of drivers the device needs to run the software. Embedded software is generally self-contained and only runs a single program.
Just about all devices being produced today have underlying software that makes them run. In fact, you can think of everything from toasters and digital TVs to flashlights and smartwatches as computers.
This has become the area of focus among embedded software engineers. Some see the embedded software engineer profession as a kind of hybrid between electrical engineers and software engineers.
Software Engineering for Embedded Systems, Training Workshop by Tonex
Software Engineering for Embedded Systems training workshop is a 4-day training workshop that provides the techniques and technologies in software engineering to optimally design and implement an embedded system. Participants will learn about key embedded systems, software engineering problems/issues and references to their solution.
In this course, learn about core methods and how to apply them, examples that demonstrate timeless implementation details, case studies, design guidelines and trade-offs.
Course Content for Software Engineering for Embedded Systems
Software Engineering for Embedded and Real-Time Systems
1 Software Engineering
2 Embedded Systems
3 Real-Time Systems
4 Example of a Hard Real-Time System
5 Real-Time Event Characteristics
6 Challenges in Real-Time System Design
7 The Embedded System’s Software Build Process
8 Distributed and Multiprocessor Architectures
9 Software for Embedded Systems
10 Hardware Abstraction Layers for Embedded Systems
Software Development Process
1 Getting Started
7 Rolling It Together: Agile Development
8 Advanced Topics
Embedded and Multicore System Architecture—Design and Optimization
2 The Right Way and the Wrong Way
3 Understanding Requirements
4 Mapping the Application
5 Helping the Compiler and Build Tools
6 Power Optimization
Basic Programming Techniques
2 Reference Platform Overview
3 SDK Installation
4 Target System Configuration and Initialization
5 Programming Examples
Programming and Implementation Guidelines
2 Starting the Embedded Software Project
3 Variable Structure
Content Learning Exercises
1 Foreground/Background Systems
2 Real-Time Kernels
3 RTOS (Real-Time Operating System)
4 Assigning Task Priorities
5 Determining the Size of a Stack
6 Preemptive Scheduling
7 Scheduling Points
8 Round-Robin Scheduling
9 Context Switching
10 Interrupt Management
11 The Clock Tick (or System Tick)
12 Resource Management
14 Bilateral Rendez-vous
15 Message Passing
16 Flow Control
17 Clients and Servers
Software and Compiler Optimization for Microcontrollers, Embedded Processors, and DSPs
2 Development Tools Overview
3 Understanding the Embedded Target Architecture
4 Basic Optimization Goals and Practices
5 General Loop Transformations
6 Code Size Optimization
7 Data Structures
9: Embedded Software Quality, Integration, and Testing Techniques
1 What Is Software Test?
2 Why Should We Test Software?
3 How Much Testing Is Enough?
4 When Should Testing Take Place?
5 Who Makes the Decisions?
6 Available Techniques
7 Setting the Standard
8 Dealing With the Unusual
9 Implementing a Test Solution Environment
10 Summary and Conclusions
10: Embedded Multicore Software Development
1 Symmetric and Asymmetric Multiprocessing
2 Parallelism Saves Power
3 Look for Parallelism Opportunities
4 Multicore Application Locality
5 Multicore Programming Models
6 Performance and Optimization of Multicore Systems
7 Language Extensions Example—OpenMP
8 Pulling It All Together
2 Project-Planning Strategies
3 Faults, Failures, Hazards, and Risk Analysis
4 Safety-Critical Architectures
5 Software Implementation Strategies
2 Embedded Linux Networking
3 Moving From the Linux Kernel to User Space
4 Life of a Packet in a Native Linux Network Stack
5 Networking Performance Optimization Techniques
6 Case Studies: Covering Microcontrollers to Network Processors
Internet of Things
2 History and Device Progression
4 Enabling Technologies
5 Internet of Things Architecture
6 Communications Used in Internet of Things
7 Data Analytics
8 Internet of Things Development Challenges
Security and Cryptography
1 What Is Security?
3 Life Cycle of a Secure Embedded System
4 Threat Analysis
5 Components of Secure Embedded Systems
15: Machine Learning at the Edge
2 What Is Artificial Intelligence
3 What Is Machine Learning?
4 Feeding Your Brain—Data
5 Support Vector Machine
6 k-NN (Nearest Neighbor) Algorithm
7 Decision Trees
8 Neural Nets
9 What Is Necessary to Bring ML to the Edge?
10 Edge Learning/Training
Performance Analysis Using NXP’s i.MX RT1050 Crossover Processor and the Zephyr™ Real-Time Operating System
A.2 Configuration Information
A.3 Scope of Analysis
A.4 Analysis Results
A.5 Summary and Conclusions
Software Engineering for Embedded Systems, Training Workshop