Article Source
https://luomuxiaoxiao.com/?p=170
1. Embedded Systems
To understand what an embedded software engineer is, we first need to discuss embedded systems (embedded devices). Wikipedia defines embedded systems as follows:
An embedded system is a computer system that is embedded within a mechanical or electrical system, designed for specific functions and real-time computing performance.
In simple terms, an embedded system is a computer system with a specific function. There are many embedded devices around us, commonly found in consumer electronics like smartphones and digital cameras, as well as in the recently popular smart speakers, smart TVs, and robotic vacuum cleaners. It also includes automotive anti-lock braking systems and various medical imaging systems. In short, we may encounter embedded systems in various industries, especially with the advent of the smart era, where many non-smart devices will gradually be replaced by embedded devices, such as smart locks.
2. Embedded Engineers
As the application of embedded devices becomes more widespread, the demand for related talent is also increasing. So, what kind of talent is needed? The most important type is the embedded engineer. Embedded engineers can be divided into two categories: embedded hardware engineers and embedded software engineers.
-
Embedded hardware engineers are primarily responsible for designing the hardware schematics of embedded systems, using appropriate tools to create PCB layouts, and later collaborating with embedded software engineers to debug the system.
-
Embedded software engineers can further be divided into two types: BSP engineers and embedded application software engineers. Embedded application software engineers are mainly responsible for writing application software based on embedded systems, similar to QQ or Word on Windows. Since I work with BSP, we will focus on BSP engineers here.
3. BSP Engineers
BSP, short for Board Support Package, refers to the package that supports the hardware board. BSP engineers, as the name suggests, are responsible for the development, debugging, and maintenance of the board support package. So, what is a board support package? As mentioned earlier, embedded hardware engineers are responsible for designing hardware and creating PCB layouts, which factories use to produce the corresponding circuit boards. An embedded system requires not only the circuit board but also corresponding software support. The prerequisite for software development is to ensure the board operates normally and stably, after which application software can be written to achieve its specific functions. The code that ensures the board operates normally and stably is part of the board support package. So, what specific tasks do BSP engineers have?
We will first discuss embedded devices. As mentioned earlier, many embedded devices run operating systems, while some do not. For devices that do not run an operating system, their functions are relatively simple, and the main control chips used are generally simpler, such as the once-popular 51 series microcontrollers or STM series microcontrollers. For these simple systems, the requirements for software developers are relatively low, and the division of labor is not as detailed as I mentioned earlier; sometimes, one person may even handle everything from schematic design to lighting and development. For devices that run operating systems, it is different. Generally, the software development for devices running an operating system is divided into three stages:
1. Bringing Up the Board
The first batch of boards shipped does not contain any software. BSP engineers need to modify the reference code obtained from the chip manufacturer based on the hardware schematics, debugging the board to ensure that the operating system can run normally and stably, thus providing a stable development and debugging environment. This process is called <span>Bringup</span>
. This is one of the most valuable tasks for BSP engineers because it requires a certain breadth and depth of knowledge. This involves computer principles, operating systems, processor architecture, and some hardware knowledge. The core work is essentially kernel porting and trimming.
2. Enabling All Devices on the Board
In the previous stage, the board’s CPU and basic components were able to function normally. In this stage, all peripherals will be enabled, providing corresponding software control interfaces for the application programs to be developed later. The essence of this process is the development of drivers under the corresponding operating system, requiring knowledge of how the hardware works and relevant operating system knowledge.
3. Developing Application Programs for the Board
As mentioned earlier, an embedded system is a system with a specific function, and all hardware and software should serve this function. By the end of the second stage, all devices on the board should be functioning correctly. The task of this stage is to develop application programs to achieve specific functions, using the software interfaces provided in the second stage to control the devices on the board to complete these functions.
4. Skills Required for BSP Engineers
The first two stages above are part of BSP development, while the third stage pertains to the development process of embedded application software. In summary, the main skills that BSP engineers should possess include:
-
Knowledge of computer principles;
-
Knowledge of operating systems, with in-depth research on a specific operating system; currently, studying Linux is the choice for most people;
-
Basic Linux (development environment) operations;
-
Proficient in C programming and some knowledge of C++/assembly;
-
Knowledge of hardware and circuit principles;
-
Familiarity with common interface protocols such as I2C, SPI, UART, USB, etc.
Of course, as a software developer, one must also master some general software, such as:
-
Code management software, commonly used ones like Git;
-
Code reading software, which varies by personal preference, such as OpenGrok, Source Insight, or Vim with ctags/cscope plugins.