嵌入式linux和用stm32进行的嵌入式开发这两者之间有什么关联性吗?

2023-05-16

基于STM32的开发属于微控制器开发领域,主要开发工具是keilIAR,这种开发更准确的说法是单片机开发或者硬件开发;而招聘里所说的嵌入式开发,开发环境是基于Linux操作系统,这种开发一般会分为几个层次:驱动开发、操作系统层开发、应用层开发。开发后者所需了解的知识和前者的不是在同一个层次上。

如果玩过Arduino和树莓派,那么这个就很好理解了。STM32开发和Arduino是同一个层次,处于微控制器级别;嵌入式Linux开发和树莓派一个层次,属于微处理器级别。

更详细地说,单片机开发主要在于控制检测传输数据,比如控制继电器开关以控制门锁,检测温湿度上传数据到网关。而处理器除了可以做单片机的事,还可以处理音视频等计算量很大的任务,有文件管理系统也有更多的存储空间,以及该平台所提供的「开封即用」的工具(即安装后就可以直接使用),比如在树莓派上运行一个人脸检测系统是没问题的,在树莓派上搭建Web网站也是很方便的。

嵌入式Linux使用的主控芯片比STM32更高级。什么叫高级?除了运行速度内存空间等特性以外,从拿到芯片开始开发,到最后成为一个完整的产品原型或方案,其过程需要用到很多开发工具,硬件电路板的设计、驱动层和系统层代码的移植,应用层代码的编写,这些是需要一个团队合作完成的,当然大牛也可以独立完成,但是需要非常非常多的精力,同时项目周期也会拖得非常非常的长。

嵌入式Linux开发,不是像单片机开发那样设计好硬件后,只需要打开IDE编写代码,然后烧录测试改代码烧录测试改代码。

放上一张ARM芯片内核汇总图片。其中STM32内核属于Cortex-M系列,嵌入式Linux所用内核可能是Cortex-A系列。有的Cortex-M不支持MMU内存管理单元,据我所知最多只能上到 µC/OS系列的嵌入式系统,而Cortex-A支持MMU,可以上类Unix系统。一旦上了类Unix系统,底层的东西就可以封装起来,只提供接口给上层开发人员。

这里科普一下。如果学过面向对象编程,那封装接口就很容易理解。封装是把实现细节尽可能的隐藏起来,对外提供一个或多个公共接口,开发人员只需要知道这个接口怎么调用即可,不需要知道是怎么实现的。这一点和基于单片机开发很大不同,单片机开发本质就是“面向寄存器开发”。而嵌入式Linux开发,是"面向N-1层开发",比如应用层就是“面向操作系统层API开发”。

当然,现在STM32有了STM32Cube这个开发工具,就好像把STM32开发封装一层并提供接口一样。但对我来说,Cube只是一个“开发框架”或"中间件",Cube使开发者配置引脚更省心省力,同时把寄存器封装了一层,以更友好的方式告诉开发者,开发者只需要根据接口文档提供的接口去调用即可(可惜Cube的文档、学习和开发资料太少)。我要是不用Cube,也可以开发STM32,没有Cube以前开发者都是直接看芯片手册开发的。

而对于嵌入式Linux开发,则不能脱离N-1层,不了解底层API都不知道要做什么,例如使用TCP,至少也要知道Socket接口,例如编写Web管理页面,至少也需要一个Web框架(比如Python的Django)及Web服务器(比如Apache)。当然,由于嵌入式Linux都是基于类Unix开发,很多接口及其知识都是通用的,掌握了底层接口以后可以更多的关注业务逻辑。而在单片机开发中,换了一个芯片就需要重新看芯片手册,哪怕是实现相同的功能也有种重新开发的感觉,所以芯片选型阶段也是重中之重。嵌入式Linux应用层开发则不用那么麻烦,只要操作系统是类Unix,底层提供相同的接口即可代码重用。

以上,是我对嵌入式Linux开发和STM32开发(单片机开发)两者之间的见解,欢迎评论区讨论及交流。

第二种解释:

题主要对比的是两个维度的问题,嵌入式系统有多个层次和分工,最底层是硬件载体,STM31属于这一层,上面有驱动,操作系统,应用程序。linux属于操作系统。对于STM32这个级别的硬件,完整的linux比较难以移植,轻量级的uclinux倒是很多成功移植案例。

第三种:

