How to become a master? The advanced road of embedded development...

Click on "Uncle Wheat" above and select "Top/Star Public Account"

Welfare dry goods, delivered as soon as possible

Hello everyone, I am Wheat, today I will share with you what skills to master in embedded.

ddab6e823469bc78762c56ae93ec443d.png

1

Embedded Talent Requirements

What kind of technical talents does the embedded industry need? Carefully observe the job requirements of various recruitment, nothing more than two aspects:

1. General requirements

For example, what education, how many years of work experience, innovative spirit, strong ability to withstand pressure, hard-working, good at communication, serious attitude, etc...

2. Professional requirements

This is really a lot, but it is nothing more than a variety of proficient. What is proficient in control theory, proficient in circuit design, proficient in various hardware driver development, proficient in linux kernel and tailoring, proficient in C/C++/Java language, proficient in DSP, proficient in ARM, proficient in linux / ecos / ucos / wince / VxWorks, proficient in embedding database, proficient in multi-threaded programming, proficient in various network protocols, proficient in various bus protocols, proficient in Android/IOS platform application development, proficient in assembly, compiler, binary tools, proficient in various media packaging formats, codecs, proficient in communication technology , proficient in hardware schematics, proficient in PCB design, proficient in computer structure, proficient in bootloader, proficient... I feel that as long as it is in the industry, it must be proficient. (The author feels that it takes a long time to master one subject...)

After reading these, especially the professional requirements, is your head big?

So, let's analyze the above requirements. The general requirements of various companies seem to be copied and pasted from each other, such as education , experience, and personal temperament. I don't know how each company inspects employees before they enter the workforce. Professional requirements are dizzying at first glance. It may be easier to understand the structure of embedded development.

In terms of technical implementation, embedded products are divided into two categories: one is simple, without operating system support; the other is complex, with operating system. As far as the current development direction is concerned, the latter is the trend. The former can be divided into 3 layers from the program implementation: hardware layer, driver layer, application layer; the latter is divided into 4 layers: hardware layer, driver layer, system layer, application layer.

Therefore, embedded development generally requires four types of engineers from bottom to top: embedded hardware development, embedded driver development, embedded system development, and embedded software development.

2

mastered skills 

Embedded development involves a wide range of areas and requires a lot of skills.

1. Embedded hardware development

This is done by hardware engineers, generally from automation, electronics, communications and other majors. They are required to be familiar with circuits and other knowledge, very familiar with various common components, master the development capabilities of analog circuit and digital circuit design, and be familiar with hardware development modes and design. Mode, familiar with various chips and peripheral devices, familiar with 8-bit 16-bit 32-bit processor embedded hardware platform development.

Some require the development experience of FPGA, and the commonly used hardware design tools: Protel/PADS(PowerPCB)/Cadence/OrCad.

Generally have 4~8 layers of high-speed PCB design experience. Since I'm not a hardware maker and I'm not familiar with this piece, I don't dare to make false statements.

2. Embedded driver development

This can be done by hardware engineers or software engineers, depending on the device. At present, driver development, unless it is a simple device driver, is actually transplanted in many cases, so it is more necessary to master the hardware and system characteristics of the target platform.

Therefore, you must at least have some knowledge about operating systems, system structures, computer composition principles, and data structures. Familiar with embedded ARM/MIPS/PowerPC architecture. Have the ability to transplant and develop single-chip microcomputer and one or more 32-bit embedded processors, be familiar with the bootloader process, have solid hardware knowledge, understand hardware schematic diagrams, and be able to independently debug related hardware drivers, and be able to write software drivers according to chip manuals .

If it involves network equipment, you may also need to master the principles of many high-level network protocols. Personally, although most of this piece is not difficult, it is extremely important. Of course, if you want to provide multi-threading support for the upper layer at this level, some drivers are also difficult to write.

3. Embedded system development

I have never heard of a hardware engineer doing this. To do this, it is essential to be familiar with the principles of operating systems, such as memory management, thread scheduling, file systems, etc.; also be proficient in processor architecture, instruction set, addressing mode, debugging, assembly and mixed programming and other aspects; familiar with the operating system startup process.

For linux, you should be familiar with the modification of Linux configuration files, and master the entire process of kernel trimming, kernel transplantation, cross-compilation, kernel debugging, bootloader writing, root file system creation, and integrated deployment of Linux systems. If this piece is really written, the level of difficulty is quite terrifying. Fortunately, most of them are transplants. It is rare to hear that there are companies that are going to develop an operating system, and they do not have the strength of Google.

4. Embedded software development

