文章转自

https://luomuxiaoxiao.com/?p=170

一、嵌入式系统

要明白什么是嵌入式软件工程师,我们先从嵌入式系统(嵌入式设备)说起。维基百科上对嵌入式系统的定义如下:

嵌入式系统(Embedded System),是一种嵌入机械或电气系统内部、具有专一功能和实时计算性能的计算机系统。

通俗的讲,嵌入式系统就是一种具有专一功能的计算机系统。我们身边就有好多嵌入式设备,常见的比如智能手机,数码相机等消费类的电子设备,再比如最近几年兴起的诸如智能音箱、智能电视、扫地机器人智能家居设备。当然还包括汽车防抱死系统、各种医疗成像系统等设备。总之各行各业我们都有可能接触到它,尤其随着智能化时代的到来,很多非智能的设备也将逐步由嵌入式设备所替代,典型的如智能门锁。

二、嵌入式工程师

随着嵌入式设备应用越来越广泛,相关人才的需求也越来越大。那么相关的人才都有哪些呢?其中最主要的就是嵌入式工程师。嵌入式工程师分为两种:嵌入式硬件工程师和嵌入式软件工程师。

  • 嵌入式硬件工程师主要职责是负责设计嵌入式系统的硬件原理图,使用相应的工具画出PCB图,后期配合嵌入式软件工程师调试系统。

  • 嵌入式软件工程师从系统软件上又可以分为两种:BSP工程师和嵌入式应用软件工程师。嵌入式应用软件工程师主要是负责编写基于嵌入式系统的应用软件。类似于基于windows上的QQ, word。由于我本人是做BSP的,因此这里我们着重讨论BSP工程师。

三、BSP工程师

BSP,全称Board Support Package,汉语意思即板级支持包。BSP工程师,顾名思义就是负责板级支持包的开发、调试和维护工作。那么什么是板级支持包呢?前面我们讲过,嵌入式硬件工程师负责设计硬件,画出PCB图,工厂会根据PCB图生产出对应的电路板。一个嵌入式系统光有电路板是不够的,还要有对应的软件支持,软件开发的前提是首先使板子正常稳定的工作,然后再在其上编写对应的应用软件以实现其特有的功能。其中使板子正常稳定的工作的代码就属于板级支持包。
那么BSP工程师的具体工作有哪些呢?

我们首先从嵌入式设备谈起,前面我们谈到了很多的嵌入式设备,从系统角度来讲这些设备有些是跑操作系统的,有些没有跑。对于不跑操作系统的设备来讲,其功能相对简单一点,使用的主控芯片一般也比较简单,比如风靡一时的51系列单片机、stm系列的单片机。对于这些简单系统来讲,它对软件开发人员要求相对比较低,当然也就没有我前面所说的分工那么详细,有时候甚至从画板、点亮、开发都是由一个人来完成的。对于跑操作系统来讲的设备,就不一样了。一般来讲,跑操作系统的设备其软件开发分三个阶段:

1. 点亮板子

第一批板子出厂时是不包含任何软件的。BSP工程师需要结合硬件原理图修改从芯片厂商拿到的参考代码,调试板子,使板子上的操作系统能够正常稳定工作,从而提供一个稳定的开发调试环境,这个过程叫做点亮板子,行话叫做Bringup。这属于BSP工程师最具有价值含量的工作之一,因为它对BSP工程师所掌握的知识的广度和深度都有一定要求。其中会涉及到计算机原理、操作系统,处理器架构等,还包括硬件方面的一些知识。综合起来其最核心的工作就是对内核的移植、裁剪。

2. 使能板子上所有设备

上个阶段中,板子的CPU和基本的器件已经能正常工作,这个阶段中将使能所有的外设,并为后面要开发的应用程序提供对应的软件控制接口。这个过程的实质是对应的操作系统下驱动开发的过程,需要掌握硬件工作的原理,操作系统的相关知识。

3. 为板子开发应用程序

如前文所述,嵌入式系统是一个具有专一功能的系统,其上所有的硬件,软件都应该为这一功能服务。第二个阶段结束的时候,板子上所有的设备都已经可以正常使用了。这个阶段的任务就是开发应用程序来实现某种特定的功能,应用程序中会使用第二阶段提供的软件接口控制板子上的设备来完成这一功能。

四、BSP工程师应具备的能力

上述前两个阶段属于BSP开发的内容,第三个阶段属于嵌入式应用软件开发的过程。综上所述,BSP工程师主要应该具备的能力主要有:

  • 掌握计算机原理方面的知识;

  • 掌握操作系统的相关知识,深入研究某种操作系统,目前来讲,研究linux操作系统应该是大部分人的选择;

  • 基本的linux(开发环境)操作

  • 精湛的C语言功底和一定的C++/汇编的知识。

  • 掌握一定的硬件和电路原理方面的知识;

  • 熟悉常见的接口协议,如I2C, SPI, UART, USB等。

当然作为一个软件开发人员也必须掌握一些通用的软件,比如:

  • 代码管理软件,常见的如git等;

  • 代码阅读软件,这个就因个人喜好而不同了,比如:opengrok,source insight,vim下ctags/cscope插件组合等。

