This repository should serve as a guide to everybody who wants to study software and hardware for embedded systems but doesn't know where to start.

Overview

Roadmap to Embedded Engineering

This repository should serve as a guide to anyone who wants to study software and hardware for embedded systems but doesn't know where to start.

Motivation

Maybe some undergratuate students who wants to study and work with embedded systems have found some difficulty to know what to study. Many are used to work with Arduino, which is a good start, but when it comes to make prototypes and projects more like real world projects, making hardware and software more professional, it's hard to know the best way to do it.

I notice the problem when I started to look for internships and Jr. jobs. The companies are always asking for knowledge that the university doesn't teach usually. Of course, if you are a Computer Engineering student or some course related, you'll have a strong base to work in this area. But this isn't enough.

To work serious with embedded systems, some preparation is necessary, in order to achieve the knowledge needed to work with both universes: software and hardware.

Nota para quem não fala inglês: Um dos principais requisitos exigidos na maioria dos cargos oferecidos na área é um conhecimento em inglês suficientemente bom para falar e escrever, no mínimo. Por este motivo o repositório e tudo que for escrito será em inglês, não só para incentivar a leitura e aumentar o alcance dos temas abordados, mas também para que eu mesmo pratique a escrita dia após dia.

Note to non english speakers: One of the main requisites that are required in jobs and internships is english. At least you need to speak and write. That's the reason this repository is being written in english, not only to increase reach, but for me either to train english everyday.

Index

Under construction!

Goals

The main goal here is to study most of the things needed to work with embedded engineering. With a lot of research I've done a collection of subjects that we need to know. Based on what professionals in the field says and what internships and junior jobs asks, we'll study the main topics in order to be prepared.

How will this works

We are going to explore two main subjects: software and hardware. This repository structure will be divided in directories, which every one will have their own README with links to access courses, indications of books, articles and examples of the exercises that I'll do and document.

This repository should be updated a lot, in order to give you the best way to learn all of the subjects that will be learned.

Some study subjects

I'll list some fo the topics that we will see and explain in this repository.

  • Software

    • Programming languages (basic and advanced subjects)
      • C/C++, Python/Micropython, Java, Rust
    • Object-oriented programming (OOP) concepts
    • Data Structure
    • Algorithms
    • Bare-metal programming
    • RTOS Knowledge (Real-time operating systems)
    • OS programming (Linux)
    • Linux OS practical usage
    • Bits manipulation
    • DIP (Digital Image Processing)
    • DSP (Digital Signal Processing)
    • Database technologies
    • Native android development with Java and C++ (NDK)
  • Hardware

    • Digital Logic
    • Hardware architecture (Arduino MCU among others)
    • Core (CPU, Registers, Bus, Cache, Flash/SRAM/DRAM memories)
    • Features and peripherals (GPIO, PWM, Clock, Watchdog, ADC, DMA, EEPROM, RTC, etc)
    • Protocols (UART, I²C, SPI)
    • Understand WiFi, Bluetooth, ZigBee and others
    • Interrupters, Timers, Counters
    • Microcontrollers interface (e.g AVR Programming or Arm Cortex)
    • PCB Design
    • Datasheet reading

Real world examples of internships and jobs offers

Click on the offers to see some examples. I will update this section whenever interesting opportunities arise to show.

Eldorado Institute - Embedded Software Analyst

Activities

  • Develop mobile and desktop functionality for automated testing in cellphone manufacturing
  • Lead technical analysis and implementation
  • Perform critical analysis of risks and impacts

Requisites

  • Graduation in a course in the area of technology
  • Experience with Java, C/C++, Python and Shell
  • Experience with Linux Kernel and programming Device Drivers for Linux
  • Experience with problem analysis and investigation
  • Advanced or fluent English, to chat, write and read
  • Availability to travel

Candidate differentials

  • Experience with projects for mobile solutions (especially Android)

Eldorado Institute - Embedded Systems Developer (1)

Activities

  • Kernel Development for Android Smartphones
  • Analysis and suitability of drivers, bootloader and other kernel modules for new platforms and new versions of the Android Operating System
  • Analysis and correction of flaws in Android code related to the Kernel

Requisites

  • Graduation in a course in the area of technology
  • Experience with embedded software development using C language
  • Familiarity with Linux and working with a remote server
  • Andvanced english