Well, if there is no operating system, the program is generally not particularly complicated. If it has the support of the operating system, it is very close to general software development, so it can be regarded as desktop development. This requirement is to be familiar with the API of the system, be proficient in advanced programming knowledge of C language, including functions and program structures, pointers, arrays, common algorithms, the use of library functions and other knowledge, the basic content of data structures; master the basic ideas of object-oriented programming, And the basic content of C++ language;

Proficient in programming under embedded Linux, proficient in embedded Linux development environment, including system programming, file I/O, multi-process and multi-threading, network programming, GUI graphical interface programming, database; familiar with the programming of commonly used graphics libraries, such as QT, GTK, miniGUI, fltk, nano-x, etc., master the use of various application layer network protocols, as well as various audio and video technologies.

5. General skills

In addition, there are some skills that are useful in the above four categories.

(1) Basic skills: engaged in embedded development, there are some essential basic skills

  • Familiarity with the development platform. Most of the current embedded development is carried out in linux or a linux-like environment, so you should be familiar with the use of linux, you must be able to write shell scripts, change configuration files, and use GCC GDB. Tools need to know?

  • For example, how old is the use of project management tools, can't use CVS, and can't use SVN? Excuse me, are you still living in the primitive society of the software age?

  • Data Structures and Algorithms. Engaged in software development, do not understand data structure, algorithm optimization, do not know how to measure complexity, too unreliable, right? Of course, this does not require that all algorithms and data structures be remembered. At the very least, you must know that there are such things and their functions, so that you can check them when you use them.

  • Programming language. Regarding JAVA, I know that the sudden emergence of JAVA has shaken the programming language world, but in embedded development, it is unreasonable to not know C or C++ language. Of course, many mobile phone applications are written entirely in java. If you only want to develop embedded upper-level software and don't want to go further, you can only use JAVA. Regarding assembly, well, this may be difficult, after all, it is related to the specific hardware architecture (mainly CPU), but it is really interesting, and at some point, it is irreplaceable.

(2) Special skills: essential for some parts of embedded development, but may not be of much use for some (such as application development)

  • Digital circuits. This is mainly to understand some basic circuit knowledge, such as gate circuits, logic circuits, memories, registers, in order to better understand the design of embedded chips, memories, peripherals and other hardware, but it is often not available in software development. . Because most hardware provides a very complete software interface.

  • operating system. This refers to the operating system selected on the platform. There are just too many operating systems for embedded products. But the internal design principles of the operating system are the same. The first thing to learn is the operating system principle, to understand several important parts such as process communication, memory management, file system, etc., because these are used in software development, especially kernel driver development.

    Next, you can get familiar with at least one mainstream operating system. Linux is a good choice to understand its kernel architecture, device driver architecture, how to compile, tailor, and write applications, and how to use it in specific embedded applications. on the product.

  • The composition of the computer / the principle of the microcomputer. It is mainly to understand the working principle of the hardware of the microcomputer, and to understand how some key structures such as CPU, bus, I/O, and memory work. Although it is very boring knowledge, it is necessary to be familiar with the working method of peripheral hardware and the operating system. The design and optimization of software architecture is very critical.

(3) Extended capabilities: these may be used

  • letter of agreement. For non-application layer communication protocols, I really don't know if it should be put into the category of operating systems, because many operating systems do not have a network part, but in many aspects it is provided by the operating system. Of course, these lower-level communication protocols seem to be of little concern, because there are too many open source protocol stacks. The network protocol of the application layer may be concerned, such as http, ftp, rtsp, rtmp, mms and so on.

  • Audio and video processing. For example, file encapsulation, audio and video codecs, various audio and video standards, and streaming media. Ffmpeg is a good thing, it is recommended to learn it.

  • information security. Well, this one seems to be getting more and more attention now.

  • database. Alas, the capabilities of embedded devices are getting stronger and stronger! If you do it again, I don't think there is any need for cross-compilation.

Sometimes I discuss the current industry needs with my colleagues. When it comes to companies that can’t always recruit people, and programmers always say that they can’t find jobs, I have a lot of thoughts. Is it the company that has high requirements or the programmers who have high requirements? Sometimes when I see some job requirements, it always blows my confidence. I count them down one by one, as if I can do very little, so I have to make myself work harder. Of course, I sometimes feel that some recruitment is unreliable. Looking at the requirements, I personally feel that if all the requirements are met, ordinary people will have to work hard for ten or eight years. That salary.

For programmers, doing technology is really tiring and difficult. Do a search on the Internet, and there are complaints and emotional posts everywhere, which fully reflect the physical and emotional challenges of this profession. If you are not afraid of difficulties and want to continue to develop technology, then work hard, maybe one day you will pick up a job posting and look down at it: "Damn! Just this request, I will lose the price!", then you are A real bull!

3

Embedded status 

