Awesome
How to learn modern Embedded Systems
A guide to the adventurer
Description
This is a guide to learn embedded systems, with updated resources that I think are relevant and modern. <br> In this repository there are resources for 3 areas: <br>
- Embedded microcontroller programming
- Embedded FPGA programming
- Embedded Linux drivers and systems programming
Engineering a project from idea to final product
This example is beautifully explained in 15 minutes with clarity and simplicity. With access to all the files (Open Hardware). A really good and simple project of IoT to learn from. Study it and see also the other videos from the same Youtuber, because Sayanee Basu is a really good educator in embedded development. A nice video to start this guide. <br>
- Initial idea
- Market study. Search for other products in the market and open projects.
- Concept development
- Circuit design
- Procurement of components
- PCB design with a microcontroller
- Logistics to send the board to factory
- Construction, soldering the components on the board
- Boot loader flashing
- Firmware development in Arduino-CLI
- PC Web development configuration control over USB.
- Publishing of all files of the project on the Web
- Demo of the project and the project development steps on a Youtube video
- How I built a simple IR blaster to replace my aircon remote - Arduino, sensors, infrared, WebUSB - Sayanee Basu <br> https://www.youtube.com/watch?v=QuI-2VGGcEQ
Programming
C programming
-
Simple notes on the C Programming Language <br> https://github.com/joaocarvalhoopen/Simple_notes_on_the_C_Programming_Language
-
C Programming - A Modern Approach 2nd Ed (C99) <br> by K. N. King <br> Pag 832
-
C in a Nutshell: The definitive reference (C11) <br> by Peter Prinz, Tony Crowford <br> Pag 803
-
Effective C: An Introduction to Professional C Programming <br> by Robert C. Seacord <br> Pag 272
C++ programming
-
A Tour of C++ 2nd Ed <br> by Bjarne Stroustrup <br> Pag 256
-
Programming: Principles and Practice Using C++ 2nd Ed <br> by Bjarne Stroustrup <br> Pag 1312
-
C++ Crash Course: A Fast-Paced Introduction <br> by Josh Lospinoso <br> Pag 792
-
How to learn modern C++ <br> https://github.com/joaocarvalhoopen/How_to_learn_modern_C_Plus_Plus
Python programming
-
Programação em Python: Fundamentos e resolução de problemas (In Portuguese) <br> by Ernesto Costa (FCA)
-
Python Crash Course, 2nd Edition: A Hands-On, Project-Based Introduction to Programming <br> by Eric Matthes <br> Pag 544
-
How to learn modern Python <br> https://github.com/joaocarvalhoopen/How_to_learn_modern_Python
Rust programming
-
How to learn modern Rust <br> https://github.com/joaocarvalhoopen/How_to_learn_modern_Rust
-
The Rust Programming Language Book <br> by Steve Klabnik and Carol Nichols, with contributions from the Rust Community <br> https://doc.rust-lang.org/stable/book/
-
Programming Rust: Fast, Safe Systems Development 2th Ed <br> by Jim Blandy, Jason Orendorff <br> Pag 736
-
Rust for Rustaceans: Idiomatic Programming for Experienced Developers <br> by Jon Gjengset
Embedded Rust
-
Video - An Overview of the Embedded Rust Ecosystem <br> https://www.youtube.com/watch?v=vLYit_HHPaY
-
Awesome embedded rust - Github <br> https://github.com/rust-embedded/awesome-embedded-rust
-
The Embedded Working Group Newsletter or Blog <br> https://rust-embedded.github.io/blog/
-
Discovery Book <br> https://docs.rust-embedded.org/discovery/
-
The Embedded Rust Book <br> https://docs.rust-embedded.org/book/
-
Workbook for Embedded Workshops - Book <br> https://embedded-trainings.ferrous-systems.com/
-
The Embedonomicon Book <br> https://docs.rust-embedded.org/embedonomicon/
-
Video - RTIC: Real Time Interrupt driven Concurrency<br> RTIC is a RTOS - Real Time Operating System.<br> https://www.youtube.com/watch?v=saNdh0m_qHc
-
Github - rtic-rs - cortex-m-rtic<br> See RTIC book documentation.<br> https://github.com/rtic-rs/cortex-m-rtic
-
Video - Grepit about the Rust RTIC framework<br> https://www.youtube.com/watch?v=sSJ-Md8nwIM
-
Video - Bare Metal Audio Programming With Rust - Antoine van Gelder - ADC20<br> https://www.youtube.com/watch?v=udlK1LQ3f3g<br> Slides<br> https://flowdsp.io/talks/talk-adc20/#1
-
Video - Building a simple logic analyser in Rust <br> Rust Linz, September 2020 - Roland Ruckerbauer - Embedded Rust<br> https://www.youtube.com/watch?v=xY342ACNXFg<br> Slides<br> https://github.com/ruabmbua/rlogic/blob/master/presentation.pdf<br> Github - ruabmbua / rlogic<br> https://github.com/ruabmbua/rlogic
Embedded Rust with STM32 BluePill - STM32F103
- STM32 BluePill in Rust - Project template and lot's of info <br> This is the project template I use in my BluePill projects. <br> https://github.com/joaocarvalhoopen/stm32_bluepill_in_rust__Template
Embedded Rust with Raspberry Pi Pico - 4 dollars board
- All relevant Info and a starting project Template. <br> Where I have put all the info that I consider to be relevant for Pico development in Rust. <br> Raspberry Pi Pico in Rust Proj Template with RTIC USB-Serial and UF2 <br> https://github.com/joaocarvalhoopen/Raspberry_Pi_Pico_in_Rust__Proj_Template_with_RTIC_USB-Serial_UF2
Rust on or for the Raspberry Pi
There are two modes of using Rust with the Raspberry Pi. <br> The first one is installing Rust development tools on the Raspberry Pi itself, and the second one is installing on the PC and making cross-compilation to generate a executable that runs on the Raspberry Pi. <br>
Developing on the Raspberry Pi and running Rust programs on the Raspberry Pi
- How to Get Started With Rust on Raspberry Pi <br> https://www.muo.com/tag/getting-started-rust-raspberry-pi/
Developing on the PC and cross-compiling to run Rust programs on the Raspberry Pi
-
Cross Compiling Rust for the Raspberry Pi <br> It also explains a method to automatically coping the file to the Raspberry Pi after compilation. <br> https://chacin.dev/blog/cross-compiling-rust-for-the-raspberry-pi/
-
Cross compiling Rust for Raspberry Pi <br> https://dev.to/h_ajsf/cross-compiling-rust-for-raspberry-pi-4iai
Algorithms
-
Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People <br> by Aditya Bhargava <br> Pag 256
-
Guide to Competitive Programming: Learning and Improving Algorithms Through Contests 2th Ed <br> by Antti Laaksonen <br> Pag 324
-
How to become dangerous in Algorithms <br> https://github.com/joaocarvalhoopen/How_to_become_dangerous_in_algorithms
Microcontrollers
- Bruce Land microcontrollers classes <br> Cornell University ECE 4760 Designing with Microcontrollers <br> http://people.ece.cornell.edu/land/courses/ece4760/
Arduino
-
Programming Arduino: Getting Started with Sketches, 2nd Ed <br> by Simon Monk <br> Pag 208
-
Programming Arduino Next Steps: Going Further with Sketches, 2nd Ed <br> by Simon Monk <br> Pag 320
-
Exploring Arduino: Tools and Techniques for Engineering Wizardry 2nd Ed <br> by Jeremy Blum <br> Pag 512
-
Embedded Controllers using C and Arduino 2nd Ed <br> By James Fiore <br> Pag 166 Price Free Creative commons, but small symbolic price if bought on paper on Amazon. book <br> Book and videos - http://www.dissidents.com/books.htm
-
Laboratory Manual for Embedded Controllers using C and Arduino 2nd Ed <br> By James Fiore <br> Pag 100 Price Free Creative commons, but small symbolic price if bought on paper on Amazon. book <br> Book and videos - http://www.dissidents.com/books.htm
Arduino-CLI
This is the best way and the more professional way of working with Arduino. With your own editor, with your own make file, with all your tools in place, really the best way. All this is beautifully explained in simple terms and in a show how to do it way in the following video play list from Sayanee Basu. <br>
-
Arduino CLI and the art of command line - Sayanee Basu <br> https://www.youtube.com/watch?v=cVod8k713_8&list=PL9wSRifxQqRrJh3Qr_TgqeCODG0z20UDo&index=6
-
Makefiles for using with Arduino - UNO, WeMos D1 Mini ESP8266, Adafruit nRF52 - Sayanee Basu <br> https://www.youtube.com/watch?v=Os5sGlw3PV0&list=PL9wSRifxQqRrJh3Qr_TgqeCODG0z20UDo&index=3
-
Embedded - Sayanee Basu <br> https://www.youtube.com/playlist?list=PL9wSRifxQqRrJh3Qr_TgqeCODG0z20UDo
-
Arduino-Cli – Github <br> https://github.com/arduino/arduino-cli
AVR
- AVR Programming: Learning to Write Software for Hardware <br> by Elliot Williams <br> Pag 474
STM32
-
Beginning STM32: Developing with FreeRTOS, libopencm3 and GCC <br> by Warren Gay <br> Pag 430
-
STM32 ARM Programming for Embedded Systems <br> by Mazidi, Chen, Ghaemi <br> Pag 378
-
STM32 MOOC Courses on STM32CubeMX HAL and LL and others <br> Official free MOOC's
-
STM32 Online Training <br> Free online training
-
STM32 HAL e LL manual for the STM32 family.
-
The ST docs that you will need: Microcontroller Datasheet, Reference Manual and Dev Board Starter Manual.
ESP32 and ESP32-S2
-
Learn ESP32 with Arduino IDE <br> I took this course and I recommend it, because it is a good course. It's an extensive course, good for the beginner and not so beginners. It covers in many, many projects all the micro-controller programming and the IoT - Internet Of Things stuff with the Arduino IDE. The author is constantly adding material to the course. I have experience with several different micro-controllers and in my opinion, the ESP32 and the future ESP32-S02 are good safe bet's to learn micro-controllers in general and IoT in particular. Also they are low cost and have large range of advanced features. <br> https://randomnerdtutorials.com/learn-esp32-with-arduino-ide/
-
Learn ESP32 The ESP-IDF <br> I took this course and I recommend it highly, this is an excellent course. This is a course for a more professional or more in depth persons, for the ones that really need to know what's under the hood and want to make use of every feature, capacity and possibility that the incredible ESP32 provides. The other kind of person that I can imagine doing this course is if you are already a developer for example in PC or web context, you will rapidly understand all the details and understand all the micro-controller power that the author explains to you. The framework used (ESP-IDF) is the one made by ExpressIF, the enterprise that makes the ESP32. The knowledge that you will obtain from this course is really profound, although the author goes to extensive length to explain the foundations that you need even in more advanced C programming, it is for people that already used a micro-controller before, be it a simple Arduino Uno board, or a more professional one. But I would like to say clearly that, the knowledge that you obtain from this course is profound. In my opinion it gives you the tools, it enables you to work professional on this field developing embedded systems software with the ESP32 including IoT. The course already as 12 hours, with all the code accessible in GitHub, but it's author is currently still adding content. It also includes advanced sections on freeRTOS. It uses in a very intelligent and useful way the free Visual Studio Code Editor in Windows and Linux, even allowing debugging in ESP32 inside Visual Studio Code with a cheap 10 dollars JTAG addon board. <br> https://www.learnesp32.com/
FreeRTOS - Real time operating system
-
FreeRTOS Getting Started, Guide and reference manual on freeRTOS site. <br> FreeRTOS Documentation
-
FreeRTOS for ESP32-Arduino <br> by Warren Gay
-
Hands-On RTOS with Microcontrollers: Building real-time embedded systems using FreeRTOS, STM32 MCUs... <br> by Brian Amos <br> Pag 496
Fixed Point Math
-
Introduction to Fixed Point Math for Embedded Systems - Part 1 of 3 <br> https://www.youtube.com/watch?v=bbFBgXndmP0
-
Introduction to Fixed Point Math for Embedded Systems - Part 2 of 3 <br> https://www.youtube.com/watch?v=7pkXlcapNB4
-
Introduction to Fixed Point Math for Embedded Systems - Part 3 of 3 <br> https://www.youtube.com/watch?v=SrELHqRqKjo
Microcontrollers for less than 1 dollar
- The amazing $1 microcontroller (Jay Carlson) <br> A new series that explores 21 different microcontrollers — all less than $1 — to help familiarize you with all the major ecosystems out there. <br> https://jaycarlson.net/microcontrollers/
Linux
Learn Embedded Linux
-
So you want to build an embedded Linux System? (Jay Carlson) <br> A primer on how embedded Linux systems are developed, plus an exploration of the hardware and software ecosystems of ten different commonly-available CPUs. <br> https://jaycarlson.net/embedded-linux/
-
How to learn modern Linux <br> https://github.com/joaocarvalhoopen/How_to_learn_modern_Linux
Command line
- The Linux Command Line: A Complete Introduction 2nd Ed <br> by William Shotts <br> Pag 480
Computer systems, Operating systems and Drivers
-
Computer Systems: A Programmer's Perspective, 3rd Ed <br> by Randal E. Bryant, David R. O'Hallaron <br> Pag 1120
-
How Linux Works: What every super user should know <br> by Brian Ward <br> Pag 392
-
The Linux Programming Interface: A Linux and UNIX System Programming Handbook 1st Ed <br> by Michael Kerrisk <br> Pag 1552
-
Linux Device Drivers, 3rd Ed <br> by Jonathan Corbet, Alessandro Rubini <br> Pag 640 <br> Note: Not up to date, but free online and a good book. <br> https://lwn.net/Kernel/LDD3/
-
Linux Driver Development for Embedded Processors 2th Ed: Learn to develop Linux embedded drivers with kernel 4.9 LTS <br> by Alberto Liberal de los Ríos <br> Pag 680
RaspberryPi
-
The Official Raspberry Pi Beginner's Guide <br> by Gareth Halfacree <br> Pag 248
-
Raspberry Pi - Exploring Raspberry Pi: Interfacing to the Real World with Embedded Linux <br> by Derek Molloy <br> Pag 720
-
Learning Computer Architecture with Raspberry Pi <br> by Eben Upton, Jeffrey Duntemann, Ralph Roberts, Tim Mamtora, Ben Everard <br> Pag 528
FPGA's
- Bruce Land FPGA's classes <br> ECE 5760 Advanced Microcontroller Design and system-on-chip <br> https://people.ece.cornell.edu/land/courses/ece5760/
Verilog
-
Verilog by Example: A Concise Introduction for FPGA Design <br> by Blaine Readler <br> Pag 124
-
Programming FPGAs: Getting Started with Verilog <br> by Simon Monk <br> Pag 192
VHDL
- VHDL By Example: A Concise Introduction for FPGA Design <br> by Blaine Readler <br> Pag 120
FPGA Open source Tools
-
Open-Source FPGA tools, how and why <br> https://www.youtube.com/watch?v=sZBfEgnTc1A
-
Project IceStorm for Latice ICE40 <br> http://www.clifford.at/icestorm/
-
Digital Design for FPGAs, with free tools <br> https://github.com/Obijuan/open-fpga-verilog-tutorial/wiki/Home_EN
Others
Electronics
-
Getting Started in Electronics <br> by Forrest M. Mims III <br> Pag 128
-
Practical Electronics for Inventors, 4th Ed <br> by Paul Scherz and Simon Monk <br> Pag 1056
-
How to learn modern electronics <br> https://github.com/joaocarvalhoopen/How_to_learn_modern_electronics
-
Most common components in electronics <br> https://github.com/joaocarvalhoopen/Most_common_components_in_electronics
PCB - KiCAD
-
Kicad Like a Pro, 2nd edition <br> by Dr. Peter Dalmaris <br> Pag 459 (A4) <br> https://techexplorations.com/st/klp_2e/
-
PCB design course KiCAD like a Pro I took this course and reed the book and I recommend it highly, this is an excellent course. There comes a time that every person that enter this field of electronics or embedded systems, will feel the need to make a professional looking board for the system that you design. When breadboard, soldering wires or simples pre-fabricated modules connected by wires, are not enough. That is the time to start learning about how to design a PCB's. Starting by drawing the schematic, to the design of the effective PCB, reaching out to a fabric to make you PCB and then assemble in your home or in the fabric with an assembly service. This course cover it all. KiCAD is a free open source tool that is of professional grade. <br> https://techexplorations.com/so/kicada/
-
KiCad - Sayanee Basu <br> https://www.youtube.com/playlist?list=PL9wSRifxQqRqdhVqZtdHnlwophrsjL9ic
DSP
-
Understanding Digital Signal Processing 3th Ed <br> by Richard G. Lyons <br> Pag 954
-
Digital Signal Processing in Modern Communication Systems <br> by Andreas Schwarzinger <br> Pag 398
-
The Scientist & Engineer's Guide to Digital Signal Processing <br> by Steven W. Smith <br> Pag 626 Free on the net <br> http://www.dspguide.com/
GCC and GDB
-
An Introduction to GCC <br> by Brian J Gough, Richard M Stallman <br> Pag 144
-
GDB Pocket Reference <br> by Arnold Robbins <br> Pag 78
Git
-
Ry’s Git Tutorial <br> https://johnmathews.eu/rys-git-tutorial.html
-
Version control for hardware developers - Git, GitHub, KiCad - Sayanee Basu <br> https://www.youtube.com/watch?v=V8yYrUN0q-0&list=PL9wSRifxQqRrJh3Qr_TgqeCODG0z20UDo&index=10
Code editors
-
Visual Studio Code <br> https://code.visualstudio.com/
-
Sublime Text <br> https://www.sublimetext.com/
All my other guides
- The links to all my guides are in: <br> Guides on Linux - Programming - Embedded - Electronics - Aeronautics <br> https://github.com/joaocarvalhoopen/Guides_Linux-Programming-Electronics-Aeronautics
Have fun!
Best regards, <br> Joao Nuno Carvalho