Hello everyone, I am Xiao Xian. I saw this question on Zhihu, and one of the answers is quite classic, so I would like to share it with you all.

To be honest, the topic of embedded development is quite vast, as it covers a wide range of fields and areas. As a programmer who has worked in embedded software development for over ten years, I have continuously accumulated my skill set in embedded software development through self-learning and various project experiences over the years.
Here, I would like to take the opportunity of the question to outline the skill set for embedded software development, hoping to help the questioner and many embedded software enthusiasts. This is based on my personal experience, so please forgive any omissions.
Embedded software development can actually be subdivided into:
-
Embedded MCU Software Development Engineer;
-
Embedded Linux Low-Level (BSP) Software Development Engineer;
-
Embedded Linux Application Development Engineer;
-
Embedded FPGA Algorithm Development Engineer
Over the years, I started with MCU development and Linux application development, and during my entrepreneurial journey, I self-learned and built my Linux low-level driver skill set through project practice. I will not elaborate on the skill set of FPGA algorithm engineers here, as I only have some acquaintance with relevant colleagues in the company, to avoid going off-topic.
1. Embedded MCU Software Development Engineer
【Basic Skills】
-
C programming skills (data structures, common algorithms, pointers and arrays, structures and bit fields, etc.)
-
Theoretical knowledge of MCUs (clock trees, memory, interrupts, GPIO, functional peripherals (UART, I2C, DMA, etc.))
-
MCU coding methods (register/library functions), compilation and download processes (learn based on the chosen MCU)
-
Ability to understand basic circuit connection diagrams (how MCU pins connect to external devices, etc.)
-
Real-time operating system coding skills (uCOS, FreeRTOS, LiteOS, etc.)
-
Business scenario knowledge (depending on the embedded product scenario of the questioner)
【Advanced Skills】
-
Software architecture design skills
-
Use of oscilloscopes and logic analyzers (for debugging communication devices)
-
Ability to read disassembly (may be used when locating bugs)
-
Mastery of communication protocols (serial 232 communication, 485 communication, I2C protocol, SPI protocol, TCP/IP, CAN protocol, etc.)
2. Embedded Linux Application Development Engineer
【Basic Skills】
-
Linux C programming skills (data structures, common algorithms, pointers and arrays, structures and bit fields, etc.)
-
Common Linux API functions (multithreading, multiprocessing, locks, process/thread communication mechanisms, etc.)
-
Linux Shell usage (basic Linux operation skills)
-
Makefile/GDB debugging
-
Mastery of communication protocols (serial 232 communication, 485 communication, I2C protocol, SPI protocol, TCP/IP, CAN protocol, etc.)
-
Business scenario knowledge (depending on the embedded product scenario of the questioner) (for example, for video, then RTSP, H264 encoding, video basics)
【Advanced Skills】
-
Software architecture design skills
-
Ability to read disassembly (may be used when locating bugs)
-
Understanding of the Linux operating system (user mode, kernel mode, interrupt mechanisms, memory mechanisms, etc.)
3. Embedded Linux Low-Level (BSP) Development Engineer
【Basic Skills】
-
Linux C programming skills (data structures, common algorithms, pointers and arrays, structures and bit fields, etc.)
-
Linux trimming, porting, and compilation
-
Understanding of the Linux operating system (user mode, kernel mode, interrupt mechanisms, memory mechanisms, etc.)
-
Linux Shell usage (Linux operation skills)
-
Modification of bootloaders (such as U-Boot)
-
Basic debugging communication methods (UART, TCP/IP)
【Advanced Skills】
-
Linux driver development skills
-
Linux kernel mechanisms
-
And so on
The above is a summary of the skill set I have used based on my work experience, and there may inevitably be omissions. After all, each embedded engineer works in different industries, and their skill sets will vary.
The above suggestions are also for the questioner and many embedded software enthusiasts to reference.
Author: snowdreamLink: https://www.zhihu.com/question/449050796/answer/1782550929Source: ZhihuCopyright belongs to the author. For commercial use, please contact the author for authorization; for non-commercial use, please indicate the source.
-END-
Click the card below to follow and learn embedded systems together.