软件开发是当前一个很热门的话题,可是你知道软件开发岗位都有哪些吗?其中又有什么联系呢?本文以软件开发的嵌入式方向,来聊聊这个问题。

Linux IO(基本输入/输出)系统架构图

如果说互联网系统像一个以服务器为中心的星型,大数据系统像一个流水线那么嵌入式系统更像一套层层叠叠积木。嵌入式软件的开发职能往往也是以层去区分。上图是Linux IO系统的基本框图,IO即基本输入输出系统,linux还有很多其他系统,如蓝牙系统、WIFI系统、显示系统、存储系统等等。每个系统都有这样一套从下到上的分层结构。

        1、最下面的是硬件层,即图中的Hardware。图中的STM32是个高性能单片机(还记得单片机吗?将CPU、RAM、ROM和一些控制器包含在内),其外部引脚根据自身特性连接对应的外部电子器件,如DAC(数模转换控制器)外部连接了Analog device(模拟器件)作为输出。ADC(模数转换控制器)也连接了Analog device作为输入。之所以可以判断出是作为输入还是输出,是因为STM32是单片机,内部肯定是数字信号。在硬件设计过程中需要考虑芯片选型、电路板设计、布线走向、功率负荷、电磁干扰等因素,完成这些工作的是硬件工程师此外嵌入式设备往往是个终端设备,负责设计这个终端电路板、外形外壳等器件的就是结构工程师

        2、再往上是内核层,即图中的Kernel space。包括驱动(drivers)、内核核心(进程管理、内存分配等核心工作)、框架(framework)、面向应用接口层(user(kernel))。驱动程序是直接控制硬件的软件程序,之前的《电子设计之软件初探》文中有介绍过,单片机最终以引脚输出高低电平(0V~3.3V/5V)来操作外部硬件,驱动程序就是直接控制引脚按照什么规律输出哪种电平的程序,其对应开发岗位为驱动工程师。内核核心我们一般不需要进行开发,除非一些特殊需求,对内核核心做出改动的开发人员为内核工程师。对于复杂度不高的嵌入式系统,框架层和面向应用接口层相对简单,工作量较少,通常由内核工程师或驱动工程师顺带完成。对于复杂度较高的嵌入式系统(如Android系统),则由专门的框架工程师或中间件开发工程师负责完成。

        3、最上面是应用层,即图中的User space。在说应用层之前,先来看两个图中没有的系统:文件系统和显示系统(GUI)。计算机世界可以理解为从现实世界抽象出一个虚拟世界。硬件当然属于现实世界,而软件可以认为是虚拟世界。怎么样抽象的呢?操作系统是对CPU及其运行时相关资源的抽象,操作系统主要管理进程,而进程就是抽象出来了一个虚拟的CPU,供应用程序使用。这就是为什么我们用电脑时可以听着歌、看着电影、聊着天。因为你的电脑上安装了操作系统,从一个真是的CPU(指单核情况,多核时是真的有多个物理“CPU”),抽象出来了多个CPU。如果电脑没有安装操作系统,单核多任务万万做不到的。而文件系统则是对磁盘的抽象,显示系统是对显示器的抽象

        4、文件系统:即使已经有驱动程序,应用直接通过驱动去操作磁盘仍旧是非常麻烦的,比如读取一个数据,你需要知道从磁盘的哪个磁道、哪个位置、读取多长,然后操作读取。这么干的话,简单地操作个文件,开发人员估计都能疯掉。而有了文件系统之后,问题就简单多了,我只需要知道文件在哪个目录下、文件名是啥,就可以很方便的操作这个文件。至于是怎么读写磁盘的,文件系统全部帮你屏蔽掉了。著名的文件系统如:NTFS、FAT32、exFAT、yaffs2(嵌入式常用)。

        5、显示系统:同理,如果直接去操作LCD显示器也是极其繁琐的工作,尤其是显示的复杂度越来越高,应用开发人员不可能直接面向系统原生接口编程。于是就出现了图形用户界面系统(GUI),GUI提供了丰富的元素来开发用户界面,至于怎么操作LCD显示器,GUI系统都给屏蔽掉了。界面开发的时候面向GUI编程就可以了,GUI负责去调用原生接口。著名的嵌入式系统GUI如:QT、KanZi、MiniGUI。

        6、应用开发:应用层主要实现业务代码。根据需求,嵌入式开发也可以不使用操作系统,直接在驱动层之上建立中间件层(就是封装一些常用的接口),再上面就是应用层了。无操作系统的这类开发也被称为单片机开发,对应单片机开发工程师。嵌入式操作系统有很多种,如小型实时操作系统UCOS、VXwork、ucLinux等,这些系统通常不使用GUI。即使Linux系统,有时候也不使用GUI。这种场景下应用的主要功能就是长期驻留在系统后台运行。这种应用常由C和C++开发完成,对应岗位直接称为嵌入式软件开发工程师。而对于使用GUI的嵌入式系统来说,除了需要开发那些驻留系统后台的应用,还需要开发图形用户交互应用,根据GUI的不同,其岗位也有多种,如QT开发工程师、Kanzi开发工程师等。