CITeB - Embedded Systems Developer (2)

Team guided by agile principles, where the professional needs to analyze, research, specify, plan, develop, implement and test.

Profile

  • Balancing urgency and quality
  • Motivation to seek continuous improvement in processes
  • Self-taught and resourceful with new technologies
  • Abstract problems and think of efficient solutions

Requisites

  • Advanced knowledge with Linux Operational System
  • Languages: C, Shell Script, Lua and Python
  • Knowledge of embedded systems architecture
  • Gerenciamento de memória, GPIO, barramentos, etc
  • Knowledge of network protocols, wireless networks and wireless communication protocols (IEEE 802.11)
  • Git

Candidate differentials

  • Experience in Device Drivers development for Linux
  • Webservices development or Restful API
  • Knowledge of software-hardware integration and basic hardware testing
  • Knowledge in IoT communication protocols
  • TDD, BDD, Code Review, Pair programming
  • Agile development methodologies

Eldorado Institute - C/C++ Android Developer

Profile

  • Integration and development of software modules embedded in the camera application in C ++
  • Development and maintenance of Android camera frameworks and drivers
  • Search for and fix faults

Requisites

  • Graduation in a course in the area of technology
  • Experience with embedded software in C++
  • Desirable knowledge in Android app (Java, Kotlin)
  • Advanced English for daily contact with outside team

Axpr Valve Science - Embedded systems/devices developer

Profile

  • Act developing embedded hardware projects
  • Integrating sensors/devices with desktop platforms
  • Work and develop IoT systems
  • Create/Develop communication interfaces with desktop or web environments
  • Propose/Discuss solution strategies to industrial problems using embedded systems
  • Developing firmware to embedded systems
  • Communication with software developers team to specify communication interfaces

