Hot Article Introduction | Click the title to read
Embedded Professional Series Books
In recent years, with the rapid development of mobile internet and the Internet of Things, embedded technology has become increasingly popular, playing an increasingly important role in communications, networking, industrial control, medical, electronics, and other fields. Before introducing the career development direction of embedded development, let’s first understand the essence of embedded devices. The essence of embedded devices is a dedicated, microcomputer, so like a computer, it consists of three levels of components:
-
Hardware, including CPU (such as ARM), storage (such as flash), I/O (display modules, communication modules, audio and video modules, I/O control circuits, etc.).
-
System-level software, mainly the operating system (OS), and I/O software such as LCD, Bluetooth, WiFi, CDMA, sound, and other subsystems.
-
Application software, such as application development based on Linux, Android, iOS, etc.
In fact, all devices with digital interfaces, from large aircraft and rockets to mobile phones, computers, and even keyboards, mice, hard disks that make up ordinary PC terminal devices, currently various smart hardware products on the market, all use embedded systems. Embedded systems are the product of combining advanced computer technology, semiconductor technology, and electronic technology with specific applications in various industries. Embedded systems are undoubtedly one of the hottest and most promising IT application fields today.
There are many development directions for embedded development, with varying levels of difficulty. Below are the four main career development directions:
1. ARM + Linux/Android Development
According to statistics, 99% of smartphones and tablets worldwide use ARM architecture. All iPhones and iPads use ARM chips, and most Kindle e-readers and Android devices also adopt this architecture. Most leading networking/telecommunications manufacturers are actively migrating their next-generation platforms to the ARM platform, and it is reasonable to believe that ARM will play an extremely important role in the industry in the coming years.
Embedded systems combine hardware and software, and people engaged in ARM development mainly fall into two categories:
Embedded Software Development Engineers
(1) Application development, including Android application development or application development on Linux (QT, etc.), which is currently popular, easy to find jobs, and offers good pay. Mastery of languages such as C, C++, and Java is required.
(2) Operating system porting, which is relatively complex, involving Linux, Android, etc. Many mobile manufacturers (such as Xiaomi, Meizu, LeEco, etc.) are launching operating systems that modify the kernel and change the skin, making it still quite easy to find jobs.
(3) Low-level driver development, which is not easy to get into or advance in, requiring a deep understanding of hardware and OS, but with good prospects for development.
Embedded Hardware Development Engineers
(1) Similar to mobile phones, creating overall circuits on processors is much more challenging than entering the field with microcontrollers, and those who become technical experts will not lack for money.
(2) SOC (System on Chip) architecture development. It is also known as a system-level chip, indicating that it is a product with a specific purpose integrated circuit, containing a complete system and all embedded software. It is also a technology used to implement the entire process from determining system functionality to dividing software/hardware and completing design.
2. FPGA Development
FPGA (Field Programmable Gate Array) products have a wide range of application fields, including communications, consumer electronics, automotive electronics, industrial control, testing and measurement, etc. The changes in applications have made the evolution trend of FPGA products increasingly evident in recent years: on one hand, FPGA suppliers are committed to using the most advanced processes to improve product performance and reduce costs; on the other hand, more and more general-purpose IP (Intellectual Property) or customer-customized IP are being introduced into FPGAs to meet the rapid time-to-market requirements of customer products.
FPGA development is significantly different from traditional PC or microcontroller development. FPGA is primarily based on parallel computation and is implemented using hardware description languages; compared to PCs or microcontrollers (whether Von Neumann or Harvard architecture) which operate in sequence, this creates a higher entry barrier for FPGA development.
Common four misconceptions when learning FPGA:
-
Not familiar with the internal structure of FPGA and not understanding the basic principles of programmable logic devices.
-
Misunderstanding HDL languages, unable to see the hardware structure.
-
FPGA itself is not much; everything is outside of FPGA.
-
Digital logic knowledge is fundamental.
3. DSP Development
DSP (Digital Signal Processing) is an emerging discipline that involves many subjects and is widely applied in various fields. The global DSP market has a very broad prospect, and the DSP industry is expected to become one of the most promising sunrise industries of the 21st century. In recent years, with the continuous decrease in the prices of DSP chip products, DSP has rapidly expanded from military applications to civilian use, such as applications in computers, networks, mobile phones, modems, and numerous consumer electronic products.
Learning DSP involves many contents, so targeted learning and application are very important. There are several key areas that must be mastered: hardware production and learning; class/micro driver models; C/assembly program development; CSL/BSL usage and understanding; RF5 algorithm framework; knowledge in the field of imaging, etc.
4. IC Design
Did you know? Bus IC cards for work, ATM bank cards for withdrawals, building access cards, etc., are all products that apply IC design, which is indispensable in the modern world. IC design (Integrated Circuit Design) is a discipline of electronic engineering and computer engineering, mainly involving the use of professional logic and circuit design techniques to design integrated circuits.
Since 2009, China’s IC design industry has gradually increased its market share globally through strong market purchasing power and the growth of its own brands. The demand for orders from Chinese IC designers is expected to become the highest growth region globally in the next three years. To ride this wave, 2015-2017 will be an important time for global wafer foundry manufacturers to compete for positioning.
How to learn IC design? It requires a certain foundation in analog circuits, experience in mixed-signal circuit design; good electronic circuit analysis ability; experience in SOC design and verification; proficiency in design languages such as Verilog, Tcl, C, Perl, etc.
Embedded system design is an essential part of electronic product design. Currently, most technology companies and maker teams at home and abroad have established their own embedded development teams. The positions required by the team include: system design engineers, hardware engineers, low-level driver engineers, Linux system engineers, application design engineers, etc. The Huqing Yuanjian Education Group suggests that students majoring in computer science, electronics, communications, automation, and related fields consider embedded development as a future career direction, as both salary and development prospects are very good. Starting as an engineer, there are generally a few development directions: one is to become a core technical expert in the field; another is to become a project supervisor or management talent through project training; and another is to use their technology and industry experience to start a business. In summary, in the context of the Internet of Things, embedded development will become one of the most promising career development directions.
What to learn for embedded development
For those engaged in embedded software, the most important technologies are (in fact, many companies’ recruitment ads state this):(1) Master the structure and principles of mainstream embedded microprocessors(2) Must master an embedded operating system(3) Must be familiar with the embedded software development process and have completed at least one embedded software project.
First, it should be clear that embedded work has divisions, with some doing hardware and others doing software. Hardware engineers may work on PCB, SOPC technology, and chip design, etc. Generally, the demand for embedded software engineers is greater than that for hardware engineers. In larger companies, the ratio of hardware engineers to software engineers is generally about 1:3 to 1:5. If students have no foundation at all, we recommend studying embedded software, as it has a broader employment scope and is easier to find jobs.
Embedded software engineers also have various divisions, such as embedded application engineers, embedded driver engineers, and embedded system engineers.
These require different knowledge. First, embedded application engineers generally need to master embedded development environments, C programming under Linux, and some application-specific knowledge, such as making interfaces with QT, MINIGUI, etc.
Embedded driver engineers and system engineers need not only the above knowledge but also an understanding of processor-related knowledge, such as ARM, MIPS, etc., as well as their peripherals, such as UART, Memory Control, flash, I2C, SPI, etc.
Embedded driver engineers and system engineers generally have higher salaries than application engineers, but this does not mean that beginners must seek embedded driver and system positions. We recommend starting with embedded applications, gaining a year or two of experience before transitioning to embedded driver work.
How should these courses be learned? You can follow the relevant topics I listed above, and find some embedded video tutorials online. Our tutorials start with the most basic C language, Linux basics, and then progress to related driver and system courses, C++, and finally cover ARM architecture.
Finally, the most important thing in embedded learning is to persist; don’t give up after learning for two days, or you will never learn it.
Basic Conditions
Due to the relatively high threshold of the embedded industry, this has also led to the scarcity of embedded talent, and the rising value of such talent. What basic conditions are needed to learn embedded systems? How high is the threshold for the embedded industry?
1. A positive learning attitude
To learn embedded Linux professional technology well, the learning attitude and methods are crucial. Many friends only understand the beautiful development prospects of embedded Linux and focus on high income, numerous job opportunities, etc., while neglecting the learning process itself. To maximize the effects of concentrated training, it is recommended that everyone learn more about the characteristics of embedded product development, the technical specifications needed, and the key points of work before starting to learn, to prepare mentally for subsequent intensive learning, as attitude often determines the final outcome.
2. A spirit of not fearing hardship or fatigue
Many people know that learning a technology well within four months is quite challenging and a very arduous process, as during the entire concentrated learning process, one must ensure attentive listening in class and practical exercises while also continuing practical exercises and researching materials outside of class. Only through this high-intensity, practice-oriented training can one master the standardized embedded development workflow in a relatively short time, making oneself meet the requirements of embedded enterprises for corresponding positions.
3. A certain foundation in C language
In the embedded Linux field, most development will use C language. C language is concise, compact, easy to use, and flexible, plus GNU’s extensions in practical project development, making C language play a crucial role in the entire embedded Linux development process. Therefore, to learn Linux, one must have a certain foundation in C language. Although many universities currently offer C language-related courses, it is still necessary to remind everyone that if you really want to participate in Linux learning, you must review C language knowledge well, as a solid foundation in C language can better guarantee your subsequent learning.
Most Important Courses in Embedded Software
1. Structure and Application of Embedded Microprocessors
This is a fundamental course in embedded hardware, replacing the traditional “Principles and Interfaces of Microcomputers” course (currently, a few IT majors in some universities in China have done this, as teaching x86 microcomputer principles and interfaces is difficult to find practical use, serving only for teaching purposes). As we mentioned, embedded systems are a combination of software and hardware technology, and those engaged in embedded software should have a thorough understanding of ARM processor working principles and interface technologies, including ARM’s assembly instruction system. If one does not understand processor principles, how can one control hardware operations, write memory-efficient and fast-running optimal code (embedded software design particularly emphasizes time and space efficiency), and write driver programs (driver programs interact with hardware)?
Many companies require embedded software personnel to be familiar with ARM processors when hiring. In the future, if students engage in embedded software development in a company, the company will provide a hardware specification manual (xxx Specification), and you must be able to understand the basic descriptions of memory distribution and port usage (just like x86 assembly). Otherwise, how can you design software? Some students find embedded processor courses relatively dull, mainly because hardware courses tend to be abstract. Others may not be interested in ARM assembly, thinking that using C language for embedded development is sufficient. However, assembly language should not merely be treated as a programming language; learning assembly is primarily to grasp processor working principles. A person unfamiliar with assembly language cannot write optimal C language code for that processor. In some critical parts of embedded development, assembly code must sometimes be written, such as in Bootloader, etc. (which may also include BSP). Especially in scenarios with extremely high speed requirements (such as high-speed image acquisition and decompression in DSP processors), assembly programming is still predominantly used (I have seen many companies do this). When you work in an embedded company, many manuals describing principles may be written in assembly (I have encountered this), as many hardware designers can only write or prefer to describe using assembly; at that time, you must be able to understand assembly code, or else communication between software and hardware personnel may become impossible.
2. Embedded Operating System Courses
Aside from WinCE’s relatively poor real-time performance, most embedded operating systems have strong real-time capabilities, so they can also be called Real-Time Operating Systems (RTOS). Those engaged in embedded systems must master at least one embedded operating system (of course, mastering two is even better), which is the most critical aspect of all embedded technologies. Currently, the most important RTOS includes: First Class, Traditional Classic RTOS: The most notable is the Vxworks operating system and its Tornado development platform. Vxworks appeared earlier, has strong real-time performance (reportedly responsive to external event requests within 1ms), and has a very small kernel (reportedly as small as 8K), with high reliability, etc., so in North America, Vxworks occupies more than half of the embedded systems market. Especially in systems with high real-time requirements, such as communication equipment, Vxworks is almost indispensable. Many concepts and technologies of Vxworks are very similar to those of Linux, primarily developed in C language. Companies like Bell-Alcatel, Lucent, and Huawei use Vxworks extensively in product development. However, due to its high price, many smaller companies or products cannot afford it. Currently, many companies are transitioning to embedded Linux (it is said that Huawei is doing this). Nonetheless, Vxworks will remain unshakable for a long time. Similar to Vxworks, there are several other well-known real-time operating systems like pSOS, QNX, Nucleus, etc.Second Class, Embedded Linux Operating Systems: The prospects for Linux, aside from being a server operating system, are most successful in embedded applications, primarily due to its free, open-source nature, extensive software support, and large community, which lowers the cost of embedded products. Linux itself is not an operating system designed for embedded systems, it is not a microkernel and does not have strong real-time performance. Currently, there are two main types of Linux systems used in embedded fields: one is a trimmed version of Linux specifically designed for embedded systems, the most commonly used being uClinux (without MMU functionality), which currently occupies a large application share and can run on ARM7; the other runs on ARM 9, generally involving the porting of Linux 2.4.18 kernel, allowing the use of more Linux features (of course, uClinux can also run on ARM 9). Many predict that embedded Linux is expected to occupy more than 50% of embedded operating systems, making it very important. Its downside is that there are too few people familiar with Linux, and the development difficulty is slightly higher. Additionally, many textbooks and universities currently use uCOS/II as the teaching RTOS, mainly because uCOS/II is relatively simple and open-source, making it suitable for beginners to learn RTOS principles. However, due to its limited functionality, it is rarely used in practice, so our institution does not prioritize it in teaching; instead, we should learn practical systems like uClinux, which is very useful. Moreover, being familiar with Linux development is beneficial not only in embedded fields but also for developing Linux application software and deepening one’s understanding of operating systems, achieving multiple benefits. As far as I know, Intel and Philip are heavily involved in ARM+LINUX embedded development, while Fujitsu is doing Linux development on its processors. Currently, in the embedded Linux field, there are several types of people that are particularly hard to find: one is those who can port Linux to a new model development board; two are those who can write Linux driver programs; three are those familiar with Linux kernel trimming and optimization. Our institution’s course series in embedded Linux includes: a required undergraduate operating systems course, followed by an elective course in Linux programming, and finally an elective course in embedded Linux systems.
Third Class, Windows CE Embedded Operating System: Microsoft has also recognized the huge market for embedded systems; MS is always the strongest. WinCE has only been around for a few years but has already captured a significant market share, especially in cases where high interface requirements or rapid development are needed, such as PDAs, mobile phones, and display instruments. WinCE is currently very popular (it is said that a company selling industrial control machines sells so well that they can’t keep up with customizing WinCE for customers). Since WinCE development is in a familiar VC++ environment, students who have taken Windows programming courses will not find it too challenging, which is also why WinCE is easily accepted by people; the development environment is convenient and fast, and Microsoft’s strong technical support makes WinCE development much easier than embedded Linux. For development scenarios where quick completion is required and one does not want to risk using embedded Linux, WinCE is the most suitable choice (finding someone for embedded Linux is not that easy), as companies cannot take risks like students do; ensuring successful development is more important.
3. Other Related Software Courses in Embedded Development Familiarity with the main areas of embedded applications is more appealing to employers. The main related areas include:
A. Digital Image Compression Technology: This is one of the most important and popular application areas in embedded systems, mainly mastering MPEG encoding and decoding algorithms and technologies, as DVD, MP3, PDA, high-definition television, set-top boxes, etc., all involve the issue of MPEG high-speed decoding. To this end, our institution has reserved a doctoral candidate who can teach digital image processing courses.
B. Communication Protocols and Programming Technologies: This includes traditional TCP/IP protocols and popular wireless communication protocols. First, most embedded devices need to connect to local area networks or the Internet, so mastering TCP/IP protocols and their programming is the primary basic technology; next, wireless communication is currently a major trend, so mastering wireless communication protocols and programming is also very important. Wireless communication protocols include the 802.11 series of wireless local area network protocols, Bluetooth, and mobile communication (such as GPRS, GSM, CDMA, etc.).
C. Network and Information Security Technologies: Such as encryption technology, digital certificates CA, etc. Our institution offers elective courses in this area.
D. DSP Technology: DSP stands for Digital Signal Processing. DSP processors implement digital signal processing algorithms through hardware, such as high-speed data acquisition, compression, decompression, communication, etc. Digital signal processing is a course for electronic and communication hardware majors, and understanding it is beneficial for software developers. Currently, there is a shortage of DSP talent. If one has a foundation in signal and system, digital signal processing, etc., it will greatly aid in learning the principles of MPEG encoding and decoding.
4. Relevant Hardware Foundations for Embedded Development For software engineering students engaged in embedded software development, courses in digital circuits, computer organization principles, and embedded microprocessor structures are quite important. Additionally, assembly language, C/C++, data structures and algorithms, especially operating systems, are also very important foundational software courses. Our main goal is to understand hardware working principles, but the focus should be on embedded software, especially operating system-level software, which will be our advantage.
Some of our graduate students come from electronics and communications majors, with a good foundation in analog circuits and microcontrollers, making them very suitable for embedded studies. Embedded systems have evolved from microcontrollers; microcontrollers do not carry OS, but now many embedded applications are becoming increasingly complex, necessitating the introduction of embedded operating systems. Additionally, to pursue higher speed signal processing, many companies implement some DSP algorithms, such as MPEG compression and decompression, using hardware, which involves HDL digital circuit design technology and FPGA/IP core implementation technology; there is currently a market shortage for this area.
5. Aside
Moreover, those who can write driver programs are currently in high demand (driver programs can also be classified as embedded). Companies constantly need to launch new products, and for each new product, drivers must be written to ensure compatibility with operating systems. Writing driver programs requires mastery of operating system (such as Windows or Linux) internal workings, along with a bit of hardware knowledge, making it quite challenging, which is why such talent is hard to find. Students aspiring to become experts can also achieve breakthroughs in driver programming.
I can share my experience; I briefly worked at a company writing WinCE driver programs (it was precisely because I knew this area was in high demand that I wanted to pursue it). Although I had never written driver programs before, I knew this was a great opportunity to enter this field, given the difficulty of finding qualified candidates. During the interview, I talked about how many lines of assembly code I had written and how well I understood computer principles, and my resume mentioned that I had read two English books on Windows Driver Model and written several small driver practice programs (which I had never actually done; I advise our students not to follow my example; if you practice hard, you won’t have to resort to “deceiving” companies as I did; I represent a typical negative case). Surprisingly, everything passed (of course, the most important thing was that my written and interview answers were satisfactory), which only indicates the difficulty of finding talent in this field. The company did not expect to find someone with driver experience; finding someone with a related foundation was already good enough. Once I started, I found it was not that difficult. In fact, working on driver programs is quite comfortable; once a version is completed, there is often a period of downtime until a new chip or OS is released, at which point a new driver version needs to be developed.
Reply 【Embedded】 in the official account backend to view the latest published books on embedded directions.
Embedded books, from beginner to advanced (Click the image below to enlarge!)
Author | Images and text from the internet. If copyright issues arise, please contact us for resolution. The content of the article is purely the author’s personal opinion and does not represent the views of the website.
Editor| Old Cat
Read Books| QQ Group: 481160039
-END-
Leave a Comment
Your email address will not be published. Required fields are marked *