A first-year graduate student who has been learning embedded systems for four years since undergraduate studies, here to share a few thoughts.
Let’s first talk about the employment situation of graduates from my alma mater.
My alma mater is an ordinary second-tier university, and many seniors or classmates who started working in the embedded field earn at least 6K+, working with STM32, Linux, and PCB.
First, what is embedded systems?
Embedded computer systems refer to relatively small devices that incorporate a computer. In other words, simple devices like electronic watches and alarm clocks, as well as more complex ones like POS machines, vending machines, and ATMs, all fall under the category of embedded devices.
My Journey in Embedded Systems
Due to my undergraduate school being a teacher training institution with a weaker engineering focus, I had to find my own learning direction during my undergraduate studies.
In my freshman year, around early November four years ago, I bought a set of materials from Yabo Smart for about 50 yuan, which included a book and a 51 development board. At that time, I was just learning C language, and the 51 board became the best training platform for C language.
With the 51 board, I also learned some basic hardware knowledge, such as pull-up and pull-down resistors, filter capacitors, Schmitt triggers, etc. This laid a foundation for later studies in circuit theory, digital circuits, and analog circuits.
The most interesting project with the 51 board was undoubtedly building a smart car, using a pair of small motors controlled by an L298N driver and infrared sensors for line following.
I first encountered STM32 in the second semester of my freshman year while working on a small balancing car for a smart car competition. At that time, I needed two modules: a gyroscope (MPU6050) and a camera (OV7670). The former could still be managed with the 51 board, but the latter was quite challenging; I managed to get it working, but the performance was poor, with the TFT screen reading camera data in a stuttering manner. For articles about the smart car, I recommend: Is it easy to make an STM32 car?
After that, I got into STM32. The peripherals that were troublesome on the 51 board, like cameras and gyroscopes, suddenly became easy to use. External interrupts and timers were not as scarce as on the 51 board, and there were plenty of peripherals available… etc.
Simple devices use 8-bit microcontrollers, while complex devices use 32-bit microcontrollers, and designing circuit boards with DXP was a thought I maintained for a long time until the smart car competitions of 2018-2019.
During these two years of smart car competitions, two interesting things happened.
One was debugging new elements, such as roundabouts and cross-sections.
The other was a new environment, where the track was no longer shaded.
The former made it clear that the existing flags were insufficient, so I researched and implemented a finite state machine (FSM).
The latter did not yield good ideas in a short time until I encountered OpenMV and OpenCV.
After implementing the FSM, I wondered if there were more advanced and powerful processing methods.
Linux provided the answer, including OpenCV.
I realized that embedded development, like Java and front-end/back-end development, can also have operating systems.
Interrupts, DMA, and other elements are seen as processes and threads at the operating system level.
Currently, I am still learning embedded systems, studying the 2440 with my teacher, focusing on bare-metal development, driver development, and system development.
At the same time, I am also delving into machine learning, pattern recognition, and image processing, hoping that one day they can be integrated with embedded systems.
Just like how the 51 board was linked with C language, and STM32 was linked with PID and Kalman filtering, etc.
Definition of the Embedded Industry
Having said so much, I feel like I’ve strayed off topic, so let’s return to the main subject.
First of all, the embedded industry is very broad, depending on how you define it.
-
Just considering 8-bit microcontrollers like the 8051 as embedded systems.
-
Including RTOS and RT Thread microcontroller system development as embedded systems.
-
Linux system API development and driver development as embedded systems.
-
SOC (System on Chip) + Linux + OpenCV + CNN + YOLO also counts as embedded systems.
All of the above are embedded systems, but do you think the salaries will be the same?
Secondly, I believe that the above content represents a progressive relationship rather than an opposing one. Therefore, I disagree with the notion that microcontrollers are low-level while Linux and machine learning are high-end. After all, in embedded technology, all of these elements are indispensable. The difference lies in the levels, and what we need to do is to adapt to the situation.
For example, if you are controlling a brushed DC motor, the 51 board is sufficient, but if it’s a three-phase brushless motor, you might need STM32. A 30W pixel camera can be easily handled by STM32, but a 200W or higher pixel camera might require SOC. If you are doing facial recognition, you will likely need to use SOC. Conversely, while SOC has strong performance, it has higher power consumption and less stability than microcontrollers. For devices that require stable control (like motors), microcontrollers are still necessary.
Possible Reasons for the Lack of Prosperity in the Embedded Industry
Finally, in my humble understanding, the two possible reasons for the perception that embedded systems have no future are: a severe shortage of talent and relatively low salaries.
First, let’s talk about the talent shortage.
Pure Java development or pure power and sensor development, or using Solidworks for mold design, generally only requires writing code, soldering, or drawing. However, embedded systems typically require both software and hardware skills. Moreover, it often requires PCB design skills.
Languages like Java and Python have very clear advanced features, with strong capabilities for handling classes and objects, and can interact with backends (like Java’s JDBC interacting with MySQL, etc.). But embedded languages are mainly traditional C/C++, and sometimes even assembly language, making the development difficulty higher than that of Java or Python, in my opinion.
Embedded systems are strictly classified within computing, but currently, the domestic computing industry is still software-centric (the three giants, BAT, are all pure software companies). As a hardware-based field, embedded systems naturally face more challenges in development. This is one reason why students from electronics or automation backgrounds tend to have a higher proportion of embedded systems learners compared to those from computer science backgrounds.
It is evident that the entry barrier for embedded development is still high (currently, I believe the only IT field with a higher entry difficulty than embedded systems is probably image processing, computer vision, and machine learning).
Now, let’s discuss the issue of low salaries.
As mentioned earlier, the entry barrier for embedded systems is high, so most people entering the embedded industry are still concentrated in the microcontroller field, which lowers the average salary of embedded systems. In fact, if one can work with Linux or even in the visual field, I believe the income would still be quite good.
This is similar in both software and hardware industries. Software that only knows front-end (HTML5, Vue.js, etc.) cannot achieve full-stack development. Hardware that can only design simple signal boards or double-layer boards cannot handle multi-layer boards, high-frequency signal boards, or high-current boards. Mechanical engineers who can only draw flat diagrams cannot make molds. Similarly, if the entry barriers are not as high as those for embedded systems, most practitioners will be concentrated in low-end industries, and the average salary will naturally be lower than that of embedded systems, which is dragged down by low-end industries.
Is it Worth Entering the Embedded Field?
Is 20 years in embedded systems equivalent to 10 years in Java?
Unfortunately, this statement is not without merit.
Why?
Because the core issue remains the entry barrier.
Learning embedded systems is not only difficult to start with, but the entire process is not simple.
Java specializes in web, database, server, etc.
PCB focuses on circuit boards, with differences mainly in layers and frequency.
Mechanical drawing is similar.
But embedded systems? Sorry, embedded systems cover a much broader range.
-
Both software and hardware skills are essential.
-
Working with motors, gyroscopes, and cameras is almost a mandatory course.
-
Control theory cannot be overlooked, and PID is essential.
-
Pattern recognition and image processing must also be followed.
-
Knowledge of Linux and operating system principles is indispensable.
In other words, in terms of algorithms, embedded practitioners may need to focus on three types of algorithms:
Data structures, control algorithms, and signal processing.
Mastering these areas can indeed take 20 years. In other words, there is no such thing as a full-stack concept in embedded systems because embedded systems themselves are full-stack.
But what will happen to embedded practitioners and Java practitioners 20 years later?
Who is Suitable for the Embedded Field?
Here are some situations I’ve listed; if most of them apply to you, I wouldn’t recommend entering the embedded field:
-
Not wanting to work with hardware, absolutely refusing to deal with circuits.
-
Not wanting to write code, feeling nauseous at the sight of code.
-
Not wanting to deal with operating systems, thinking that bare-metal microcontrollers are everything.
-
Wanting to make money quickly, with all aspects of life (car, house) already in place.
Let’s first address those who don’t want to write code or deal with circuits.
Embedded systems require both; even the simplest 8051 cannot proceed without writing code or dealing with circuits. You could say the initial path is blocked.
Now, regarding not wanting to deal with operating systems.
Devices without an OS can handle simple processing, but what about more complex devices and functions? For example, Wi-Fi? Cameras? Lidar?
Not wanting to deal with operating systems greatly limits the development potential of embedded systems. Future products may be concentrated in relatively low-end devices, as almost all vending machines, POS machines, payment machines, and card readers in buses and subways are equipped with operating systems.
The Salary Issue
It is well-known that embedded systems are a potential growth area.
Initially, salaries are generally lower, which is indeed a fact.
Therefore, if you are in a hurry to make money, embedded systems may not be the best fit.
For quick cash, technical positions in Java are still stronger.
Finally, let’s talk about the learning aspect of embedded systems; I hope everyone can share their thoughts.
For beginners, I suggest thinking carefully about whether to enter the embedded field, as embedded systems are indeed a challenging path. If there is no genuine interest, I would recommend switching fields.Check out this article: The Growth Path of an Embedded Engineer.
From Embedded Novice to Expert
Stage One: Getting Started with Digital and Analog Electronics, and C Language
In terms of hardware, learning circuits, digital electronics, and analog electronics is essential, especially digital electronics. Not to say you need to be an expert, but at least you should understand it thoroughly.
On the software side, C language is indispensable. I see that many recommend textbooks like C Primer Plus, but I don’t recommend beginners start with that, as it can be quite challenging. Professor Tan Haokang’s red book is a good alternative, as it is easier to grasp for beginners.
Stage Two: Practical Experience with the 51 Microcontroller
After acquiring a foundation in C language and circuits, start working with the 51 microcontroller, incorporating various peripherals. Work with LEDs, buttons, buzzers, motors, etc., and then explore communication protocols like UART, IIC, SPI, using these protocols to play with modules like MPU6050, OLED, HC05 Bluetooth, etc.
Stage Three: Advancing with STM32 Microcontroller
If you are from an automation background, I recommend experimenting with PID control for motors.
Once you move on to more complex sensors like cameras, upgrade to 32-bit microcontrollers like STM32 for deeper learning. I recommend studying more complex signal processing methods like LKF, EKF, and some basic image processing techniques. Also, try to get familiar with code generators like CubeMX to improve development efficiency.
Later on, start learning real-time operating systems like RTOS, RT Thread, or uCos to elevate your development level further.
Stage Four: SOC + Linux
The journey in embedded systems is far from over; start with SOC development on a Linux platform.
Conclusion
If you plan to pursue a career in automation, the goal is to integrate embedded SOC with image processing and machine learning, linking it with microcontrollers and motor drivers to complete the development of industrial control machines, machine tools, robots, and other devices. If that’s the case, I currently believe the best entry point is OpenCV, and then delve deeper for the best strategy.
If you plan to focus on software, integrate with Android frameworks and Android HAL. Using object-oriented languages like Java and C++, develop and process audio and video for Android, either for video surveillance or Bluetooth headset applications.
Anonymous Expert
https://www.zhihu.com/question/272159066/answer/1510164919