Many newcomers have come to our research and development for nearly ten years. In the past ten years, some of the same group of personnel have quickly adapted to the environment, and through their own efforts and dedication, they can stand alone in the research and development work and become small experts in a certain aspect; However, through guidance and corrections, it has gradually entered the working state, and I believe that after a period of time, it will gradually take on a certain aspect of research and development work.

Why do they have such a big difference in their current abilities and status when they came to work in the same period?

Through getting along and analyzing, I found that all comrades who make rapid progress have the following characteristics:

  • Diligent, often willing to stay and work overtime in order to solve a technical problem.

  • Research, in order to solve a technical problem, will actively study all aspects of the information, do experiments frequently, and verify with facts;

  • Actively communicate with leaders and colleagues in a timely manner, brainstorm resources, make full use of existing experience, avoid detours, and speed up the research and development process.

  • Have a strong sense of professionalism and sacrifice, and never stop until the goal is achieved.

On the contrary, those comrades who have grown up slowly or have not yet integrated into R&D work have the following characteristics:

  • The work has no goals, the energy is scattered, and a lot of time is spent on the Internet, watching videos secretly.

  • Work shirks responsibility, shirks the reason why the work is not progressing to the fact that the work is too difficult or the resources are not enough, but you do not take the initiative to strive for resources.

  • There is no long-term full plan for R&D or even personal career, or the goal of R&D is relatively low just to make a living; people without far-sightedness must have near-term worries, without lofty ideals, any small disturbance from the outside world will Make you half-hearted, so the learning of knowledge is not systematic.

  • Communication with colleagues and leaders is not proactive, or even avoids, fearing that the leader will check the work.

  • Focus more on life than work.

  • Pay more attention to your own efforts.

Two comparisons, the problem is obvious:

R&D work is a very challenging job, which requires hard work and requires a solid theoretical foundation and practical ability;

Be clear-headed, quick-thinking, clear-headed, and orderly in front of development tasks;

Do not retreat in the face of difficulties, do not be discouraged in the face of setbacks;

It requires team spirit, courage, wisdom and determination to resolve conflicts and difficulties, and a strong psychological quality; therefore, the quality and psychological state of personnel are decisive.

Comrades who are motivated, take a little lead, and grow quickly; comrades who do not take the initiative have difficulty in work, struggle to lead, and their mood is also affected.

In order to improve the efficiency of research and development, we have developed management software and formulated various rules and regulations. However, software and systems can only cure the symptoms, not the root causes. The root of the problem is people.

It should be said that the current software and hardware conditions and technical level of the R&D department can allow a group of young people who want to make a difference in the embedded field of electronic technology to achieve impressive results.

However, we cannot be too optimistic about the reality. There are still some problems in the R&D department, especially the quality of personnel. For this reason, we also consulted professionals when we participated in the R&D management training. He said a word: the grass will never grow into a big tree.

So please think about it, are you a sapling now, or a grass seed?

Whether it is a tree or a grass depends on whether you have a strong desire to grow upward, on whether you have the diligence to absorb nutrients from the soil, on your judgment of the value of life, and think that the existing soil is worthy of your solid determination. Come on, make a big tree on this soil.

If we want to become a big tree, we must create conditions for him or her to grow into a big tree; if it is destined to be grass seeds, we can do nothing, only the survival of the fittest.

4

Re-discussion on ability and diligence, etc.

1. Stupid birds fly first and enter the forest early . The cognition of things is proportional to the stimulation frequency and time of the things to the brain. If you do something often, and think about it often, you can understand the truth. The depth of understanding of things is It is achieved by constantly finding mistakes in practice and constantly correcting them.

If people are not diligent and put too much time and attention outside of work, then they will cut off the important link of practice, their level and experience will never be improved, and the improvement of ability will not be discussed. Is the job, the increase in income, in the final analysis, is the improvement of the individual's competitiveness in the society. Do not improve your core competitiveness, indulge in the Internet and other things all day long, is it a bit of a waste of money?

2. Personal orientation determines the attitude of work , thinking determines habits, habits determine behavior, and behavior affects your core competitiveness.

3. Change yourself , not others and the environment.

Original address: unknown

Transfer from the public account: the last bug

Copyright statement: This article comes from the Internet, and the copyright belongs to the original author. Copyright issues, please contact to delete.

—— The End ——

Recommended in the past

How to design a reliable solution for high-load serial communication of single-chip microcomputer?

Quantum charging, filling a car in 9 seconds! Is this mysticism?

GD32 replaces STM32, what are the differences? Don't step on these pits...

Efficient analysis of single-chip communication protocol, the most practical method

The most suitable communication protocol for single-chip microcomputer, how to design?

46 million units sold! The Road to Raspberry Pi

Click to send a business card to follow me

Guess you like

Origin blog.csdn.net/u010632165/article/details/123861551