Requisites

  • Responsable, problem solver and organized
  • Graduation in a course in the area of technology
  • Focuses on having results and desire to learn
  • Knowledge on:
    • Developing PCB (Printed Circuit Board)
    • Use of hardware platforms like: Raspberry Pi, Arduino, ESP32, etc
    • Structural programming language (Preferably C)
    • OOP programming language (Preferably python/C#)
    • Industrial communication protocols (I²C, hart, etc)

Candidate differentials

  • Git
  • Linux environment
  • Intermediate english

Espressif Systems - Embedded Software Engineer

Profile

  • Develop and improve support for Espressif chips in RTOSes (such as Zephyr, NuttX) and frameworks (MicroPython, Arduino).
  • Collaborate with upstream projects, submitting features and bug fixes.
  • Help customers advance their progress on projects by offering technical support and helping them troubleshoot software issues.
  • Work closely with the teams developing other aspects of Espressif software and tools.
  • Write documentation such as application notes, tutorials, and API guides.

Requisites

  • Bachelor’s degree or above, in Computer Engineering, Electronic Engineering, Communications Engineering, or other related disciplines.
  • At least 4 years’ work experience in the field of Embedded Software Development.
  • Excellent knowledge of C language.
  • Familiar with low-level aspects of RTOS.
  • Familiar with command line tools (Linux / Unix) and at least one scripting language (shell, Python).
  • Experience with git version control system.

Any of the following would be a strong plus:

  • Prior experience in projects with operating systems and frameworks like Zephyr, Nuttx, Micropython, Lua, etc.
  • Knowledge of hardware communication protocols: SPI, UART, I2C, I2S.
  • Knowledge of network protocols, such as TCP, UDP, TLS, HTTP.
  • Knowledge of Bluetooth LE, GAP, GATT.

Venturus - Junior Firmware Developer

Profile

The challenge is to develop firmware in a innovation project with partnership with a automobilistic company.

Requisites

  • Basic Knowledge of electronics
  • Experience with C or C++ programming for embedded systems
  • Solid knowledge on microcontrollers programming
  • Knowledge using peripherals I2C, I2S, SPI
  • Familiar with RTOS (FreeRTOS or others)
  • Basic notion on analog and digital electronics

Candidate differentials

  • Experience with hardware bring-up
  • Proficiency with any SoC based in Arm Cortex M
  • Knowledge on firmware development for Arm and/or Xtensa microcontrollers
  • Is desirable knowledge on DSP (SigmaStudio)
  • Bachelor’s degree or above, in Computer Engineering, Electronic Engineering, Communications Engineering, or other related disciplines

Stone - C++ Developer

Profile

We are looking for creative software developers, responsible, with energy and focus to solve problems with quality. We also value your pratical skills to develop systems and capability to work with a team. You are going to develop embedded software with C++ using framework Qt, facing hardware limitations and making low resources becoming an product with high performance. Your work will affect milions of brazilians across the country.

Requisites

  • Continuous learning mindset
  • Fluency on a certain programming language: C++, C, Java
  • Experience with OOP
  • Experience with embedded development
  • Experience with Qt

Candidate differentials

  • Experience with:
    • Relational database
    • Telecommunications
    • Linux
    • Android
    • Javascript

General Content

Here I will put some content that are useful. Some of the general content may be not related to embeddes systems, but could be useful to use.

Title Access Link Platform Type Tier Difficulty Summary
Writing READMEs Link Free Course Beginner Udacity Documentation is an important part of the development process. Learn to write READMEs using Markdown so your code can be used by other humans! (Text from course)

Software Content

Android Development

Title Access Link Platform Type Tier Difficulty Summary
Developing Android Apps Link Udacity Course Free Beginner¹ This course blends theory and practice to help you build great apps the right way. In this course, you'll work with instructors step-by-step to build a cloud-connected Android app, and learn best practices of mobile development, and Android development in particular. (Text from course)

[¹] It's a beginner course in Android field, but needs previous knowledge with programming language (Java or C++) and OOP

Data Structure

Title Access Link Platform Type Tier Difficulty Summary
Data Structures from MyCodeSchool Link YouTube Video Lessons Free Intermediate¹ In this series of lessons, we will study and implement data structures. We will be implementing these data structures in c or c++. Pre-requisite for this lesson is good understanding of pointers in C. (Text from author)
Principles of Data Structures Using C and C++ Link Book Lessons Free Intermediate¹ Programming methodologies deal with different methods of designing programs. This will teach you how to program efficiently (Text from book)

[¹] C/C++ programming is necessary to implement and practice the data structures that are showed in playlist. If you are just looking for data structure knowledge, you can just watch the teorical videos explaining them.

Hardware Content

Under construction!

References

Under construction!

You might also like...

UniFi Proxy makes it possible to integrate third-party hardware into UniFi Protect

UniFi Proxy makes it possible to integrate third-party hardware into UniFi Protect

UniFi Proxy UniFi Proxy makes it possible to integrate third-party hardware into UniFi Protect. For testing purposes only, it is recommended to purcha

Dec 27, 2022

spring boot project with code review study

spring boot project with code review study

Getting started need Java 11 installed $ ./gradlew build bootRun 프로젝트 진행 사항 언어 : JAVA 11 프레임워크 : Spring Boot 빌드툴 : Gradle 6.9 db : h2 테이블 구조 : 일요일에 각

Dec 11, 2022

All I know about Spring as a Spring Boot app

All about Spring This repository contains all the knowledge I have and all the things I can do with Spring You can download v1.0.0 java-doc here In th

Jul 16, 2022

Clean-architecture-guide - Guia sobre Clean Architecture criado a partir dos meus estudos sobre o tema.

Clean-architecture-guide - Guia sobre Clean Architecture criado a partir dos meus estudos sobre o tema.

Clean Architecture Guide Arquitetura são as práticas e fundamentos de como organizamos um sistema. Tem relação e como os componentes estão relacionado

Apr 23, 2022

Example usage of work manager in Android, while doing this study, image downloading was preferred as a method.

Example usage of work manager in Android, while doing this study, image downloading was preferred as a method.

android-workmanager-example Example usage of work manager in Android, while doing this study, image downloading was preferred as a method. Java 11 com

Jan 29, 2022

An android app that builds for students to find study partners.

An android  app that builds for students to find study partners.

Rinder The purpose of this project is to make a one-stop solution for finding the desired reading or research partner, sell their own products, and al

Dec 14, 2022

We are proceeding Algorithm Study from January, 2022.

AlgorithmStudy2022 We are proceeding Algorithm Study from January, 2022. 2022년 1월 부터 스터디를 진행하고 있습니다. The 1st quarter: 우리는 첫 시즌을 마무리 하였습니다. 첫 시즌은 알고리즘

Jul 5, 2022

Ever wondered how a baloon feels in a dangerous place? Now you know.

Dont-Pop Description Ever wondered how a balloon feels in a dangerous place? Now you know. This game belongs to the category of Survival Games: the pl

Oct 24, 2022

You know, for id

You know, for id

分布式系统中,全局唯一 ID 的生成是一个老生常谈但是非常重要的话题。随着技术的不断成熟,大家的分布式全局唯一 ID 设计与生成方案趋向于趋势递增的 ID,这篇文章将结合我们系统中的 ID 针对实际业务场景以及性能存储和可读性的考量以及优缺点取舍,进行深入分析。本文并不是为了分析出最好的 ID 生成

Jun 17, 2022
Comments
  • [Roadmap] Write&Add about Youtube channels and playlists

    [Roadmap] Write&Add about Youtube channels and playlists

    [TODO] List of YouTube channels relevant to embedded projects

    • Michael Reeves (Ideas Projects Entertainment)
    • Anastascia Hardware (Learning Hardware)
    • C/C++ Guy (Learning Software Easy)
    opened by mateustoin 2
  • [Roadmap] Create labels system on Roadmap

    [Roadmap] Create labels system on Roadmap

    Labels available

    Software Hardware Easy Intermediate Hard CAD Learning Enterteinment Tool PCB Design Store Ideas Projects Free Paid Freemium Course Youtube Database Book Video Article/Blog Post Content Creator PaaS

    opened by mateustoin 1
Owner
Mateus Antonio da Silva
Computer Engineering student at Federal University of Paraíba.
Mateus Antonio da Silva
Operating Systems - Concepts of computer operating systems including concurrency, memory management, file systems, multitasking, performance analysis, and security. Offered spring only.

Nachos for Java README Welcome to Nachos for Java. We believe that working in Java rather than C++ will greatly simplify the development process by p

Sabir Kirpal 1 Nov 28, 2021
@FengG0d 's Client, but he leave, I am the new owner, but, I don't know how to write Java, I need your help.

IKUN Client Help me I need help! The original Author was leave, but I don't know how to write a good client, I need Your help! to make a good IKun Cli

Chenken520 2 Sep 4, 2022
You want to go to a cafe but don't know where to go. Let cafe hub support you. Ok let's go

cafe-hub You want to go to a cafe but don't know where to go. Let cafe hub support you. Ok let's go Architecture: Domain Driven Design (DDD) LDM Insta

Khoa 1 Nov 12, 2022
An application created using Android Studio, Java and Firebase DB to serve patients and doctors at a medical clinic.

MEDICAL CLINIC APP An application created using Android Studio, Java and Firebase DB to serve patients and doctors at a medical clinic. Patients are a

Anik Sarker 16 Jan 5, 2023
The code examples of the "Effective Software Testing: A Developer's Guide" book

Effective software testing This repository contains the code examples of the Software Testing: A Developer's Guide book, by Maurício Aniche. Each fold

null 44 Dec 29, 2022
An assistance platform made using Spring framework that analyses your code, and helps you either to start a devops project, or to turn an existing project into a devops project using open source software (Git, Docker, Jenkins..)

DevOpsify Description An assistance platform made using Spring framework that analyses your code, and helps you either to start a devops project, or t

obaydah bouifadene 14 Nov 8, 2022
A repository that will guide in making your first contribution.

Java Programs A Repository that will guide you in making your first contribution. How to contribute Fork the project Make any changes in your forked r

Sujana Kamasany 18 Jan 6, 2023
A visual implementation of OSHI, to view information about the system and hardware.

MooInfo A visual implementation of OSHI, to view information about the system and hardware. Such as OS, processes, memory, CPU, disks, devices, sensor

周波 104 Jan 6, 2023
In the application, users should be able to register, login and create/update/delete their own to-do lists.

Mini TO-DO app About the project Todoist In the application, users should be able to register, login and create/update/delete their own to-do lists. Y

Hüseyin Balicak 2 Nov 22, 2022
A real-time ray tracer in Java, accelerated on heterogeneous hardware using TornadoVM

Java Ray Tracer for TornadoVM Description This project aims to build a real-time ray tracer in Java, accelerated on heterogeneous hardware using Torna

null 10 May 23, 2022