嵌入式里的“移植”概念

这里因为最近一年看到公司某项目很多代码上有直接硬件的操作,这里有感而发,介绍移植的概念。

一、硬件

先上一个图:

f1f6cafe96f18599dac3273b1082a786.png

举个例子,大学里应该都买过开发板,例如st的,这里三个层次,

内核:例如上图 cortex-M3,这个由ARM公司设计的。

soc:例如上图的stm32f103zet6,arm公司将其授权给芯片厂商 ST,ST在其外围加入一些必要的硬件单元,如时钟,中断控制器之类。例如ST卖的soc里内核为cortex-M3里还有其他型号。

board: 图中的board,板级,理解为板子吧,st自己也会画板子验证芯片,然后作为demo板给其他买st的芯片的设备厂商做参考,例如公司跟某家芯片的代理商购买芯片同时也会买官方的demo板会来参考设计硬件。再例如原子卖的什么阿波罗,野火卖的什么指南者霸道者之类,都理解为板级。

二、软件

到这里有个概念了,内核和soc相关的软件代码由半导体厂商提供,例如你买原子的资料都会提供一份原厂的sdk,而sdk里的demo由的则是基于他们的板子编写一些参考代码,可以直接在上面跑起来。

由于st的demo板硬件和原子他们之间有区别,所以会根据实际做修改,扩展,例如我们做产品的时候为了在我们板子跑起来也会做一些修改,都是属于板级的代码。所以一些移植工作其实就是根据实际的硬件,对半导体厂商提供的参考软件做修改。

2.1、操作系统

例如移植一些系统的时候,都是拿半导体商官方移植好的来修改,也就是上面的一套:内核+soc+board,主要是内核和soc这部分,因为最熟悉的还是半导体厂商他们自己的软件工程师,就算soc没有找到相同型号的代码也要找内核为一样的,这样能大大减少工作量。

工作中常见的如系统移植,像Rtos,以上面图片里的stm32f103无论哪家教程他们也是找官方移植好的下载下来参考,这里其实主要还是板级的移植,根据硬件的区别做修改,soc和内核那部分的适配原厂已经做好了,工作量不大,因为本来就是能跑起来的。

假如没有,例如你要用rt-thread,但是官方没有rt-thread的移植,这时候你就可以看看官方有没有移植好其他系统的代码,例如有freertos。那你的移植就得了解freertos和rt-thread代码,对比去做移植,将soc,内核相关的代码参考freertos做适配(例如freertos这部主要是在port那部分)。这里的工作量就是你对原厂做好的那份能跑freertos的了解和对rt-thread的了解。

这个思路放在其他系统也是一样的,例如linux的移植,像野火和原子的imx6ull教程也是参考官方的代码做板级上的区别做修改,野火的板子烧录nxp官方移植好的uboot、linux内核、文件系统是可直接跑起来的,然后根据实际硬件的区别做一些修改,后面工作量就是根据具体瑕疵问题做修改,所以这里linux的移植的工作量,还是对 uboot、linux内核的代码和使用有一定了解,出了问题可以定位需要修改的地方。linux里对板级的适配提供了一套组件,加载内核的时候同时也要加载设备树文件,就是说把板级的差异提取成以配置文件的形式,可以更加方便板级这部分的修改。

2.2 其他纯软件组件

纯软件的就不多说,根据实际的组件需要的接口做适配即可,例如算法。但是还是需要对你用的组件代码有一定了解,例如用的组件他是基于32位系统的,但是你现在跑的soc是8位的;或者说你用的这份软件用到了浮点数操作,但是用的soc却不支持浮点数的使用。笔者曾经用过汇顶的脉率模块,就平时手环经常看到的功能,当时工作量是:汇顶提供的软件库文件,然后我这在我们的代码上提供控制这个模块用的i2c接口就跑起来了。

类似的例如GUI,工作量还是适配一些需要的软件接口如堆管理接口,刷屏接口,如果还用到了触摸,则提供触摸状态、坐标读取接口。

三、得到的启发

到这里可以明白为什么强调软件要分层了吧?分层做的合适,代码就是可移植的,只要适配好下层接口,把硬件相关,平台相关的代码都抽出来,必要的时候加一些配置项,那代码就是可移植的,做类似的新项目,或者项目换方案的时候,可以快速的验证。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

量子计算与商业转型之旅

近年来,各组织对量子计算的应用有所增加,并使全球商业运营发生了显著变化。《财富商业洞察》的一份报告显示,2022 年量子计算市场价值为 7.17 亿美元,预计到 2030 年将达到 65.28 亿美元。 从本质上讲,量子计算机与经…

周末和男朋友户外运动美好时光

周末的时光总是那么令人期待,仿佛一周的忙碌和疲惫都在这一刻得到了释放。这次,我和男朋友决定到户外去锻炼身体,享受一下大自然的馈赠。 清晨的阳光透过窗帘的缝隙洒进房间,我懒洋洋地睁开眼睛,看到男朋友已经在一旁整…

【Git】:标签管理

目录 理解标签 创建标签 操作标签 理解标签 标签的作用 标记版本:标签 tag ,可以简单的理解为是对某次 commit 的⼀个标识,相当于起了⼀个别名。例如,在项目发布某个版本的时候,针对最后⼀次 commit 起⼀个 v1.0 这样…

QT的ui界面显示不全问题(适应高分辨率屏幕)

//自动适应高分辨率 QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);一、问题 电脑分辨率高,默认情况下,打开QT的ui界面,显示不全按钮内容 二、解决方案 如果自己的电脑分辨率较高,可以尝试以下方案:自…