什么是BSP工程师?相关推荐

  1. Day03 BSP工程师小白的第一步-------今天开始正式学C语言

    为什么要学C语言? 因为C语言在高级语言中运行效率最高,并且作为最古老的计算机语言之一,C语言涉及了很多底层的知识,比如:内存.寻址.并且Windows.Linux.Unix 等操作系统的内核 90% ...

  2. linux bsp笔试题,Linux BSP工程师面试常问问题汇集.pdf

    Linux BSP工程师面试常问问题汇集 Linux BSP 工程师面试常问问题汇集 TD 1.本文章遵从" 署名-非商业性使用 3.0 中国大陆 (CC BY-NC 3.0 CN)&quo ...

  3. Android Audio BSP工程师 需要清楚的基本知识点

    原址 [前言] 这是我根据自己的工作经验所总结,有一定代表性,但可能不齐全.这只是个提纲. [知识点] 按照在操作系统中的层次划分,从上到下依次为: 1.Android系统分层模型.知道 APP.JN ...

  4. 跟涛哥一起学嵌入式 20:后ARM时代,嵌入式工程师的自我修养

    1 嵌入式学习的一些概念理解误区 很多嵌入式初学者认为,学嵌入式,就是学习ARM,就是学习开发板.买一块开发板,然后在上面"移植"u-boot.Linux内核,再使用busybox ...

  5. 嵌入式工程师的自我修养

    很多嵌入式初学者认为,学嵌入式,就是学习ARM,就是学习开发板.买一块开发板,然后在上面"移植"u-boot.Linux内核,再使用busybox制作一个根文件系统,大功告成!觉得 ...

  6. 跟涛哥一起学嵌入式 第06集:后ARM时代,嵌入式工程师的自我修养

    大家好,我是涛哥,今天我们继续聊一聊嵌入式的学习,由于最近比较忙,就把以前写的一篇文章重新发给大家,里面谈到的一些学习方法和学习经验,还是很值得参考一下的. 嵌入式学习的一些概念理解误区 很多嵌入式初 ...

  7. 后ARM时代,嵌入式工程师的自我修养

    1嵌入式学习的一些概念理解误区 很多嵌入式初学者认为,学嵌入式,就是学习ARM,就是学习开发板.买一块开发板,然后在上面"移植"u-boot.Linux内核,再使用busybox制 ...

  8. 吉利蔚来造手机,小米造车

    吉利蔚来造手机,小米造车 北京时间2022年2月22日星期二,在网络上被认为是百年来最"2"的日子,又一家车企被爆出涉足手机业务,就是中国造车新势力领头羊的蔚来,招来了原美图手机总 ...

  9. linux内核中的GPIO系统之(4):pinctrl驱动的理解和总结

    1. 前言 本站之前的三篇文章[1][2][3]介绍了pin controller(对应的pin controller subsystem).gpio controller(对应的GPIO subsy ...

最新文章

  1. 2020-10-26runtime error: member access within null pointer of type ‘struct ListNode‘ (solution.cpp)错
  2. 【词汇】preci-词根、ap-前缀、de-前缀、ous-后缀、ify-后缀、ise-后缀
  3. python高通滤波器设计_python实现直方图均衡化,理想高通滤波与高斯低通滤波
  4. 2048游戏的python实现
  5. 除了缓存,Redis 都解决了哪些问题?
  6. mysql 函数 局部变量_MySQL 存储过程 存储函数 局部变量 游标 概念示例
  7. ArcGIS 10.6 Data Interoperability Tools的安装与使用(附安装包下载)
  8. Hemberg-lab单细胞转录组数据分析(八) - Scater包输入导入和存储
  9. node.js打包环境部署CentOS7.4
  10. React 组件间传值的几种情形
  11. tx1调试车辆检测遇到的问题
  12. python就业方向-为什么这么多人喜欢Python?Python的就业方向是什么?
  13. leetcode 35. 搜索插入位置(二分法搜索失败的情况)
  14. Tomcat下载安装
  15. 协议知识点(2)- flash测试rtmp流是否正常
  16. 金蝶KIS/K3全版本下载地址
  17. 计算机的存储容量1kb表示什么,计算机的存储容量常用KB为单位,这里1KB表示什么?...
  18. 网络出现异常(只能上QQ不能上网页)
  19. Unity Addressable学习笔记二(Hosting热更新)
  20. 仙人掌圆方树学习笔记

热门文章

  1. OC-封装、继承、多态
  2. Android Bluetooth BLE相关开发资源汇总
  3. 如何root安卓手机_安卓Root+卡开机画面救砖教程丨以一加手机为例
  4. html div模块前留空白,html – 3个DIV彼此相邻,中间填充空白
  5. pythonelectron桌面开发案例_使用Electron开发基于Node.js的桌面应用
  6. python wheel使用_Python wheel.Wheel方法代碼示例
  7. STM32串口通信中使用printf发送数据配置方法 开发环境 Keil
  8. mysql 8.0 yum_CentOS8 安装 MySQL8.0(yum)
  9. 网络:传输层 TCP报文格式解析
  10. 小程序循环里做字符串拼接_昨天还在for循环里写加号拼接字符串的那个同事,今天已经不在了...