首先,从硬件角度上来说,STM32是Cortex M系列CPU,可运行简单RTOS,也可以bare metal,按照学生的角度来说,就是高级单片机。而LINUX是有MPU的芯片,至于这个MPU,你可以理解为内存管理机制。这个用处就大了,因为有了这个就可以跑操作系统了。至于Linux开发,分驱动开发和应用开发,驱动开发主要涉及一些外设芯片的通信与控制,说白了就是要控制接到我主芯片上的外设,这些驱动可以在LINUX系统上安装,然后可以被上层应用调用。应用开发就类似与PC机开发,涉及一些界面及功能开发,目前嵌入式里面QT还是比较火的,之前用过QT5,不知道现在做到哪个版本了。总结来说,做STM32硬件知识要好,以后可能会有些电路上的EMI问题debug,OS知识稍微了解一下,毕竟有些时候会用的到,当然你足够牛的话,OS在MCU上就是为了让代码易读,好维护,一般老工程师都懂,中断才是单片机的灵魂嘛;Linux驱动工程师要有对硬件和OS都有一定了解,毕竟这是是理论上的中间层,对下面对硬件寄存器,对上要给出合理的API,避免系统资源的占用;Linux应用工程师则更多的面对用户体验及系统资源的分配,因为毕竟读的到驱动文件没问题对他影响就不大。我现在主要是写驱动的,也是范范而谈,希望对你有帮助。

第四种:

最主要的区别是硬件是否带MMU!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式linux和用stm32进行的嵌入式开发这两者之间有什么关联性吗? 的相关文章

  • 课程设计——学生成绩管理系统 C语言

    课程设计 学生成绩管理系统 基本要求 xff1a 1 程序功能 编程实现一个基础的成绩管理系统 2 设计目的 通过本程序综合掌握结构体类型 指针 函数 文件等知识的综合使用 3 功能要求 可扩充功能 1 实现简单的菜单设计 如下所示 1添加
  • Foxmail登陆失败-NO LOGIN Login error password error

    问题描述 xff1a 因为今天在一个项目中需要用到邮箱的客户端授权码 xff0c 所以我在网易邮箱网页版中设置了授权码 xff0c 但是在后来在Foxmail客户端收取邮件时出现了问题 xff1a 我确定自己没有改过密码 xff0c 所以又
  • 远程登录阿里云服务器时,提示Permission denied, please try again.

    在使用ssh命令 xff0c 远程登录阿里云服务器时 xff0c 提示Permission denied please try again 百分之九十的可能 xff1a 你的密码错了 xff01 你需要注意的是 xff0c 我们的实例有两个
  • 为什么使用token?session与token的区别

    目录 一 session的状态保持及弊端 二 token认证机制 一 session的状态保持及弊端 当用户第一次通过浏览器使用用户名和密码访问服务器时 xff0c 服务器会验证用户数据 xff0c 验证成功后在服务器端写入session数
  • 在线加密解密工具

    http tool oschina net encrypt 一个在线加解密工具 xff0c 界面如图 xff1a
  • Django到底是MVC还是MVT?以及MVC和MVT的区别

    最近一直被一些问题所困惑 xff1a Django是遵循MVC还是MVT xff1f MVC和MVT到底有哪些区别 xff1f MVC可以继续拆分吗 xff1f 在网络上浏览了很多无关痛痒的文章 xff0c 无非是M V C分别代表什么 x
  • 【Python】使用Counter方法统计字符串每个字符出现的次数

    from collections import Counter a 61 34 a lskdh 96 foiegn 96 96 as ldnf asd 121 2ljladsfkja 96 sdijfhaosjlfd gjsdfg as d
  • 【Python】时间戳的格式化输出

    将当前时间按照 2019 02 25 10 xff1a 26 xff1a 55 输出 xff1a import datetime now time 61 datetime datetime now strftime 34 Y m d H M
  • 【Python】输出给定范围内的所有素数

    质数 xff08 prime number xff09 又称素数 xff0c 有无限个 质数定义为在大于1的自然数中 xff0c 除了1和它本身以外不再有其他因数 首先定义一个空列表用来存放所有的素数 sushu 61 遍历给定的范围 xf
  • Java 通过map构造树形结构

    在开发中 xff0c 经常会有将 数据组装成为树形结构的场景 xff0c 除了可以通过递归实现 xff0c 还可以通过map 组装实现 一 xff0c 构造基本数据 import apple laf JRSUIUtils import co
  • 【无标题】es搜索基本操作

    一 xff0c 准备数据 1 创建索引 PUT lagou book 2 创建mapping PUT lagou book doc mapping 34 properties 34 34 description 34 34 type 34
  • ubuntu 环境使用eclipse和JLink对uboot进行调试

    ubuntu 12 04 Jlink v8 Jlink Linux v422a tar gz Linux J Link ARM V4 34 Windows 下载eclipse C C 43 43 版本 http www eclipse or
  • 【ES】常用操作工具

    工欲善其事 xff0c 必先利于器 xff0c es使用过程中 xff0c 有些工具能帮助我们快速的上手和使用 一 es head es head 是一款专门针对 es的客户端工具elasticSearch配置包 是一个基于node js的
  • 【es】基本概念理解

    一 xff0c 初识es 1 是什么 xff1f ElasticSearch 简称es 开源的分布式的全文搜索引擎 xff0c 可以近乎实时的存储检索数据 xff0c es使用java开发 xff0c 并且使用Lucene作为核心实现搜索功
  • 无法安装net framework 3.5 的解决方法

    电脑刚重装了Windows8 1系统 xff0c 然后安装数据库的时候 xff0c 却出现了这样的问题 xff1a 您的电脑上的应用需要使用以下windows功能 问题原因是 xff1a 在安装系统的时候 xff0c NET Framewo
  • 【计算机网络原理】第四章 数据链路层

    今天主要梳理了一下数据链路层的内容 xff0c 如下 一 宏观规划 综合数据链路层的整体 xff0c 分为两大部分 xff0c 第一部分讲解数据链路层的功能 xff0c 第二部分讲解数据链路层的功能 这些协议 xff0c 其实还是为了实现数
  • 【redis】关系型数据库 VS 非关系型数据库

    一 关系型数据库 xff1f 1 概念 关系型数据库是指采用了关系模型来组织数据的数据库 简单来说 xff0c 关系模式就是二维表格模型 主要代表 xff1a SQL Server xff0c Oracle Mysql PostgreSQL
  • resultful风格接口

    一 产生背景 网络应用程序 xff0c 越来越流行前端和后端的分离设计 当前的发展趋势是前端的设计层出不穷 比如 xff1a 各种型号的手机 平板灯其他设计 因为必须要一种统一的机制方便不同的前端和后端进行通信 这就导致了API结构的流行
  • 【kafka】Exception thrown when sending a message with key='null' and payload='lizhenjuan;99' to topic

    今天碰到一个奇怪的问题 xff0c 如下图 xff1a 一 问题 1 问题截图 上午还可以发送消息成功的 xff0c 下午突然就发送不了消息了 我就检查我代码的问题 xff0c 是传递的格式不对 xff0c 还是数据要求不对 网上的资料显示
  • 【mysql】order by多个字段排序

    今天遇到了两个字段排序的问题 xff0c 感觉不是很清晰 xff0c 所有又按照规则查询了下 xff0c 总结下 count都是306的有三个 现在需要同时按照age和count排序 xff0c 测试最后的排序结果 默认都是按照age和co

