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

2024-08-27 17:18

本文主要是介绍嵌入式linux和用stm32进行的嵌入式开发这两者之间有什么关联性吗?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于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!

这篇关于嵌入式linux和用stm32进行的嵌入式开发这两者之间有什么关联性吗?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1112283

相关文章

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

linux hostname设置全过程

《linuxhostname设置全过程》:本文主要介绍linuxhostname设置全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录查询hostname设置步骤其它相关点hostid/etc/hostsEDChina编程A工具license破解注意事项总结以RHE

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

在Linux终端中统计非二进制文件行数的实现方法

《在Linux终端中统计非二进制文件行数的实现方法》在Linux系统中,有时需要统计非二进制文件(如CSV、TXT文件)的行数,而不希望手动打开文件进行查看,例如,在处理大型日志文件、数据文件时,了解... 目录在linux终端中统计非二进制文件的行数技术背景实现步骤1. 使用wc命令2. 使用grep命令

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信