Android系统官方架构图

上面主要介绍了嵌入式Linux软件开发,再来看看Android系统,Android是Linux衍生系统,广义上来说属于Linux系统的一种。在《浅谈软件开发方向之互联网》一文中提到过,Android系统开发和Android应用开发差别还是比较大的。上图是Google官方提供的Android系统架构图。Android应用开发人员开发的APP在上图中并没有体现,上图最顶层的System Apps,指的是Launcher(桌面)、SystemUI(状态栏、导航栏、快速设置等)、电话、短信、相机等内置的系统应用。开发人员另外开发的属于第三方应用,和系统应用平级,但在系统内部的存储位置不同,权限也不同。所以三方应用可以卸载,系统应用卸不了。可以看到Android系统架构最底部也是Linux Kernel,所以硬件层、驱动层、内核核心的开发步骤和Linux是一样的。下面我们重点来看看它的特别之处。

        1、HAL层:硬件抽象层,为什么多了这么个玩意呢?主要有两个原因:一是对驱动做了再次封装,对Framework层提供统一接口,硬件厂商或或开发人员只需要面向HAL框架编程即可。二是HAL属于用户空间,Linux驱动属于内核空间,内核空间代码遵循GPL协议,必须开源。而用户空间遵循Apache协议,可以不开源。硬件厂商可以只在驱动层做简单的芯片寄存器映射,主要逻辑放在HAL层实现,更好的保护自身利益。在Android系统开发中,该层常和驱动层一起开发,由HAL开发工程师负责

        2、Framework Native层:使用C++和C实现,对下操作HAL层的硬件接口,向上通过Native和Framework Java层连接在一起。

        3、Framework Java层:即Android Develop SDK,使用JAVA实现,对应用层提供调用接口,对下通过Native与Framework Native层连接在一起。负责Framework层开发的为Framework开发工程师或框架工程师。Android Framework是极其庞大复杂的,包含各种子系统的服务、策略、路由、调度等所有代码。所以做Android系统开发的大型公司常按照子系统重新组织团队,如蓝牙子系统、WIFI子系统、Audio子系统、Camera子系统、显示子系统。每个团队负责一个子系统从硬件到应用的垂直研发。

        4、Android的GUI系统:Android的GUI系统并没有直接用那些知名GUI,而是是基于OpenGL/EGL来定制实现的。

        5、应用层:即APP开发,常使用Java、Kotlin进行开发,编译出apk文件安装在Android系统上。需要注意的是,当Android系统为定制化系统时,framework和Android原生SDK很可能是不一样的,需要找到系统被修改后编译出的framework的jar包,替代Android Develop SDK进行开发。

现在的大多数嵌入式设备都具有联网功能,作为一个智能网络终端,接入到互联网中,和互联网系统、大数据系统一起,形成了一个更庞大更复杂的系统,也造就了我们日益智能化、网联化的生活。

