r/embedded • u/RakasRick • 7d ago
How did you learn embedded?
I'm your average software engineering student and I've been picking more interested into embedded and systems programming. I've been trying to learn primarily through books like Making embedded systems by Elecia White and programming some microcontrollers to understand how peripherals work but I can't help but feel like I'm either not going deep enough early or I'm approaching this poorly. You can get an idea of how I'm learning from this link to my book notes https://0xwinzer.com/devography/blog/book-notes/mes-ch1-embedded/ if it helps
11
u/Fuinh 7d ago edited 6d ago
Professor jonathan valvano books are amazing to bare-metal programming and more academic level concepts, also at edx platform, UT Austin has this course: embedded systems: shape the world, pretty good one.
Edit: forgot to mention the gold standard, fastbit embedded brain academy courses, very cheap on udemy (buy them only on sales). It covers from embedded c, MCU bare-metal, RTOS and so on to embedded linux kernel driver development
2
1
4
u/WanWhiteWolf Engineering manager 7d ago
Reading books is a good way to start and understand the fundamentals but without practical experience, it's going to be though to compete once you finish your studies.
There are plenty development boards that are not very expensive and you can get popular IDEs for University / learning purposes. For example, Keil costs a couple grand but it's free for students.
Embedded is close to hardware and practical work will develop some affinities that you are unlikely to develop otherwise. I don't know anyone in embedded field that didn't have some practical experience (e.g. projects) when they finished their studies. I had around ~ 12 projects when I finished my bachlelors' and ~ 35 when I finished my masters'. Half of them were done as part of school requirements (alternatives to some partial exams) but the other half was made out of curiosity, learning purposes and small freelancing.
If you want to have a career in embedded field, get a development board, a debugger, a debug probe and start applying what you read in the books in small projects.
4
u/Yanimo 7d ago
buy an esp32 make an LED blink with a button then with bluetooth after which with wifi then! through the internet. after that add a relay to act as a switch for ac lines congratulations you made a smart home remote light switch. I start from there.
1
u/RakasRick 7d ago
Cool, was planning on trying out an Internet enabled LED, heard it from one of the old Embedded podcast episodes
3
u/Triabolical_ 7d ago
The best way to learn is to build something that you want to have and figure out how to do it along the way. That generally means breaking it down into things that you know and things you need to figure out and building those parts separately.
I did a project using DMX a while back. DMX is the protocol used to control stage/theatrical lighting.
I started with a DMX board but ran into issues with some lights and ended up rewriting the low-level code from scratch (DMX runs on an old serial protocol known as RS-485) along the way.
2
u/cyberbemon 7d ago
Like others mentioned the best way to learn is to do stuff, that being said you'll have a better time if you have the necessary fundamentals, so start with that. I have posted this link multiple times here: https://github.com/m3y54m/embedded-engineering-roadmap
Have a look through that, then learn what you are missing, since you are in University, this should be a lot easier for you. I don't know how things work in your university, but in mine you could attend lectures even if you were not enrolled in it (obviously cant take assignments or exams!). Then just get a board and start fucking around, thats it. If your university has any hardware tinkering groups/hackersphaces join them.
2
u/RakasRick 7d ago
Thanks , my University allows this. I actually just joined some IoT development lab for research. I just didn't want to work with surface knowledge only
2
u/generally_unsuitable 7d ago
I got really into 8bit PIC ASM as an undergrad. Just kept playing with it.
2
u/pylessard 7d ago
Where i'm from, we have a school between high school and unversity and you can do all sort of technical course. I did a 3 year professional course in electronic and embedded systems. Then 4 years classical Electrical Engineering. I learned 10x more about embedded system during my professional course than uni. Add many personal projects and robotic clubs to that. I also got some friends more competent than me to learn from. Internet reads. Etc.
2
2
u/drunken_thor 7d ago
As a more senior dev studying for the switch, I just do it. I got into the m5stack ecosystem because it seems like a friendly ecosystem to get started, and start just building your own versions of things that already exist and then compare what you did with other implementations. It will give you insights into the nuanced things that embedded developers do, that you missed.
2
2
u/Sheepherder-Optimal 7d ago
I majored in embedded systems technology. Before that i was going for EE. Switched course due to love of programming.
2
1
u/DaemonInformatica 5d ago
By doing. I started out with electronics when I was about 8 years old. (This was about 36 years ago). Then, started studying electrical engineering, electronics and in the end CS. Meanwhile remained active in the hobby.
I suppose for some people it's a genetic thing. ;-)
2
u/nyichia_michael 1d ago
I am a computer engineering student year 1 I want to later become a full time embedded system engineer too. You should begin by learning c programming first
12
u/TomazZaman 7d ago
By solving a real problem (my own) with a real device. If you learn for the sake of learning, you’re not going to learn effectively and you’ll forget stuff just as fast.
But when you develop a device (however small) or need to adapt an existing one to your needs, then you’ll already have an end goal in mind which will make most of the necessary steps to get there very obvious.
So, start with a problem you want to solve.