Advance your professional development
in a live online, hands-on workshop with Doulos expert trainers, industry professionals and leading technology organisations.
Embedded KnowHow 2020
is a full day of hands-on, workshop-style training in key subject areas, presented by Doulos expert trainers. With valuable takeaway resources and live interaction with industry organisations and professionals, this is not an event to miss...
Who should attend & pre-requisites
This event is for embedded engineers looking for a practical introduction to these key topics.
Minimal knowledge of the topic areas will be sufficient to attend the workshops (unless otherwise stated below).
What will I need?
The workshops have been created to be accessible by a wide audience with standard technology requirements. Full details of how to login and what you will need to participate will be provided in plenty of time before the event.
What will I learn?
Find out more in the stream sections below.
Deep learning is a very hot topic right now. Deep learning algorithms are proving effective in many existing applications such as object detection, object recognition, speech recognition, and text analysis. New applications and new success stories seem to emerge daily, from smart homes to autonomous vehicles, from defense systems to medical diagnosis. Deep Learning
Deep learning impacts engineers in several ways: the kinds of product we design, how we design those products, and how we support our customers. This workshop will help you to understand exactly what deep learning is, how deep learning differs from other approaches to machine learning, and how to go about choosing the right approach for your particular problem. This workshop will help you to cut through the fog that sometimes surrounds discussions of deep learning by taking a no-nonsense look at the technical heart of the matter: what deep learning really is and what it is good for.
This workshop will teach the technical jargon, the main concepts you need to get started, and will give you an understanding of the elements that make up current neural network architectures and what makes them successful. Topics to be covered include the distinction between machine learning and deep learning, basic machine learning algorithms for regression and classification, the training and deployment of neural network models, an overview of the ecosystem including common deep learning software libraries and frameworks, and how to get started with deep learning using standard pre-trained models and transfer learning.
This workshop will be taught in 4 sessions and will include many examples of working code that you can try for yourself during or after the workshop.
Presentation 1: Python
Presentation 2: Machine Learning vs Deep Learning
Presentation 3: Training & Deployment
Presentation 4: Pretrained models & transfer learning
To gain the most from the workshop, you should have a basic knowledge of Python programming. There are many tutorials on Python programming available on the web, such as the official Python tutorial at https://docs.python.org/3/tutorial/
As a language, C++ has been available for over 30 years, yet its popularity has lagged behind its more popular predecessor, C. Much of this lack of use is down to a perception that C++ is complex, hard to learn and generates inefficient output code. While that may have been true in the past, things have changed over the years and many programmers are realising the benefits that using C++ can bring. CandCPP
This track will help guide you through the process of switching to using C++ in your future designs rather than using pure C. It will look at the differences between the languages, features and pitfalls of converting existing code. It will also give an overview of Object-Oriented Design techniques and libraries that allow for more efficient embedded systems and quicker project completion.
Please note: Attendees must already be proficient in C and a good standard of knowledge of the language will be assumed.
The following presentations will be complemented by practical hands-on exercises and instructions on the their use with a virtualised development environment. Details of how this will work online will be provided soon.
Presentation 1: Language feature comparison
Comparison of C and C++, covering some of the C++ enhancements. Also including methods for mixing C++ with existing C code
Presentation 2: Basics of Object Oriented design
Introduction to Object Oriented Design. Hiding details and protecting data from inadvertent modification
Presentation 3: Language features for optimization
Letting the compiler do all the work. Language features for optimising the output code for size and speed, including standard libraries and pre-written code
The following presentations will be complemented by practical hands-on exercises and instructions on their use with software development tools. Details of how this will work online will be provided soon.
Presentation 1: Common Attacks and Mitigations
This session introduces the most common vulnerabilities in embedded Linux software and shows ways that you can protect your system against them. We will discuss fundamental software vulnerabilities, including security problems introduced during the design and implementation of software. This can lead to issues such as stack and heap attacks, string format attacks, integer overflow and memory management issues. Secure Embedded Logo
In this exercise we will investigate how binary code is structured and also take a look at common vulnerabilities in applications written in C.
We examine examples of common attacks like buffer overflow and command injection and see how to use debugging tools like GDB to analyse potential weaknesses.
Presentation 2: Coding Standards and Defensive Programming
C is the most widely used programming language for embedded application.
Although a powerful language, it is widely understood that this power has the downside that unsafe, insecure and unreliable code is all too easy to write.
A good solution is to develop code that is compliant with an appropriate set of guidelines that help avoid the pitfalls.MISRA C and CERT C are two examples of such guidelines. In this presentation these two standards are introduced, compared and contrasted, so you have opportunity to make an informed choice for your specific project. Each of the two standards has some excellent characteristics, but every embedded project is different; one size does not fit all!
In this exercise we will investigate how a dynamic fuzzing tool can help identify weaknesses in software. For this we will setup the popular open source ALF fuzzer to help track crashes and memory leaks in conjunction with the Address Sanitizer compiler framework (ASAN).
The following presentations will be complemented by practical hands-on exercises and instructions on the their use with a QEMU emulated target and software development tools. Details of how this will work online will be provided soon.
Presentation 1: Intro to embedded Linux and Yocto
In this section we introduce the main components of an embedded Linux system: bootloader, kernel, filesystem and toolchain. We then look at how the Yocto Project can be used to create a completely customisable Linux distribution, providing each of these components for your target.
Build and boot an image Tux
Presentation 2: More on Yocto (layers and recipes)
Now we can look at Yocto in more detail, showing how new software can be installed in the system using custom layers and recipes. We also look at what Yocto provides for ongoing software development, including a completely customisable SDK (software development kit).
Add a custom recipe and test, install an SDK
Presentation 3: Linux user and kernel build
Here we look at how an SDK can be used to configure and build a Linux kernel and user space applications. We examine the main build systems used for Linux applications – Makefiles, Autotools and CMake.
Configure kernel and build with SDK, build user space app, run on target
Presentation 4: Linux User and kernel debug
Finally we look at some of the tools and techniques available for analysing and debugging applications in user space. We can also review some of the features that the Linux kernel provides for understanding the system and investigating issues in the kernel or in custom drivers.
Debugging kernel and user
Doulos In-Person KnowHow Workshops 2019