Best Practices for Developing Real-time Embedded Systems
Presented by Jacob Beningo
Development teams are always under pressure to deliver faster and at lower costs, but this is becoming more challenging as system complexity has risen exponentially with features for IoT and Machine Learning. The increased complexity can easily handcuff a development team and lead to not just longer development cycles with higher costs but also lower quality products.
In this session, we will explore best practices for developing real-time embedded systems that will help the modern developer stay on track and produce a quality product within their development cycle. We will explore best practices ranging from how to properly architect a system for scalability, how to manage a development cycle, secure and test a system. We will also discuss best practices for using frameworks and open source software.
Operating Systems for Embedded Applications
Presented by Colin WallsMost modern embedded applications employ and operating system of some sort. We will look at how operating systems work - the scheduler and various services provided by an OS to the application code - and at the options open for OS selection. We will also compare the use of commercial, open source and in-house products.
Modern Embedded Software Goes Beyond the RTOS
Presented by Miro Samek
Some of the most difficult problems with real-time and embedded programing are related to concurrent code execution as well as code organization, which all too often degenerates into "spaghetti code". These problems are usually intermittent, subtle, hard-to-reproduce, hard-to-isolate, hard-to-debug, and hard-to-remove. They pose the highest risk to the project schedule.
This session presents a set of best practices of concurrent programming, which are collectively known as the active object (or actor) design pattern. In this pattern, applications are built from event-driven, non-blocking, asynchronous, encapsulated threads (active objects), with the internal behavior of each active object controlled by a state machine.
While active objects can be implemented manually on top of a traditional RTOS, a better way is to use an active object framework. You will see how this leads to inversion of control, enables architectural reuse, and allows the framework to automatically enforce the best practices.
In the second part, the session will introduce modern hierarchical state machines as the powerful "spaghetti reducers". You will see how state machines complement active objects and enable graphical modeling and automatic code generation.
The session will utilize hands-on demonstrations using EFM32 Pearl-Gecko ARM Cortex-M4 board, the QP/C real-time embedded framework and the QM modeling and code-generation tool.
Implementing a Simultaneous Localization and Mapping (SLAM) system for Robotics/Unmanned Vehicles
Presented by Mike AndersonAs robotics and unmanned vehicles like drones start to proliferate, many developers find that they need a means of fixing the device to a specific location and then have the device navigate to a destination while avoiding obstacles. In addition, we frequently want the device to create a map of the surrounding area for future reference. In order to most efficiently accomplish these goals, we need to create a SLAM for the device. In this session, we will discuss the various approaches and requirements for 3D SLAMs and how they are constructed. We will address implementations ranging from autonomous cars down to robots based on platforms such as the Raspberry Pi.
Developing embedded real-time applications with heterogeneous multiprocessing systems
Presented by Sergio Prado
There are a lot of embedded applications that have conflicting requirements like high throughput and data processing, responsive user interface, low-latency operations and determinism to handle hard real-time events. It is very hard (and most of the times impossible) to meet all these requirements with just a single processor.
A common approach to meet these conflicting requirements is using multiple heterogeneous processors, where a high-end processor takes care of general computing like network communication, user interface and data processing, and a low-end processor is responsible to handle low-latency and real-time events. This type of system is called Heterogeneous Multiprocessing System or HMP.
In this session, we will learn all the theory behind the development of embedded applications using heterogeneous multiprocessing systems and put into practice with hands-on demonstrations based on a board with a heterogeneous multicore SoC containing both a Cortex-A and a Cortex-M processor, capable of running multiple operating systems on the different cores.
In the hands-on demonstration, we will learn how to run an RTOS (FreeRTOS) in the Cortex-M processor to handle deterministic and real-time events and report them back to a full-featured OS (GNU/Linux) running on the Cortex-A. We will study how the communication between the cores works and use an implementation of the OpenAMP standard in the hands-on.
In this session, the attendees will understand how a heterogeneous multiprocessing system works and when to use it. They will also learn how to use a heterogeneous multicore SoC and run multiple operating systems on it, understanding how the communication between the cores are implemented in the hardware level, and learning how this communication is abstracted at the software level with the OpenAMP standard.
How Agile is Changing the Face of Embedded Software Development
Presented by Niall Cooling
This presentation is ideal for anyone who is either new to Agile, considering using Agile or even has experience in working with Agile methodologies and practices with embedded software or firmware developments.
It will clarify the Agile landscape, covering both process based aspects, such as Scrum and various techniques, including Test Driven Development (TDD) and some of the underlying foundation principles, such as Continuous Integration (CI).
As part of the discussion, we shall look at some of the modern-day tools that help apply Agile techniques(e.g. Docker) and finally look ahead to the current gaps and where embedded systems offer particular challenges to the use of Agile techniques.
Flexible and Layered Embedded Firmware through Test Driven Development (TDD)
Presented by Alexopoulos Ilias
Recent years the software industry has developed different methodologies with camps to support them many of them claiming better quality of work and speed. Embedded real-time firmware due to it's challenges makes adoption of these tools more difficult as we need to test systems interacting with the hardware that have timing constraints. Not all methods work well or there is often the question if the effort is worth the benefit.
In this session we will discuss the application of TDD,
- what is TDD and the difference with unit testing,
- example application of the method,
- how we can model the hardware registers transparently,
- how to tackle challenges porting to different architectures,
- using object oriented techniques for configurability
- the benefits and pitfalls of the method,
The session will be based on actual application of the method on real medium scale bare-bones systems projects.
Getting Linux To Run On Your Custom Board
Presented by Mohammed Billoo
The ability of silicon vendors to pack more components and capability into a single silicon die has allowed these System On Chips (SoCs) to support Linux. In turn, developers have been able to quickly migrate their application to be deployed "to the edge" without significant rework. The main objective of this session is to provide embedded systems engineers an overview on the steps necessary to get Linux running on a custom board, issues they may face, and how to debug these issues. This session will provide an introduction to Linux and its value in embedded systems, and how it differs from "traditional" Linux that runs on desktops. This session will also discuss how Linux differs from other embedded software paradigms, such as "bare-metal" and RTOS-based application development.
Practical Approach for High-End Embedded System Design
Presented by Khalil Rashid
Embedded system design is very challenging as it requires multi-disciplinary expertise in Hardware, Firmware and Software. Most of embedded systems developments ends up as a failed project or not delivering performance as planned initially.
This can be address by proper planning and selection of suitable hardware and software components. Also design goals and parameters to consider a very important to be evaluated before starting project like:
- Hardware Complexity
- Software Complexity
- Time to Market
- Development Cost
- Functional Safety and Security
- Feasible Solution
In this seminar, we will learn how to plan a complex Embedded System from hardware, firmware and software point of view. Furthermore, we will see how actually each part will be developed by utilizing Standard off the shelf components available. This makes design simple, cost effective, feature rich and most feasible for particular market.
Test-Driven Development for Embedded Software
Presented by James Grenning
You've heard about Test-Driven Development but have never tried it or don't quite get it. Test-Driven Development is an important design and problem solving technique that helps software developers improve product quality and the quality of their life. How? By preventing defects, protecting your code from unintended consequences, and giving you warning when your design starts to deteriorate.
In this presentation James describes the problems addressed by TDD. He will define TDD and show you a short example of TDD. He'll tell you some of the benefits you can expect from TDD as well as the challenges of applying TDD to embedded C and C++.