Peking University master’s degree sharing of 7 years of embedded learning experience

What's everyone's current status like? How has technology progressed in recent years, career promotions, and management levels improved? Welcome to leave a message!

The content of this article comes from Zhihu. I think the content is very good and I would like to share it with everyone. Below I represent the original author.

Author: Meng Ren Yi Leng

Link: https://www.zhihu.com/question/370606355/answer/1865920389

Source: Zhihu

Stage 1

From my freshman year to my junior year, I was the same as most students:

Learn this professional knowledge (EE major), learn the computer courses required for embedded software development (assembly principles, computer composition principles, operating systems, C language, etc.), learn embedded projects (from laboratory projects, projects you think of, and various competitions).

On how to learn embedded software development:

① Learn 51 microcontroller.

At this stage, you only need to follow Guo Tianxiang's videos to learn. You only need to realize the functions and do not ask for in-depth explanations.

But it is recommended to ask questions, such as "Why can writing a specific value to the IO control register light up the LED light?"

"What is the circuit structure of the IO port?"

"What is pull-up and pull-down, sinking current and sourcing current?",

This stage is mainly about getting familiar with the use of microcontrollers, thinking about and discovering problems during use, and getting familiar with some basic concepts.

② Start looking up information and reading books.

Look at analog circuits, digital circuits, etc., and start to understand the issues raised in 1. At this time, the problem mainly focuses on the circuit.

③ Start learning STM32.

Just buy a board, read a book on atoms and follow it step by step.

At this time, you will encounter many computer problems. At this time, while studying the tutorials, you will also learn: microcomputer principles, compilation principles, and operating systems.

You need to understand the ARM architecture, how the CPU fetches, decodes, and executes instructions, and how the address bus, control bus, and data bus work.

You need to understand what are the various files generated at each stage of your compilation, what is scatter loading, what is relocation, what is a code segment, what is a data segment, etc.

Understand how the CPU is started and how the program image is laid out in memory.

You need to know the principle of interruption, on-site protection, etc. Finally, after you understand each knowledge point, turn to GCC to develop STM32. If you have good knowledge at this time, you should be able to quickly learn to write linker scripts and understand the meaning of each statement.

④ Start enhancing the C language.

Dig deep into every corner of the C language.

It's best to know what the compiler will do when you write a statement.

Data structure and software engineering are also required, and it is recommended that you also learn design patterns.

Start learning to develop a good coding style and start thinking about the structure of the code.

It can be said that if you can learn design patterns well, it will be of great benefit when learning the LINUX kernel in the future.

You will find that the input subsystem of LINUX is a bit like the chain of responsibility model, and you will find that the ASOC audio system is a bit like the template method model.

I personally think that if you can examine the same programming idea in two or more different aspects, you will get a deeper understanding and be able to appreciate its essence.

⑤ Study OS books carefully.

Each knowledge point must be understood, what is a process, what is a program, what is a thread, competition deadlock priority inversion, virtual address space, physical address space, user space kernel space, etc.

There is nothing much to say about starting to learn ucos. If you can master various knowledge points in 2 and know how the CPU interrupts and protects the recovery site, then you will not have any doubts in principle when reading the source code of ucos.

If you can develop the ability to grasp the overall structure of the code in 4 and learn the data structure and basic algorithms well, there will be no obstacles to reading the source code.

Once the principles are figured out and the source code can be read, it will be a matter of course to understand ucos thoroughly.

⑥ Write a real-time os on stm32 based on ucos.

⑦ Enter LINUX.

Learn the basic use of LINUX, read Zhao Jiong's kernel analysis, read about LINUX kernel design and implementation, and grasp the overall kernel architecture.

After that, you can learn about drivers. Read the book suggested by Teacher Chen Xuesong to understand the basic driver architecture and how to write a simple driver. Take it seriously. Here we emphasize the device driver model.

Finally, we will analyze the scenario of LINUX kernel source code. Read the upper and lower volumes carefully. Here we focus on the VFS part of the kernel.

After that, I will read Teacher Song Baohua’s book to further learn about driver development.

Finally, look at the kernel source code, look at the kernel source code, look at the kernel source code.

⑧ Other SPI, IIC, and DMA are all just a question of skills. As long as you learn the knowledge well, you can use whatever skills you want.

Stage 2

