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.
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.
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.
Under construction!
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.
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.
I'll list some fo the topics that we will see and explain in this repository.
Software
Hardware
Click on the offers to see some examples. I will update this section whenever interesting opportunities arise to show.
Team guided by agile principles, where the professional needs to analyze, research, specify, plan, develop, implement and test.
The challenge is to develop firmware in a innovation project with partnership with a automobilistic company.
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.
Here I'll put some content that are useful, not only for studying but also implementing and practicing in real life projects.
👁🗨 Good documentation can be the key to your project's success.
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) |
👁🗨 The versioning system in the development world is a necessary knowledge in practically 100% of the serious projects you are likely to work on. Whether in professional or personal projects, having a solid foundation in this is essential to ensure a good workflow, as well as being an ally of documentation.
Title | Access Link | Platform | Type | Tier | Difficulty | Summary |
---|---|---|---|---|---|---|
Introduction to Git | Link | Free | Lecture¹ | Beginner | YouTube/Notes | Why is version control useful? Even when you’re working by yourself, it can let you look at old snapshots of a project, keep a log of why certain changes were made, work on parallel branches of development, and much more. When working with others, it’s an invaluable tool for seeing what other people have changed, as well as resolving conflicts in concurrent development. (Text from lecture notes) |
[¹] Lecture notes have a lot of usefil links that you can use to learn more about the tool and see more advanced content.
Channel/Playlist name | Access Link | Content Type | |
---|---|---|---|
Michael Reeves | Michael does a lot of crazy and creative projects that you probably will never reproduce at home. Good to have fun watching. | Link | Ideas , Projects , Entertainment |
Anastasi In Tech | Anastasi shares a lot of updated information on hardware development and news from hardware world. | Link | Learning , Hardware |
Jacob Sorber | Jacob is a teacher that shares information, tips and gives good lessons about software and embedded development. | Link | Learning , Software , Embedded |
Modern Embedded Systems Programming Course | This is an old playlist that is being updated for a long time with valuable lessons regarding Embedded Systems. | Link | Software , Hardware , Learning |
Stuff Made Here | Another channel with crazy and creative projects to watch and have some fun! | Link | Ideas , Projects , Entertainment |
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
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.
👁🗨 A real-time operating system (RTOS) is an operating system that runs multi-threaded applications and can meet real-time deadlines.
Title | Access Link | Platform | Type | Tier | Difficulty | Summary |
---|---|---|---|---|---|---|
Introduction to RTOS | Link | YouTube | Course | Free | Beginner¹ | This course will show you how to use basic concepts of RTOS with FreeRTOS. You can practice using any tools that you have (Arduino IDE, ESP-IDF, STM Cube, PlatformIO), learning what you need to build your first applications with RTOS. |
[1] It's a beginner course, but probably it's good if you already have knowledge on Arduino and/or boards like ESP32 development.
👁🗨 Often you can find job offers with Qt applications on embedded devices. It's a C++ framework that can run anywhere (Linux, Windows, MacOS, Android, IOS, Raspberry, etc) and have more than 25 years of development and presence on the market.
❕ Bryan Cairns is one of the best Qt teachers. He also have a lot of great paid courses on Udemy, but I'll not put them here, becase they are easy to find. If you want his paid courses for free, you can access the facebook page that he created to exchange knowledge about programming. Very often he gives several Cupom Codes for people who wants to learn from his courses for free.
Title | Access Link | Platform | Type | Tier | Difficulty | Summary |
---|---|---|---|---|---|---|
Introduction to Qt 5 | Link | Youtube | Course | Free | Beginner¹ | Qt5 still have some LTS (Long-Term-Support) versions and it's very used on many projects today, since Qt6 was recently released. Also have all the stable features available. |
Introduction to Qt 6 | Link | Youtube | Course | Free | Beginner¹ | Qt6 is the las version of Qt bringing all the new features and updates from the company. |
[1] It's a beginner course, but since this is a C++ Framework, it is recommended that you learn basics of C++ before.
👁🗨 CMake is an open-source, cross-platform family of tools designed to build, test and package software. CMake is used to control the software compilation process using simple platform and compiler independent configuration files, and generate native makefiles and workspaces that can be used in the compiler environment of your choice. (Text from official website)
Title | Access Link | Platform | Type | Tier | Difficulty | Summary |
---|---|---|---|---|---|---|
How to CMake Good | Link | YouTube | Course | Free | Beginner | Sometimes there is beginners topics that are not so easy to learn and Cmake is one of them. This playlist teaches step-by-step some easy explainings about Cmake to learn and practice! The teacher is the maintainer of the famous VSCode extension CMake Tools. |
Under construction!