浅谈软件开发方向之嵌入式

这篇具有很好参考价值的文章主要介绍了浅谈软件开发方向之嵌入式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

嵌入式软件开发,架构设计/软件工程/职业行业,单片机,嵌入式硬件,职场和发展,程序人生,改行学it

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开发工程师等。

嵌入式软件开发,架构设计/软件工程/职业行业,单片机,嵌入式硬件,职场和发展,程序人生,改行学it

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进行开发。

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

 文章来源地址https://www.toymoban.com/news/detail-738699.html

到了这里,关于浅谈软件开发方向之嵌入式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 嵌入式软件开发工程师未来的薪资待遇是什么情况

    又去了解过嵌入式的人们,其实都是奔着嵌入式软件开发工程师去的,那么想要成为一名优秀的嵌入式软件工程师可没那么简单,那么怎么才能成为嵌入式软件开发工程师呢?下面一起来了解下。 点击获取1V1嵌入式学习规划,现在还送100G精选学习资料。点击领取 一、嵌入式

    2023年04月19日
    浏览(41)
  • 【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试

    本篇文章介绍了使用Keil来对STM32F103C8芯片进行初始工程搭建,以及开发与工程调试的完整过程,帮助读者能够在实战中体会到Keil这个开发环境的使用方法,了解一个嵌入式工程从无到有的过程,并且具备快速搭建一个全新芯片对应最小软件工程的基本能力思路。文章首先介绍

    2024年02月05日
    浏览(46)
  • 【嵌入式开发学习】__分享一些高效率的“学习软件”

    目录 前言 软件分享 VSCode 代码编辑器 ChatGPT 语言模型 Notion 笔记记录  Microsoft To Do 日程记录 zlibrary 图书下载 结束语 (* ̄︶ ̄)创作不易!期待你们的 点赞、收藏和评论喔。 在工作学习中,我们会使用到很多的工具,好的工具可以起到事半功倍的效果。我对工具的要求一般是

    2024年02月06日
    浏览(45)
  • lv3 嵌入式开发-2 linux软件包管理

    目录 1 软件包管理 1.1流行的软件包管理机制 1.2软件包的类型 1.3软件包的命名 2 在线软件包管理 2.1APT工作原理 2.2更新软件源 2.3APT相关命令 3 离线软件包管理 Debian Linux首先提出“软件包”的管理机制---Deb软件包           将应用程序的二进制文件、配置文件、man/info帮助页面

    2024年02月09日
    浏览(58)
  • 嵌入式软件开发工程师应该关注芯片数据手册中的哪些信息

    1. 芯片的架构和处理器类型:了解芯片的架构和处理器类型可以帮助开发人员选择合适的开发工具和编程语言。 2. 芯片的时钟频率和电源要求:了解芯片的时钟频率和电源要求可以帮助开发人员设计合适的电路和电源系统。 3. 芯片的存储器类型和容量:了解芯片的存储器类

    2024年02月08日
    浏览(41)
  • AI嵌入式K210项目(19)-安装CanMV IDE开发软件

    前几章我们介绍K210使用C语言裸机开发方法,大家对K210内部的硬件和各种加速器有了初步的了解,但是开发人工智能相关程序,使用C语言的话复杂度比较高,因此接下来我们逐步学习基于K210芯片使用python开发人工智能相关程序,包含颜色识别,人脸识别,口罩识别等,也包

    2024年01月25日
    浏览(55)
  • 1802_在Linux系统上开发ARM单机片机嵌入式软件

             全部学习汇总: GreyZhang/little_bits_of_linux: My notes on the trip of learning linux. (github.com) 1. 在Linux上也有嵌入式的开发环境,或许还有很多。不过,我现在接触到的大部分还是Windows居多。这一份文件介绍的是一个mbed platform这样一个开源的ARM嵌入式开发环境。可以支持C以

    2024年02月07日
    浏览(45)
  • 【笔记】ARM M3-M4权威指南第二章《嵌入式软件开发介绍》

    2.1 ARM微控制器是由哪些构成的 2.2 开始时需要准备什么 2.2.1 开发组件,C 编译器组件产品如下 2.2.2 开发板 2.2.3 调试适配板(Keil – ULINK;IAR-- I-Jet;STM Value Line Discover;JTAG/SW仿真器/在线仿真器(ICE);开源板 – ARM的CMSIC-DAP和Coocox的CoLink) 2.2.4 软件设备驱动 2.2.5 示例(Samp

    2024年04月13日
    浏览(40)
  • 基于ubuntu的STM32嵌入式软件开发(四)——应用软件工程的修改、Makefile及编译脚本的编写

            本文主要介绍基于标准库函数移植的STM32的应用软件工程的修改,主要涉及到文件内容修改、Makefile文件编写、编译脚本编写等内容,其中编译脚本是基于arm-none-eabi-gcc的交叉编译器撰写的。程序亲测可以正常编译,生成.bin和.hex的可烧录镜像文件。 1.首先修改 pr

    2023年04月15日
    浏览(37)
  • ARM(IMX6U)嵌入式软件裸机开发之环境搭建与配置

    目录 前沿 Ubuntu 和 Windows 文件互传 Ubuntu 下 NFS 和 SSH 服务开启  Ubuntu 交叉编译工具链安装 Source Insight 软件安装和使用 Visual Studio Code 软件的安装和使用 为什么我们要学习裸机开发呢?         1、裸机开发是了解所使用的 CPU 最直接、最简单的方法,比如使用的 I.MX6U,跟

    2023年04月15日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包