I have been engaged in embedded development for a year, and I feel like I’m going to talk to you. Maybe a lot of friends will be as annoyed as I was at the beginning, and I am troubled by not knowing what to reserve, so write something to give these friends a reference. In addition, you can also spur yourself, let yourself see your own shortcomings, and recognize the future development direction.
First of all, IT is an industry that needs constant learning. No industry like us needs to constantly touch new things and learn new knowledge. As in the case of "You can't afford to learn a computer," you will develop the upper layer. A programming language kills you; engage in system development, all kinds of systems kill you; do the underlying, various assembly, chip, instruction set to kill you; of course, no matter which layer, various compilers, tools, Software and hardware knowledge and so on can kill you. A small part of a casual class of learning is a brick-and-mortar book. If you don't understand, you can also ask 21ic. Second, the embedded industry is more like IT in IT. The standards are lacking, the specifications are changeable, and the technology changes are extremely fast. The newly popular technology may lose its vitality in two years. For example, Saipan, Nokia gave up, Intel's MeGoo, and did not move, and now Android is very hot, maybe a few years like today's Saipan, it feels like it can never keep up with the rhythm of the times.
Therefore, many people say that IT is a youthful meal. It is not an exaggeration. When you are older, you may not be able to do it.
What kind of technical talent is needed in the embedded industry?Carefully observe the job requirements of various recruitments, nothing more than
1. General requirements: such as academic qualifications, years of work experience, innovative spirit, strong ability to withstand stress, hard work, good communication, serious attitude, etc...
2, professional requirements: This can be really more, but nothing more than a variety of proficiency. 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 Saipan/Android/IOS platform application development, proficient in assembly, compiler, binary tools; proficient in various media encapsulation formats, codecs; Proficient in communication technology; proficient in hardware schematic; proficient in PCB design; proficient in computer structure; proficient in bootloader, proficient... feels as long as it is within the industry to be proficient (I am going! I feel proficient in one door for a long time...)
After reading these, especially the professional requirements, is the head big?Then we will analyze the above requirements. The general requirements of each company are like copying and pasting each other, such as academic qualifications (personally think that scholastic ability is obviously more important), such as experience (has n years of experience, and n years of experience used n years?), also Personally, I don't know how companies can look at employees before they join the job. Professional requirements (in fact, proficient in a few of them is quite remarkable), at first glance, it makes people feel dizzy, understand the structure of embedded development may understand.
From the technical realization point of view, embedded products are divided into two categories: one type is simple, there is no operating system support; one type is complex, there are operating systems. Looking at the current development direction, the latter is the trend. The former can be divided into three layers from the program implementation: hardware layer, driver layer, and application layer; the latter layer is divided into four layers: hardware layer, driver layer, system layer, and application layer.
Therefore, embedded development requires such four types of engineers from the bottom up: embedded hardware development, embedded driver development, embedded system development, embedded software development.
What skills should they have?1. Embedded hardware development: This is a hardware engineer. It is generally used for automation, electronics, communication, etc. They require familiarity with circuits and other knowledge, are very familiar with various common components, and master the development capabilities of analog circuits and digital circuit design. Familiar with hardware development mode 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 FPGA development experience, the usual hardware design tools: Protel / PADS (PowerPCB) / Cadence / OrCad. Generally have 4 to 8 layers of high-speed PCB design experience. Since I am not hardware, I am not familiar with this piece, so I dare not rumor.
2, embedded driver development: This can be done by hardware engineers, but also software engineers to do, mainly depends on the equipment. Currently, driver development, except for simple device drivers, is actually a lot of porting, so it is more important to master the hardware and system features of the target platform. So at least have to master some operating system, system structure, computer composition principles, data structure related knowledge. Familiar with embedded ARM/MIPS/PowerPC architecture. With single-chip microcomputer, one or more 32-bit embedded processor migration development capabilities, familiar with the bootloader process, with solid hardware knowledge, understanding hardware schematics, can independently complete the relevant hardware driver debugging, can write software drivers according to the chip manual . If you are involved in network equipment, you may have to master many of the principles of high-level network protocols. Personally, this piece is not difficult, but 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: This did not hear hardware engineers to do. Do this, familiar with the principles of the operating system is essential, such as memory management, such as thread scheduling, such as 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, master the whole process of kernel reduction, kernel porting, cross-compilation, kernel debugging, startup program bootloader writing, root file system creation and integrated deployment of Linux system. If this piece is really written, the degree of difficulty is quite horrible. Fortunately, most of them are transplanted. It is rare to hear that a company has to develop an operating system. There is no Google strength.
4 embedded software development: Well, without an operating system, the program is generally not particularly complicated. If there is support from the operating system, and it is very close to the general software development, it can be seen as desktop development. This requirement is familiar with the system's API, proficient in C language's advanced programming knowledge, including functions and program structure, pointers, arrays, commonly used algorithms, the use of library functions, and the basic content of data structures; master the basic ideas of object-oriented programming, And the basic content of C++ language; proficient in embedded Linux programming, 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 common Programming of graphics libraries, such as QT, GTK, miniGUI, fltk, nano-x, etc., to master the use of network protocols in various application layers, as well as various audio and video technologies.
There are also some skills that are used in all four categories:1 basic skills: engage in embedded development, there are some essential basic skills.
a) The familiarity of the development platform, most of the current embedded development is carried out under the environment of linux or linux-like environment, then the use of linux should be familiar with it, the shell script will be written, the configuration file will be changed, GCC GDB will use it, will the Make tool get it?
b) For example, the use of project management tools, what age, will not use CVS, and will not use SVN? Excuse me, are you still living in the primitive society of the software age?
c) Data structure and algorithm, engage in software development, do not understand the data structure, do not optimize the algorithm, do not measure the complexity, too unreliable, right? Of course, this is not a requirement for the algorithm, and the data structure is remembered. At the very least, it is necessary to know that there is such a thing, what is the role, so that when used, it can be checked.
d) Programming language, about JAVA, I know that the emergence of JAVA is a shock to the programming language world, but under embedded development, it will not be C or C++ language. Of course, many mobile phone applications are written entirely in Java. If you only want to engage in embedded upper-layer software development and don't want to go deeper, you can use JAVA. Regarding the compilation, um, this may be quite 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).
a) digital circuits, this ... is mainly to understand some basic circuit knowledge, such as gates, logic circuits, memory, registers, in order to better understand the design of embedded chips, memory, peripherals and other hardware, but often in software It may not be available in development. Because most hardware provides a very complete software interface.
b) Operating system, this is the operating system selected on the platform. The embedded product operating system is too much. But the internal design principles of the operating system are the same. The first thing to learn is the operating system principle, to understand the important aspects of process communication, memory management, file system, etc., because these will be 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, crop, write applications, and how to use it in a specific embedded On the product
c) The composition of the computer / microcomputer principle, mainly to understand the hardware working principle of the microcomputer, understand how the CPU, bus, I / O, memory and other key structures work, although it is very boring knowledge, but familiar with the periphery The way the device hardware works, and the design and optimization of the operating system and software architecture are critical.
3 extended capabilities, these may be used.
a) Communication protocol, for the communication protocol of non-application layer, I really don't know if it should be put into the scope of the operating system, because many operating systems have no network part, but in many aspects it is provided by the operating system. . Of course, these underlying communication protocols seem to be less of a concern, because there are too many open source protocol stacks. The application layer network protocol may be concerned, such as http, ftp, rtsp, rtmp, mms, and so on.
b) Audio and video processing, such as file packaging, audio and video encoding and decoding, various audio and video standards, as well as streaming media or something. Ffmpeg is a good thing and it is recommended to learn.
c) Information security, well, this piece seems to be getting more and more attention now.
d) Database, hey, the ability of embedded devices is getting stronger and stronger! If you do it, I don't have to cross-compile it. .
Sometimes I talked with my colleagues about the current industry needs. When it comes to companies that can't always recruit people, programmers always say that they can't find a job. They have a lot of feelings. Is the company demanding high or is the programmer demanding high? Sometimes, when I see some job requirements for recruitment, I always hit my own confidence. I count down a lot. It seems that I can do it very little. I have to work harder and try harder. Of course, I sometimes feel that I am Some of the recruitment is not reliable, look at the requirements of that article, personal feelings should be done, ordinary people have to work hard for ten or eight years, such a big cow, it is estimated that you can not afford the salary given.
For programmers, doing technology is really a very difficult thing. Online search, complaints posted everywhere, emotional stickers, fully reflect the professional test of the body and emotions. If you are not afraid of hardships and want to do the technology, then work hard. Maybe one day you will pick up a job posting and despise one thing: "Rely! On this request, I will go down the price!", then you are Real big cow!
Fiber Optic Box,Fiber Optics Box,Fiber Optic Boxes,Fiber Optic Junction Box
Cixi Dani Plastic Products Co.,Ltd , https://www.dani-fiber-optic.com