Is the Embedded Industry Really Without a Future?

A first-year graduate student who has been learning embedded systems for four years since undergraduate studies, here to share a few thoughts.

First, let’s talk about the employment situation of graduates from my alma mater.

My university is an ordinary second-tier institution, 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 studies at a teacher training university, which is relatively weak in engineering, I had to find my own direction during my 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 programming.

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 choppy manner. For articles about the car, I recommend: Is it easy to make an STM32 car?

After that, I started working with STM32. The peripherals that were troublesome on the 51 board, like cameras and gyroscopes, suddenly became easy to use. External interrupts and timers were no longer as scarce as on the 51 board, and there were plenty of peripherals available… etc.

For simple devices, an 8-bit microcontroller suffices, while complex devices require a 32-bit microcontroller. 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.

For the former, the existing flags were no longer sufficient, so I researched and implemented a finite state machine (FSM).

For the latter, there were no good ideas for a while 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 viewed as processes and threads at the operating system level.

Currently, I am still learning embedded systems, studying with my teacher on the 2440, 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 with PID, Kalman filtering, etc.

Definition of the Embedded Industry

Having said so much, I feel like I’ve strayed a bit 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 the 8-bit 8051 as embedded.

  • Including RTOS, RT Thread microcontroller system development as embedded.

  • Linux system API development and driver development as embedded.

  • SOC (System on Chip) + Linux + OpenCV + CNN + YOLO also counts as embedded.

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-end while Linux and machine learning are high-end. After all, in embedded technology, all of these elements are indispensable; the difference lies in the level of complexity. What we need to do is not to stand in opposition but to adapt to the situation.

For example, if you are controlling a brushed DC motor, the 51 board is sufficient, but for a three-phase brushless motor, you might need an STM32. A 30W pixel camera can be easily handled by STM32, but a 200W or higher pixel camera may require an SOC. If you are doing facial recognition, you will likely need to use an SOC. Conversely, while SOCs have strong performance, they also have high power consumption and lower stability compared to microcontrollers. Some devices that require stable control (like motors) still need microcontrollers.

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 require writing code, soldering, or drawing. However, embedded systems typically require both software and hardware skills. Moreover, it often requires the ability to draw (PCBs).

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, in China, computing is still primarily software-focused (the three giants, BAT, are all pure software companies). As a hardware-based field, embedded systems naturally face more challenges in development. This is also 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 quite high (currently, I believe the only field in the IT industry 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 who enter the embedded industry are still concentrated in the microcontroller field, which pulls down 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. If software only covers front-end (HTML5, Vue.js, etc.) and cannot achieve full-stack, or if hardware only covers simple signal boards and cannot handle multi-layer boards, high-frequency signal boards, or high-current boards, or if mechanical engineering only covers 2D drawings and cannot do mold design, the salaries will not be high. I have a classmate who graduated this year and went into front-end development, earning only 3,000 yuan… This indicates that the entry barriers are not as high as those for embedded systems, and since most practitioners are concentrated in low-end industries, the average salary will naturally be lower than that of embedded systems, which is not 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 included.

  • Knowledge of Linux and operating system principles is necessary.

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 completely could indeed take 20 years. In other words, there is no such thing as a full-stack developer in embedded systems because embedded systems themselves are full-stack.

But what will happen to embedded practitioners and Java practitioners 20 years from now?

Who is Suitable for the Embedded Field?

If most of the following situations apply to you, I would not recommend entering the embedded field:

  • Not wanting to work with hardware, absolutely refusing to work with circuits.

  • Not wanting to write code, feeling nauseous at the sight of code.

  • Not wanting to deal with operating systems, believing that bare-metal microcontrollers are everything.

  • Wanting to make money quickly, with all aspects of life (car, house) in place.

Let’s first discuss those who do not want to write code or work with circuits.

Embedded systems require both; even the simplest 8051 cannot be worked on without writing code or dealing with circuits. You could say that the path is blocked from the start.

Now, let’s talk about those who do not want to deal with operating systems.

Devices without an OS can handle simple tasks, but what about more complex devices and functions? For example, Wi-Fi? Cameras? Lidar?

If you do not want to deal with operating systems, the potential for development in embedded systems is greatly limited. Products may end up being concentrated in relatively low-end devices, such as vending machines, POS machines, payment machines, and card readers for buses and subways, which almost invariably run on 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 discuss the learning aspect of embedded systems, and 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, it is advisable to switch fields.

See 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 do not recommend beginners to read it, as it can be quite challenging. Professor Tan Haokang’s red book is sufficient, as it is easier to get started.

Stage Two: Practical Experience with the 51 Microcontroller

After acquiring a foundation in C language and circuits, start working with the 51 microcontroller, interspersing some peripherals. Work with LEDs, buttons, buzzers, motors, etc., and then explore communication protocols like UART, IIC, SPI, and use these protocols to play with modules like MPU6050, OLED, HC05 Bluetooth, etc.

Stage Three: Advancing to STM32 Microcontroller

If you are from an automation background, I recommend experimenting with PID control for motors.

Once you move on to cameras and other complex sensors, upgrade to 32-bit microcontrollers like STM32, and delve deeper into learning. I recommend studying more complex signal processing methods, such as LKF, EKF, and some basic image processing techniques. Also, try to become familiar with code generators like CubeMX to improve development efficiency.

Later on, start learning about real-time operating systems, such as RTOS, RT Thread, ucos, etc., to elevate the entire development level.

Stage Four: SOC + Linux

The journey in embedded systems is far from over; start SOC development on a Linux platform.

Is the Embedded Industry Really Without a Future?

Conclusion

If you plan to work in the automation field, the goal is to integrate embedded SOC with image processing and machine learning, linking it back to microcontrollers and motor drivers. This will complete the development work for industrial control machines, machine tools, robots, and other devices. If this is the case, I currently believe that the best entry point is OpenCV, and then delve deeper, which is the best strategy.

If you plan to work in software, integrate with the Android framework 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 headsets.

Anonymous Expert

https://www.zhihu.com/question/272159066/answer/1510164919

Leave a Comment