58
COPYRIGHT 2016 – Fundação CERTI C++ and Embedded Linux: a perfect match Vinicius Zein | Fundação CERTI

TDC2016SP - Trilha Linux Embarcado

Embed Size (px)

Citation preview

Page 1: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

C++ and Embedded Linux: a perfect matchVinicius Zein | Fundação CERTI

Page 2: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

https://br.linkedin.com/in/viniciuszein

Vinicius Tadeu Zein R&D Coordinator @CERTI Foundation

•  Responsible for the Embedded Systems team

•  More than 10 years developing Embedded Systems

•  In companies like Atmel, LG Electronics and CERTI

Page 3: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

R&D Institute

Founded in 1984 with the mission to develop technology solutions for products and processes

500 employees

Private, but results are reinvested in R&D

MCTI and SUFRAMA accredited – projects with “Lei de Informática”, “Lei do Bem” and Embrapii

More than 500 clients around the world

Page 4: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

The information in this presentation was compiled from sources believed to be reliable for informational purposes only.Content includes opinions, presentations, articles, hyperlinks or other third party content (“Third Party Material”) that is not intended to, nor constitutes an endorsement by CERTI of the author or the Third Party Materials. The content and views within the Third Party Material are solely those of the third party and do not reflect the opinions of CERTI.The opinions expressed in this presentation and on the following slides are solely those of thepresenter and not necessarily those of CERTI. CERTI does not guarantee the accuracy orreliability of the information provided herein.

.Disclaimer

Page 5: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

SU MMARY

CHAPTER 1

Embedded Linux

CHAPTER 2

C++

CHAPTER 3

Development tools and debugging

CHAPTER 4

Test frameworks

CHAPTER 5

Test driven development

CHAPTER 6

Final considerations

Page 6: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Embedded Linux

Chapter 1

Page 7: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

CAPÍTULO 1 | LINUX EMBARCADO

Page 8: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Telephone exchanges

IP Phones and Smartphones

TVs and Set-top boxes

Printers

Electronic Control Units for cars

Cameras

Android systems

CHAPTER 1 | EMBEDDED LINUX

-à Se for muito importante esta imagem,

substituir por uma de maior qualidade

Page 9: TDC2016SP - Trilha Linux Embarcado
Page 10: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

C++CHAPTER 2

Page 11: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

C++ “cee plus plus”

CHAPTER 2 Multi-paradigm

Object oriented

Templates, inline functions

Metaprogramming

High-performative and powerfull

Lots of tools

Compatibility with C - just in case ;)

STL, Boost, ACE

Evolving language

CHAPTER 2 | C++

C++85 style "C with Classes”, C++98, C++03, C++11, C++14, C++17

Page 12: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Don’t lower your level of abstractionwithout a good reason! Lo

w-l

evel

impl

ies

Mo

re c

od

eM

ore

bug

sH

ighe

r m

aint

enan

ce c

ost

s

Page 13: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Embedded Linux

C++

Perfect match

CHAPTER 2 | C++

Page 14: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

DEVELOPMENT TOOLS AND DEBUGGING

CHAPTER 3

Page 15: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

CHAPTER 3 | DEVELOPMENT TOOLS AND DEBUGGING

“Making Embedded Linux EasyBuildroot is a simple, efficient

and easy-to-use tool to generate embedded Linux systems through

cross-compilation.”

Build systems > Buildroot

Page 16: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

CHAPTER 3 | DEVELOPMENT TOOLS AND DEBUGGING

Build systems > Yocto Project

“It's not an embedded Linux distribution

– it creates a custom one for you”

Page 17: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

CHAPTER 3 | DEVELOPMENT TOOLS AND DEBUGGING

Build systems > Autoconf

Rake

Boost.Build

Qmake

Scons

CMake

Page 18: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Sublime Text 2 QtCreator

JetBrains AppCode

CHAPTER 3 | DEVELOPMENT TOOLS AND DEBUGGING

IDEs * Code edition and navigation

VimEmacs

Sublime Text 2 Eclipse CDT

NetbeansSlickEdit

QtCreatorJetBrains AppCode