From my junior year to my graduate school entrance, I was extremely torn between work and postgraduate entrance examinations. During this period, I often thought countless times about what embedded development is, how to do it well, and what kind of career path I should choose in the future.

For this reason, like many people, I have consulted many senior embedded developers on Zhihu.

At this stage, I learned Linux driver development and gradually realized that embedded development is a more software-oriented position (I think most students do embedded software development rather than hardware development).

You should study the knowledge of computer architecture in depth instead of doing those boring embedded-related projects over and over again (especially avoid participating in messy competitions).

In the end, I chose to go to graduate school because I wanted to look at this matter from a higher perspective.

Stage 3

When I entered the postgraduate stage (2018), when everyone was eager to join the AI ​​camp, I still had a deep love for embedded.

When selecting courses, I chose courses related to embedded real-time operating systems and computing architecture. I also read many related books and continued to study embedded Linux every week.

I obviously chose to be a low-level tutor, but the tutor switched to deep learning. Fortunately, it was in the direction related to terminal + AI, and it was not completely deviated from embedded. This is somewhat gratifying (after all, I am still Can't fit the embedded one).

At this stage, due to contact with a lot of people and things, I realized more and more that embedded is just a platform, and embedded should not be regarded as a specific position, regardless of hardware or software.

Therefore, I have a better understanding of this position and the current employment situation in the industry.

Stage 4

At this stage from second to third year graduate school, I was completely relieved of embeddedness in the narrow sense (driver, application development).

I think what many people like about embedded is not the development of drivers or applications, but the curiosity about the underlying system and the pleasure of controlling it .

Rather than saying that I like embedded, I like computer architecture.

Therefore, I like software development as long as it involves hardware, and I also define it as embedded.

Because embedded software development is a kind of software development based on knowledge of underlying languages, computer composition principles, operating systems, etc.,

If you want to do a good job in embedded development, you must learn these courses well. If you learn these courses well, you should be qualified for any low-level software development position.

Therefore, why should embedded development be narrowly classified into driver development, XX protocol development, etc.?

Finally, at this stage, I resolutely gave up learning Linux drivers and threw myself into the embrace of Python deep learning.

I no longer pay attention to whether what I am doing is embedded development, but only whether it has anything to do with the embedded platform.

What I study is how to deploy a deep learning model to an embedded platform.

Some people may wonder, what does this have to do with embedded development? Why doesn't it matter? Using C language to write the forward reasoning of the neural network model on the embedded platform, doesn't this put our knowledge of C language and composition principles into play?

When the performance of the image processing program is insufficient, look at the generated assembly program. When the assembly efficiency is not high, replace the C language with the assembly code we wrote ourselves. Isn't this embedded enough?

In fact, when we broaden our thinking, embedded is no longer a specific position.

It may be an AI operator engineer, AI compiler development engineer, FPGA acceleration engineer, high-performance engineer, etc.

The skills required for these positions are very similar to those of embedded engineers, but the annual salary starts at a minimum of 30W.

Why? It's simple, supply and demand determine the price! Embedded has long been in decline, but embedded + a certain trend can lead to high salaries. This principle is universal in any technical field.

From 2018 to 2021, embedded + AI = high salary, and embedded + XX will also be possible in the future.

As for what the future trends will be, it’s up to us to explore them ourselves. As long as we ensure that we have core knowledge reserves and learn some related technologies, we will be able to turn around in no time.

After broadening my horizons, I went to intern at two large companies, and subsequently received offers from many companies.

There are pure algorithm (computer vision) positions (50-60W), heterogeneous computing positions (45-55W), and AI chip tool chain-related positions (45W-50W).

Looking back, I seem to have abandoned technology for a long time, but I still seem to be on the road to embedded learning.

a4350e3490335912254be44412aefcfe.png

Recommended in the past

fa22135e02036ba246f67b9b547e876d.jpeg

What determines a hardware engineer's salary?

b508019e3282242adfa61a02e335381f.jpeg

How to calculate battery capacity? A thorough understanding of battery power monitoring technology in one article

145803598b60390ba140c95459cd7e61.jpeg

In the amusement park, while taking care of children, I write code and share some interesting and interesting embedded software and hardware information.

c60eab2039adb768281b411dcf5fb961.jpeg

When our engineers change jobs, HR likes to hear these reasons for leaving! Let’s see what the best answer is

Guess you like

Origin blog.csdn.net/karaxiaoyu/article/details/132798080