【Elasticsearch】初始化默认字段及分词

1、添加分词插件 1)在线安装 执行命令 需要指定相同的版本 bin/elasticsearch-plugin.bat install https://get.infini.cloud/elasticsearch/analysis-ik/7.17.24 2)离线安装 将安装包解压到 /plugins 目录下 安装包可以从对应的资源处下载 启动成…

MATLAB直流电机模型,直流电机控制

直流电机控制简介 直流电机(DC motor)广泛应用于各种机械驱动和电力控制系统中,其运行性能的控制至关重要。为了精准地控制直流电机的输出特性,可以通过不同的控制方式进行调节。常见的控制方式包括电枢电流控制、速度控制、电机位…

Linux之封装线程库和线程的互斥

Linux之封装线程库和线程的互斥与同步 一.封装线程库二.线程的互斥2.1互斥量的概念2.2初始化和销毁互斥量2.3加锁和解锁2.4互斥量的原理2.5可重入和线程安全2.6死锁 一.封装线程库 其实在我们C内部也有一个线程库而C中的线程库也是封装的原生线程库的函数,所以我们…

PHP语法学习(第九天)—PHP连接mysql详解(下)

首先,温馨提示,该部分内容跟昨天“PHP语法学习(第八天)—PHP连接mysql详解(上)”一起食用更佳噢!! 学习本篇内容必须掌握数据库基础命令点击“MYSQL 数据库”~~ 本文是接着PHP连接mysql的知识点接着讲,今天主要讲述PHP…

qt基本部分控件用法(一)

前言: 以前 windows下做工具主要是MFC,趁有点空时间,研究了QT,感觉跟MFC 差不多,VS 比 QT CREATOR 还是强大,不过QT可以跨平台,功能更强大,MFC 只能在win平台下.; 1:环境…

Mysql索引,聚簇索引,非聚簇索引,回表查询

什么是索引 数据库索引是为了实现高效数据查询的一种有序的数据数据结构,类似于书的目录,通过目录可以快速的定位到想要的数据,因为一张表中的数据会有很多,如果直接去表中检索数据效率会很低,所以需要为表中的数据建立…

以MP6924A为核心的LLC拓扑学习【一】

PFCLLC: 在PFC(功率因数校正)和LLC(谐振变换器)组成的电源系统中,各个电路有特定的作用,它们协同工作以实现高效率和高功率因数的电能转换。 1. PFC(功率因数校正)电路的作用 PFC电…

️ 在 Windows WSL 上部署 Ollama 和大语言模型的完整指南20241206

🛠️ 在 Windows WSL 上部署 Ollama 和大语言模型的完整指南 📝 引言 随着大语言模型(LLM)和人工智能的飞速发展,越来越多的开发者尝试在本地环境中部署大模型进行实验。然而,由于资源需求高、网络限制多…

1-1 ESP32开发环境配置

前言: 基于Arduio配置ESP32开发环境... 目录 前言: 1.0 安装Python 2.0 安装VSCode 3.0 VSCode实用插件 4.0 替换VSCode配置(可选) 后记 1.0 安装Python 在windows操作系统的搜索框中搜索Microsoft Store 点击获取 安装完成…

【k8s 深入学习之 event 聚合】event count累记聚合(采用 Patch),Message 聚合形成聚合 event(采用Create)

参考 15.深入k8s:Event事件处理及其源码分析 - luozhiyun - 博客园event 模块总览 EventRecorder:是事件生成者,k8s组件通过调用它的方法来生成事件;EventBroadcaster:事件广播器,负责消费EventRecorder产生的事件,然后分发给broadcasterWatcher;broadcasterWatcher:用…

AURIX TC3xx学习笔记2 GTM模块

文章目录 引言功能改进一些缩写 功能细节GTM Clock and Time Base Management (CTBM)Clock Management Unit (CMU)External Generation Unit (EGU)Configurable Clock Generation sub-unit (CFGU)Fixed Clock Generation (FXU) Time Base Unit (TBU) Cluster Configuration Mod…

在CentOS上无Parallel时并发上传.wav文件的Shell脚本解决方案

在CentOS上无Parallel时并发上传.wav文件的Shell脚本解决方案 背景概述解决方案脚本实现脚本说明使用指南注意事项在CentOS操作系统环境中,若需并发上传特定目录下的.wav文件至HTTP服务器,而系统未安装GNU parallel工具,我们可通过其他方法实现此需求。本文将介绍一种利用Sh…

QT通过在线安装器安装【详细】

在线安装器地址: 官方在线安装器:Index of /official_releases/online_installers (qt.io) 通过命令行启动安装页面 直接双击qt安装程序,在线安装会非常慢,甚至安装失败,所以通过命令行页面启动安装页面。点击wind…

保姆级教学 uniapp绘制二维码海报并保存至相册,真机正常展示图片二维码

一、获取二维码 uni.request({url: https://api.weixin.qq.com/wxa/getwxacode?access_token${getStorage("token")},responseType: "arraybuffer",method: "POST",data: {path: "/pages/index/index"},success(res) {// 转换为 Uint…

Unity类银河战士恶魔城学习总结(P166 Ailments FX 异常状态伤害粒子特效)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/ 本章节创建了三种粒子特效,火焰,寒冰,雷电 主场景创建/特效/粒子 初始的例子特效 火焰 寒冰 雷电 En…

Java基于SpringBoot的网上订餐系统,附源码

博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…