Page 19: TDC2016SP - Trilha Linux Embarcado

If debugging is the process of removing bugs, then programming must be the process of putting them in

Edsger Dijkstra

Page 20: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

CHAPTER 3 | DEVELOPMENT TOOLS AND DEBUGGING

Debugging

LogsCommand Line Interface (CLI)gdb (post morten)gdb + gdbserverdddGoogle BreakPad

For each bug found, a new unit test.

Page 21: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

CAPÍTULO 3 | FERRAMENTAS DESENVOLVIMENTO E DEBUGGING

Debugging > GDB

Post mortengdb <program> -c <core_file>

bt full -> backtraceprint <variable>

frame <frame_id>thread <thread_id>

Page 22: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Page 23: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Page 24: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Page 25: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

CHAPTER 3 | DEVELOPMENT TOOLS AND DEBUGGING

Debugging > Breakpad

Page 26: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Debugging > Breakpad

CHAPTER 3 | DEVELOPMENT TOOLS AND DEBUGGING

Page 27: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Continuos integration

CHAPTER 3 | DEVELOPMENT TOOLS AND DEBUGGING

Page 28: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Other tools > Static annalysis coverity, cppcheck

Coverage– ccccValgrind, tcmalloc

CHAPTER 3 | DEVELOPMENT TOOLS AND DEBUGGING

Page 29: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Page 30: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Code coverage

CHAPTER 3 | DEVELOPMENT TOOLS AND DEBUGGING

Page 31: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Page 32: TDC2016SP - Trilha Linux Embarcado

Test frameworks for C++

CHAPTER 4

Page 33: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

CHAPTER 4 | TEST FRAMEWORKS FOR C++

Unit tests – gtest > Well documented

MultiplatformLinux, Windows, Mac OS X

Easy to use, easy to configure

1 execution > multiple failures

Page 34: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI Unit tests – gtest

Page 35: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI Unit tests – gtest

Page 36: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI Unit tests – gtest

Page 37: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI Unit tests – gtest

Page 38: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI Unit tests – gtest

Page 39: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

gmock > Google Mocking Framework for tests in C++

Real targets are not always available

Simulating behavior

Creating emulators

CHAPTER 4 | TEST FRAMEWORKS FOR C++

Page 40: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI gmock

Page 41: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI gmock

Page 42: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI gmock

Page 43: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI gmock

Page 44: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI gmock

Page 45: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Google Benchmark

https://github.com/google/benchmark

Function benchmarking

CHAPTER 4 | TEST FRAMEWORKS FOR C++

Page 46: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI Google Benchmark

Page 47: TDC2016SP - Trilha Linux Embarcado

Test driven development

CHAPTER 5

Page 48: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

CHAPTER 5 | TEST DRIVEN DEVELOPMENT

Page 49: TDC2016SP - Trilha Linux Embarcado

Final considerationsCHAPTER 6

Page 50: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Use smart pointers

std::shared_ptr,std::scoped_ptr,std::unique_ptr

Page 51: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

RAIIRAII

Page 52: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

CAPÍTULO 6 | Final considerations

RAII

RAIIResource Acquisition Is Initialization

Page 53: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Use a code standardh#p://www.chromium.org/developers/coding-styleh#p://google-styleguide.googlecode.com/svn/trunk/cppguide.xmlh#p://clang.llvm.org/docs/ClangFormat.html

Page 54: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Unit test firstThen code

>TDD

Page 55: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Prefere

STL/Boost

algorithms

Page 56: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

?

Page 57: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

Thanks!Vinicius Zein [email protected]

Page 58: TDC2016SP - Trilha Linux Embarcado

COPYRIGHT 2016 – Fundação CERTI

ReferencesSlide 6 h#p://events.linuxfounda?on.org/sites/events/files/slides/csimmonds-embedded-linux-?meline-2013.pdf

Slide 11 h#p://ecn.channel9.msdn.com/events/GoingNa?ve12/GN12Cpp11Style.pdf

Slides 24, 25 and 26 h#ps://code.google.com/p/google-breakpad/wiki/GeJngStartedWithBreakpad

Slide 48 h#p://www.pathfindersolns.com/