浅谈软件开发方向之嵌入式相关推荐

  1. [IC]浅谈嵌入式MCU软件开发之中断优先级与中断嵌套

    转自:https://mp.weixin.qq.com/s?__biz=MzI0MDk0ODcxMw==&mid=2247483680&idx=1&sn=c5fd069ab3f ...

  2. 嵌入式开发-浅谈嵌入式MCU开发中的三个常见误区

    浅谈嵌入式MCU开发中的三个常见误区 原创 2017-09-30 胡恩伟 汽车电子expert成长之路 目录 (1)嵌入式MCU与MPU的区分 (2)误区一:MCU的程序都是存储在片上Flash上,然 ...

  3. 浅谈嵌入式MCU软件开发之S32K1xx系列MCU启动过程及重映射代码到RAM中运行方法详解

    内容提要 注:本文摘自NXP工程师胡恩伟的微信公众号"汽车电子expert成长之路",大家感兴趣可以关注一下. 引言 1. S32K1xx系列MCU启动过程详解(startup_S ...

  4. 浅谈什么是嵌入式以及嵌入式就业前景

    近期,很多问我什么是嵌入式?其实关于这个问题真的不好实际性的形容表达,毕竟不是一个实物和东西,让你看到见摸的着,但是它确实存在你的生活中,工作中.今天粤嵌就来浅谈一下,什么是嵌入式以及嵌入式就业前景如 ...

  5. 浅谈嵌入式与互联网(详细)

    纲要 一.什么叫嵌入式,以及与人工智能的关系? 二.嵌入式岗位 三.浅谈嵌入式开发优缺点 四.与互联网(CS相关的,如平台服务器,前端/APP/软件)对比 五.能力要求和薪资(参考知乎) 以下均采集于 ...

  6. 嵌入式AI —— 6. 为糖葫芦加糖,浅谈深度学习中的数据增广

    没有读过本系列前几期文章的朋友,需要先回顾下已发表的文章: 开篇大吉 集成AI模块到系统中 模型的部署 CMSIS-NN介绍 从穿糖葫芦到织深度神经网络 又和大家见面了,上次本程序猿介绍了CMSIS- ...

  7. 浅谈CSS3中display属性的Flex布局,关于登陆页面属性框的设置

    声明:本文转发自三里屯柯南的浅谈CSS3中display属性的Flex布局http://www.cnblogs.com/xuyuntao/articles/6391728.html 基本概念 采用Fl ...

  8. 计算机技术在农业上应用论文,浅谈计算机在农业中的应用论文(2)

    浅谈计算机在农业中的应用论文篇二 <计算机技术在农业管理中的科学应用> 摘要:文章依据现代农业管理思想的内涵结合计算机应用技术的充分优势展开了如何在农业管理中全面应用计算机技术实现数字化. ...

  9. 浅谈单片机程序设计中的“分层思想”!

    浅谈单片机程序设计中的"分层思想",并不是什么神秘的东西,事实上很多做项目的工程师本身自己也会在用.看了不少帖子都发现没有提及这个东西,然而分层结构确是很有用的东西,参透后会有一种 ...

最新文章

  1. IOI2011 BZOJ2600 ricehub
  2. android 手势放缩_AIR Android:放大与缩小手势
  3. 操作系统(Linux与Windows)的进程管理
  4. C语言核心技术——函数
  5. 微服务框架---搭建 go-micro环境
  6. python中importlib模块安装_Python中标准模块importlib详解
  7. 线性回归 —— python
  8. CentOS获取软件安装包源码
  9. 机器学习高质量数据集大合辑
  10. [转贴]深山红叶使用图文教程
  11. c# winform h.265解码
  12. 基于RTP/RTCP的无线视频传输自适应带宽控制
  13. 用数据说话:北京房价数据背后的数据
  14. 来了,2020全球算力大会暨新基建矿业峰会,首批重磅嘉宾阵容出炉!
  15. 迅雷的地址解析--把自己的下载地址变成迅雷链接
  16. iOS 制作framework(SDK)的流程
  17. photoshop cc2017全套视频课程 从基础到实战案例PS海报-王诚-专题视频课程
  18. filecoin space race
  19. Android 监听手机旋转角度
  20. 【微信小程序开发】(三)首页banner组件使用swiper

热门文章

  1. donald knuth --图灵奖获奖者
  2. 怎么使用计算机播放音乐,怎么给电脑设置默认音乐播放器
  3. m4s转为mp4实例:使用ffmpeg和批处理将m4s转为mp4
  4. python控制各情况出现概率_python实现概率分布
  5. 指定Jboss的JDK
  6. Python PTA实验课 求小于某一大于2的自然数的所有素数
  7. 解决TinyMCE富文本编辑器上传视频后在编辑区域内不能预览视频,被替换成img标签的问题
  8. 4.8 51单片机-PCF8591(ADC/DAC)转换芯片
  9. python绘制堆叠图_Python Pandas:绘制100%堆叠图形issu
  10. html5 link prefetch,dns预获取(dns-prefetch)link rel="dns-prefetch"优化载入速度