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 Walls
Most 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 Anderson
As 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++.
Tips and Tricks for Avoiding and Fixing Real-Time Issues
Presented by Olaf Schmidt
Finding and fixing timing problems is a real mess.
In this talk you will learn how to use a model-based approach to design, optimize, analyze and test your timing throughout your whole project. Find and fix problems before you start coding.
Analyse and test existing systems be looking at a trace. Well understanding of the behavior will ease optimizing the timing.
In most systems data is flowing from an input to an output. The scope may be on unit/CPU or many connected units. End-to-end latency is often a real-time requirement that has to be matched. It can also be seen as a health indication of your system. Use the data flows - we call them event chains - to design and test your system.The saying goes: "Hardware is Hard". It is even harder when you are the only Embedded Systems Engineer of the team.
As the member of a two person team, we were tasked with developing low cost IoT solutions for my employer - an industrial gas giant. So far, we have developed three products and a fourth product is in progress. We learned a lot of lessons on being resourceful when it comes to developing prototypes, deploying the product at the customer location, maintain compliance and troubleshoot any issues with the product in the field.
We worked hard to convince stakeholders to develop products in-house while settings clear expectations about delivery timelines when it comes to hardware projects.
In my talk, I would like to discuss the lessons learned from my product development experience. This includes the process of selecting commercially available tools, conducting competitive reviews, hardware selection etc. I will also discuss the challenges identifying the right resources including contract manufacturers, product installation and maintenance etc. I will also highlight the pitfalls to watch out for as a small team
Presented by Karim Yaghmour
Android's use in the automotive industry has been silently increasing over the past few years. While Android's use in a car inherits quite a few things from classic Embedded Android, there are several automotive-related additions to the Android Open Source Project (AOSP) that are worth a closer look. This session will cover the Car System Service, the internal Car system APIs, the built-in Car Apps, the car-related HIDLs and car-related specific features such as Exterior View System, Vehicle Properties, Audio, Power Management, wear leveling and boot time optimizations.
How to get started with Arm Cortex-M55 software development
Presented by Arm
IoT and embedded developers can take advantage of an unprecedented uplift in energy-efficient machine learning and signal processing performance for next-generation voice, vision or vibration use cases with Arm's latest endpoint AI technologies; The Cortex-M55 processor, Arm's most AI-capable Cortex-M processor and the Ethos-U55, the industry's first micro neural microprocessor (microNPU) that's designed to work with Cortex-M processors.
These technologies can be developed in a unified software toolchain for the simplest and fastest development path for AI. Join this talk to be one the first to get started today to write optimized code for the exciting features these processors bring.
This talk will be a hands-on demo of the development flow available with Arm tools and will cover:
- New architectural features of the Cortex-M55 processor
- How to benchmark an application using Cycle Model
- How to run the application on an FPGA prototyping board
- How to optimize your code with Keil MDK debug features
How to Rapidly Develop IoT devices with Arm and AWS
Presented by Arm
Arm Cortex-M processors have been shipped in more than 45 billion chips for a vast range of applications, from industrial sensors to wearables. This growth has exploded more so in the last few years due to the significant rise in connected products for diverse markets. AWS IoT provides broad and deep functionality, spanning the edge to the cloud, so customers can build IoT solutions for virtually any use case across a wide range of devices. With designers of IoT applications under extraordinary pressure to build innovative solutions quickly, affordably, and satisfy many design requirements, how can the IoT continue to scale across a growing number of use cases? The talk provides a tour of a simple path to developing secure Cortex-M based IoT devices with Arm and AWS, and how together, the collaboration provides choice and scalability for IoT developers.