随机推荐

  • PCB Layout软件分析对比(AD、Pads、Allegro)

    PCB Layout软件分析对比 xff08 AD Pads Allegro xff09 国内的EDA软件市场几乎被三家瓜分 xff0c 分别是Altium Cadence Mentor xff0c 也是我们这次主要分析和比较的软件 除此之
  • 【leetcode学习笔记】leecode是什么?

    在csdn上看到leecode是第二次了 xff0c 之前一直不知道是什么 xff1f 今天在学习linux系统如何将文本登录界面转换为图像登录界面的时候 xff08 出现了运行startx后 xff0c ubuntu密码正确也进不去系统的
  • 相机内参详解

    相机内参详解 以下是一些个人在工作中对相机内参的学习和理解 首先要了解一下数码相机的大致成像原理 1 光聚焦在CCD或CMOS上 2 CCD或CMOS完成光 电转换 3 A D将模拟信号转换成数字信号 4 最后由DSP将数字信号转换成数码图
  • java8使用积累

    1 将List lt T gt 数组转换为String并用逗号隔开 String join 34 34 List 2 idea自动补全代码教程 xff1a https www cnblogs com HF Made p 11417225 h
  • 【java】手动分页工具类

    最近小编遇到一个很绕的问题 xff0c 无法使用mybatis自带的分页插件对符合条件的数据进行分页 xff0c 故收集了一个自动分页的工具类 xff1a public static lt T gt List lt T gt getPage
  • redis 使用bitMap实现统计系统在线用户数量

    BitMap xff0c 简单来说 xff0c 其实也就是 byte 数组 xff0c 用二进制表示 xff0c 一个bit的值 xff0c 或者是0 xff0c 或者是1 xff1b 也就是说一个bit能存储的最多信息是2 它用一个bit
  • xml与实体之间的转换

    在对接一些第三方接口的时候往往需要涉及到一些对xml文件的处理 xff0c 小编今天主要总结一下JavaBean与xml文件之间互相转换的探索与实例 使用JAXB技术实现xml与实体之间的转换 1 是什么 xff1a JAXB xff08
  • SVN中trunk、branch、tag区别

    虽然一直都在用svn作项目管理 xff0c 但是一直都是傻傻的分不清主干 分支 今天小编就来详细介绍一下 xff1a branch 分支 xff1a 版本控制系统的一个特性就是能够把各种修改分离出来放在开发品的一个分割线上 这条线就被称为分
  • win10下如何解决VC++MSDEV.EXE的0xc0000142错误

    最近小编在学习时用到了vC 43 43 这个软件 xff0c 但是一直无法正常启动 小编的电脑是从win10家庭版升级到了win10企业版的 xff0c 之前并没有出现过什么异样 xff0c 直到最近软件无法正常打开 xff0c 从网上搜得
  • windows下获取文件上传路径报错:java.io.FileNotFoundException: (文件名、目录名或卷标语法不正确。)

    小编今天在java编程中使用fastdfs实现文件上传功能的时候 xff0c 获取windows文件路径时报错 xff1a java io FileNotFoundException 文件名 目录名或卷标语法不正确 原因分析 xff1a 出
  • qrcode(一)

    1 二维码概念 二维码又称QR Code xff0c QR全称Quick Response xff0c 是一个近几年来移动设备上超流行的一种编码方式 是用某种特定的几何图形按一定规律在平面 xff08 二维方向上 xff09 分布的黑白相间
  • zk服务启动报错:Unexpected exception exiting abnormally java.io.eofexception

    解决方案 xff1a 找到zoo conf中配置的dataDir和dataLogDir路径 然后删除两个文件夹下的version 2文件夹 重启服务 xff0c 问题解决
  • mybatis中useGeneratedKeys和keyProperty的作用

    背景 xff1a 最近在看队友的代码 xff0c 发现个问题 xff0c 后觉是自己out了 在做关联表插入操作时 xff0c 需要根据主表的 主键id作详情表的属性值 xff0c 最笨的方法就是 xff0c 先插入主表 xff0c 然后通
  • Linux基础命令---tracepath追踪路由

    tracepath tracepath 指令可以追踪数据到达目标主机的路由信息 xff0c 同时还能够发现MTU值 它跟踪路径到目的地 xff0c 沿着这条路径发现MTU 它使用UDP端口或一些随机端口 它类似于Traceroute xff
  • 如何将dockerhub与github关联

    本文目录 如何将dockerhub账户与github相关联如何在dockerhub中利用github上的Dockfile进行auto build dockerhub具有Create Automated Build xff0c 也就是说 xf
  • 网络文件夹目前是以其他用户名和密码进行映射的——映射盘更换登录用户名问题

    引言 最近在使用局域网内的映射盘来共享文件 xff0c 这样比通过外网来上传和下载文件的速度快很多 xff0c 但是对于安全问 题我们不得不去考虑权限问题 xff0c 就是我们需要分配不同的用户名和密码来区分权限 xff0c 有的用户名只能
  • 一直听说“不忘初心”,今天才知道真正内涵!

    古语有云 xff1a 不忘初心 xff0c 方得始终 什么是初心 xff1f 1912年春天 xff0c 哈佛大学教授桑塔亚纳正站在课堂上给学生们上课 xff0c 突然 xff0c 一只知更鸟飞落在教室的窗台上 xff0c 欢叫不停 桑塔亚
  • 年终总结——旧的收获与新的开始

    引言 收获本身分为俩部分 xff0c 一个就是旧经历的收获 xff0c 另外就是新路程的规划 概述 旧的一年已然逝去 xff0c 那我们是否颗粒归仓 xff1b 新的一年即将开始 xff0c 我们是否规划好新的旅程 内容 颗粒归仓 从没有思
  • Android、Java,关于交通部808协议、905协议、794协议等部标协议、出租车协议、网约车协议、网约车智能终端、出租车智能终端的简要说明

    作为一名有5年车辆网Android智能终端开发经验的入行人 xff0c 今天跟大家分享一下我在车辆网这一领域的经历和技术 说实话 xff0c 刚接触协议的时候 xff0c 我感觉很懵逼 xff0c 这哪里是Androi开发 xff0c 简直
  • 嵌入式linux和用stm32进行的嵌入式开发这两者之间有什么关联性吗?

    基于STM32的开发属于微控制器开发领域 xff0c 主要开发工具是keil或IAR xff0c 这种开发更准确的说法是单片机开发或者硬件开发 xff1b 而招聘里所说的嵌入式开发 xff0c 开发环境是基于Linux操作系统 xff0c