Courses

'Unembedding' Embedded Systems

Course Objectives

Offer solutions to the miseries most embedded developers (and non embedded developers too), are used to live with:

Unmanaged coupling dependencies

Embedded code is usually polluted everywhere with low level implementation details, being the SFRs dependencies the worst of them all. Those unmanaged dependencies results in having a code firmly tied to dependencies that are hard to change, like for example third party libraries (including the vendor tools) or the running hardware and platform itselves. These hard to change dependencies should be the real definition of Firmware.

Rigid and fragile code

Rigidity is the tendency for software to be difficult to change, even in simple ways. Every change causes a cascade of subsequent changes in dependent modules. Closely related, fragility, is the tendency of the software to break in many places every time is changed, and more than often, these places have no conceptual relationship with the area that was changed

Low cohesion
Not portable
Difficult to understand and maintain

Higher level modules are usually poluted with low level implementations details. Long modules and methods, with bad names and more than one responsability... We expend more than 60% of our time reading existing code, so it is better to take into account the following quote:

Any fool can write code that a computer can understand. Good programmers write code that humans can understand

- Martin Fowler
Test & Debug On Hardware

Main Topics

Present the root causes of those problems and study solutions that work for any kind of software (embedded or not), hardware, platform, microcontroller, 3rd party library and vendor:

  • SOLID Principles

  • Design Patterns

  • Portable Architecture (Processor Abstraction Layer and Hardware Abstraction Layer)

  • Types of tests and Test Doubles

  • Test-Driven Development (dual targetted)

  • Code coverage, comprehensive specifications and mutation testing coverage

  • Open Development Framework and Continuous Integration tools set-ups

  • Testable architecture allowing no only unit tests, but also end-to-end tests off-the-target (ie, entering from main until the lowest level layer)

layered_embedded_architecture

Hardware & Microcontroller Independent Architecture

Mutation testing example

Unveiling a flaw in a 100% code coverage test suite by means of Mutation Testing

Embedded Continuous Integration build information

Embedded Continuous Integration information available for each build (ie, each diff code change)

Course resume

  • Duration: 32 hours. 12 hours of theory + 20 hours of practice

  • Modalities: On-line & On-site

  • Available languages: C and C++

Get more info

What are they saying?

A very interesting, enjoyable, useful and easy to follow course for any software developer, coming from the embedded context or not. Great course and experience!

José María Martínez Martínez

CTO of Artificial Intelligence at Cecotec Innovaciones S.L.

Clarifying, relevant and necessary! Essential to avoid continuing to survive in the world of development. I am looking forward to applying everything I have learned to my projects and continuing to improve

Claudia G.

Firmware Engineer at Cecotec Innovaciones S.L.

Revealing course! From a passionate teacher, learning by test-driven coding in order to achieve clean working code that produces higher quality applications and avoids debugging time

Pablo Soriano

Firmware Engineer at Cecotec Innovaciones S.L.

Enlightening course! Thanks to him, I learned the basics of TDD and embedded system programming good practices

Javier Barahona

Embedded SW Engineer at Witrac

Are you interested in applying state-of-the-art Software Engineering practices to embedded development? This course is what you have been looking for!

Mario Cervera

Software Craftsman at DAS Photonics

Fantastic course about Agile methodology! Analyze, deocuple, think a test and pick code. Let’s work as a trust team!

Toni Garcia

HW & FW Engineer at Fermax Technologies

A much better approach to develop fully tested, highly reusable, greater quality embedded software while being decoupled from Hardware

David Sanz Vidal

Principal Embedded SW at Power Electronics

This course has certainly saved us months of headaches in the development of our projects. A great course from an excellent communicator and a mentor in the Embedded Software Craftmanship world.

Pablo Martinez Crespo

CTO Firmware at Cecotec Innovaciones S.L.

Our Firmware development team has quickly internalized a faster and better approach to create higher quality long run products. Excellent course, professional and trainer. Strongly recommended

Elías García García

R&D Director at Fermax Technologies