What Is Embedded System Under High Definition?

What Is Embedded System Under High Definition?

Word Count: 9800 Practical Index: ⭐⭐⭐⭐⭐

Talking about what embedded engineers do can be quite dull. I thought of a better approach: analyzing the job descriptions (JD) for embedded-related positions in major companies to see the current skill requirements for embedded personnel. This is the direction everyone should strive for.

To this end, I chose several typical companies in the field of robotic vision (including autonomous driving) and camera technology for analysis.

The selected companies in the robotic vision field include:

  • DJI: The big brother in the drone industry, the first to apply visual technology on such a large scale in consumer electronics.
  • Meituan & NINEBOT: Representative companies in low-speed autonomous driving.
  • Pony.ai: A representative company in L4-level autonomous driving.
  • Roborock: A representative company in household vacuum robots.
  • Horizon Robotics: A representative company in artificial intelligence chips.
The selected companies in the camera field include:
  • OPPO: Charge for 5 minutes, talk for 2 hours (not really related to cameras, but this tagline is just too catchy).
  • VIVO: Clear even in backlight, illuminating your beauty.
  • Xiaomi: Life and death are trivial, if you don’t agree, just fight.
There are also many embedded-related positions in these companies (I have normalized similar job titles quite conservatively):
  • Embedded Systems Engineer
  • Embedded Systems Architect
  • Linux Embedded Software Engineer
  • BSP Engineer
  • Robotic System Software Development Engineer
  • System Development Engineer
  • System Software Engineering Expert
  • Algorithm Optimization Engineer
  • System Performance Engineer
  • Application Algorithm Engineer
  • Embedded AI Platform Engineer
  • System Software Middleware Engineer
Seeing so many positions, are you a bit surprised? With the rapid development of mobile computing capabilities, embedded technology has long surpassed its former self. I remember when I first encountered embedded technology fifteen years ago, the performance of processors was several orders of magnitude lower than today. The challenges at that time were:
  • Resources were really scarce: I once used an MCU with 128 bytes of RAM and had to be meticulous about every byte used; function calls couldn’t be too deep, or else the stack would overflow.
  • Real-time performance: Most applications are control-based and need to complete designated tasks within a specified time.
Overall, it was relatively simple; after all, with fewer components, the complexity was limited. Now it’s different; we face brand new challenges:
  • Computational performance is never enough: It must be said that the latest computer vision/AI algorithms still can’t run on embedded platforms; hence, when selecting algorithms, we generally choose the best algorithm that can run on the current platform, leading to using as much CPU as available, with CPU usage often maintaining above 90%.
  • Memory is never enough: Images consume both space and bandwidth, and a common problem is that the functionality isn’t completed yet, but the memory is full, leading to out-of-memory (OOM) situations. More subtly, memory bandwidth can also be quietly exhausted, slowing down the operation speed.
  • Real-time requirements are also high: Although it doesn’t need to maintain jitter within 1ms like real-time control, achieving 30ms is still necessary, or else frames will be dropped. Ensuring real-time performance under high CPU and memory usage is an unprecedented challenge.
  • High complexity: Due to the increase in functional complexity, many new high-level bus interfaces and protocol stacks have been introduced, and the scale of the code is also growing, making it increasingly difficult to grasp the overall picture.
These new challenges, reflected in technical details, can be summarized in the following aspects:
  • Programming Skills: As system complexity increases, the requirements for programming skills also rise.
  • Processor Architecture: When encountering CPU and memory performance issues, not understanding CPU architecture is like guessing in the dark.
  • Operating Systems: Wow, OOM occurred; wow, frames dropped; wow, FLASH writing performance fluctuated; one can only cry while frantically learning about memory management, process scheduling, and file system knowledge.
  • Interfaces and Drivers: There are more and more interfaces, and they are getting faster; nowadays, if you don’t understand a dozen interfaces, you won’t understand Xiaomi’s press conference.
  • Framework (Middleware): ROS, Camera Pipeline, various protocol stacks; mastering any one of these is not easy.
  • Algorithm Optimization: Processor performance is like water in a sponge; with a little twist, you can always squeeze out a bit more.
  • Application Programming and Debugging: Multithreading, multiprocessing, multicore, inter-thread communication, inter-process communication, inter-core communication. Yes, it’s that convoluted.
  • Hardware Knowledge: How can an embedded engineer play happily with a hardware engineer without a bit of hardware knowledge?
  • Others: As a bridging position, there are higher requirements for soft skills.

What Is Embedded System Under High Definition?

Programming Skills

All representative companies consistently require basic programming skills; embedded engineers generally fall under the category of software engineers, and programming skills cannot be poor; otherwise, heh heh: coding is fun at first, but debugging feels like a funeral…
DJI: Proficient in C/C++.
Meituan: Proficient in CMake/MAKEFILE writing rules, familiar with the basics of cross-compilation.
Pony.ai: Familiar with C/C++, familiar with at least one scripting language (Python/Shell), has good development habits, document specifications, and coding habits; proficient in commonly used data structures and algorithms, and proficient in STL.
NINEBOT: Has mature experience in large embedded software projects, has a clear understanding of common embedded software design concepts, processes, frameworks, and tools, is proficient in using version control tools; familiar with common algorithms and data structures, has ample experience in C++ development, and is familiar with object-oriented design and C++11 standards.
Roborock: Proficient in C language, has good programming habits, code quality awareness, and code reading ability; familiarity with assembly language is preferred; familiar with C language, Python, and Shell under Linux, has good programming habits, code quality awareness, and code reading ability.
OPPO: Good programming habits, proficient in C/C++, understands Linux systems, and is familiar with some scripting languages (Linux Shell\

Leave a Comment