ARM32开发——库与包

🎬 秋野酱:《个人主页》
🔥 个人专栏:《Java专栏》《Python专栏》

⛺️心若有所向往,何惧道阻且长

文章目录

    • 嵌入式软件通用架构
    • SPL库
    • HAL库
    • MSP

嵌入式软件通用架构

在这里插入图片描述

标准外设库(Standard Peripheral Library)和HAL库(Hardware Abstraction Layer Library)是两种不同的库,它们在嵌入式系统开发中发挥不同的作用。它们通常用于不同的层次,但也有关联的部分。

SPL库

标准外设库,Standard Peripheral Library。简称SPL。标准外设库是一种用于嵌入式系统开发的软件库,由各种芯片厂家提供,旨在简化和抽象硬件访问。SPL的目标是帮助开发者更轻松地与微控制器(MCU)的外设进行交互,而无需深入了解底层硬件细节。
SPL通常包含了用于初始化、配置和控制各种外设(例如GPIO、UART、SPI、I2C、定时器等)的函数和驱动代码。这使得开发者可以使用相对简单的API来操作这些外设,而不必直接操作硬件寄存器。SPL还可以提供示例代码、文档和工具,以帮助开发者更好地理解和使用外设功能。
SPL通常是针对特定芯片系列或家族设计的,因此它的功能和支持可能会因厂家和型号而异。开发者可以根据自己的芯片型号选择相应的SPL版本,然后使用其中的函数和驱动代码来开发应用程序。
通常SPL库我们也称之为 固件库Firmware。

HAL库

HAL库,Hardware Abstraction Layer Library。HAL库是特定厂家的硬件抽象层库,用于对特定系列或型号的微控制器进行底层硬件操作和抽象。HAL库提供了与硬件无关的API接口,使得开发者可以编写与硬件平台无关的代码。HAL库封装了与硬件相关的底层寄存器操作,使得开发者可以通过函数调用来控制外设、配置时钟、中断等,而无需直接操作寄存器。

HAL库通常建立在标准库之上。HAL库在提供对硬件的抽象时,可能会使用标准库提供的一些基本函数,如内存操作函数(memcpy、memset等)。此外,HAL库还可能在某些情况下使用标准库的输入输出函数(printf、scanf等)来简化开发者与外设的交互。
对于一些大型的HAL库,可能会包含自己的标准库实现,以满足特定需求或兼容性要求。这种情况下,HAL库可能提供自己的标准库函数,以便开发者在不同的编译环境中使用。
需要强调的是,虽然标准库和HAL库在嵌入式系统开发中常常共同使用,但它们是两个独立的概念,各自在软件开发的不同层次发挥作用。标准库是通用的软件库,可用于各种平台和应用,而HAL库是特定硬件的抽象层库,用于简化对硬件的操作。
SPL和HAL的关系
“标准外设库”(SPL)和"硬件抽象层"(HAL)都是用于嵌入式系统开发的软件库,旨在简化和抽象硬件访问。它们之间的关系如下:

  1. 演进关系: HAL可以被视为SPL的进化版本。在某些嵌入式系统开发环境中,SPL被逐渐取代或演变为HAL。HAL提供了更高级别的抽象和更一致的API,使开发者能够更容易地跨不同的芯片系列进行开发。
  2. 抽象程度: HAL提供了更高层次的抽象,更接近通用的API风格,而SPL可能会更接近底层硬件寄存器的编程接口。这使得使用HAL更加方便,尤其是对于初学者或跨平台开发。
  3. 芯片厂家支持: HAL通常由芯片厂家、开源社区或第三方组织提供,以提供更广泛的支持。SPL通常由芯片厂家提供,且可能只针对特定的芯片系列。
  4. 功能覆盖: HAL通常提供一致的API,支持跨不同的芯片系列,从而促进了跨平台开发。SPL可能更专注于特定的芯片系列,提供更特定的功能和配置选项。
  5. 代码大小和效率: 由于HAL提供了更高层次的抽象,可能会引入更多的代码,导致代码大小增加。SPL通常更接近底层硬件,可能更紧凑且更高效。
    目前的现状,企业开发偏SPL开发,新的技术环境偏HAL开发。HAL开发也需要厂商的支持,需要提供稳定的API,也需要长期验证。

    BSP
    BSP,全称Board Support Package,是指嵌入式系统中与硬件平台相关的软件层次。它提供了与具体硬件平台相关的底层驱动程序、初始化代码、操作系统适配层等。BSP负责将底层硬件与高层应用程序隔离开来,使应用程序能够更方便地在不同硬件平台上运行。BSP还可以包括与外设交互的接口、时钟配置、中断处理等。
    可以简单的理解为,将开发板中的传感器、电机、按键等,进行封装,方便外部调用。

MSP

MSP,全称Microcontroller Support Package,是更专注于微控制器的支持包,它针对特定的微控制器或微处理器提供了更详细的支持。MSP包括对芯片外设的低级驱动,例如ADC(模数转换器)、PWM(脉宽调制)、定时器等。它通常提供了对特定芯片的寄存器级别的访问,使开发人员能够直接配置和控制硬件功能。MSP的目标是为特定微控制器提供高效的编程支持,充分利用其硬件功能,从而实现更精细的控制。
可以简单的理解为,将外设进行细致的逻辑封装,方便调用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python魔法之旅-魔法方法(03)

目录 一、概述 1、定义 2、作用 二、主要应用场景 1、构造和析构 2、操作符重载 3、字符串和表示 4、容器管理 5、可调用对象 6、上下文管理 7、属性访问和描述符 8、迭代器和生成器 9、数值类型 10、复制和序列化 11、自定义元类行为 12、自定义类行为 13、类…

【Linux】初识信号及信号的产生

初始信号 初始信号什么是信号站在应用角度的信号查看Linux系统定义的信号列表 信号的常见处理方式信号的产生通过终端按键产生信号什么是core dump?如何开启core dump?core dump有什么用?为什么默认关闭core dump?设置了core文件大小但是没有产生core文…

【SQL学习进阶】从入门到高级应用(八)

文章目录 ✨连接查询✨什么是连接查询✨连接查询的分类✨笛卡尔积现象✨内连接✨什么叫内连接✨内连接之等值连接✨内连接之非等值连接✨内连接之自连接 ✨外连接✨什么叫外连接✨外连接之左外连接(左连接)✨外连接之右外连接(右连接&#xf…

ubuntu 18.04 ros1学习

总结了一下,学习内容主要有: 1.ubuntu的基础命令 pwd: 获得当前路径 cd: 进入或者退出一个目录 ls:列举该文件夹下的所有文件名称 mv 移动一个文件到另一个目录中 cp 拷贝一个文件到另一个目录中 rm -r 删除文件 gedit sudo 给予管理员权限 sudo apt-…

php反序列化学习(2)

1、魔术方法触发规则: 魔术方法触发的前提是:魔法方法所在类(或对象)被调用 分析代码,_wakeup()的触发条件是进行反序列化,_tostrinng()触发的条件是把对象当成字符串调用,但是魔术方法触发的前…

安全测试用例及解析(Word原件,直接套用检测)

5 信息安全性测试用例 5.1 安全功能测试 5.1.1 标识和鉴别 5.1.2 访问控制 5.1.3 安全审计 5.1.4 数据完整性 5.1.5 数据保密性 5.1.6 软件容错 5.1.7 会话管理 5.1.8 安全漏洞 5.1.9 外部接口 5.1.10 抗抵赖 5.1.11 资源控制 5.2 应用安全漏洞扫描 5.2.1 应用安全漏洞扫描 5.3…

方差和标准差的区别

标准差和方差都是用来衡量随机变量的离散程度的统计量,它们之间有以下区别: 方差(Variance): 方差是衡量随机变量离其均值的离散程度的度量。它是各个数据与其平均值之差的平方和的平均值。方差的公式为:…

鹤城杯 2021 流量分析

看分组也知道考http流量 是布尔盲注 过滤器筛选http流量 将流量包过滤分离 http tshark -r timu.pcapng -Y "http" -T json > 1.json这个时候取 http.request.uri 进一步分离 http.request.uri字段是我们需要的数据 tshark -r timu.pcapng -Y "http&quo…

【全开源】Java情侣飞行棋系统微信小程序+H5+APP源码+微信公众号

​让爱情与游戏并行 一、引言:飞行棋与情侣时光的交融 在快节奏的现代生活中,情侣们常常寻找一种既能增进感情又能共同娱乐的方式。飞行棋,这款经典的家庭游戏,因其简单易上手、策略性强而深受大众喜爱。而现在,我们…

使用compile_commands.json配置includePath环境,解决vscode中引入头文件处有波浪线的问题

通过编译时生成的 compile_commands.json 文件自动完成对 vscode 中头文件路径的配置,实现 vscode 中的代码的自动跳转。完成头文件路径配置后,可以避免代码头部导入头文件部分出现波浪线,警告说无法正确找到头文件。 步骤 需要在 vscode 中…

木馒头头戴式蓝牙耳机

这里写目录标题 木馒头二代头戴式蓝牙耳机清除连接记忆 木馒头二代头戴式蓝牙耳机清除连接记忆 在配对模式下,同时按住播放和暂停按钮4秒,LED闪烁紫色3次,即为清除成功。

电子烟开发【恒压、恒有效算法】

恒压算法 pwm是通过软件模拟的 pwm满值运行是250全占空比 #define D_TARGET_AVERAGE_VOLTAGE 3500 //R_ADC1_Vout :发热丝两端AD值 //R_ADC_FVR :电池电压AD值 //FVR_VOLTAGE :电池AD参考电压 满电值AD //R_Smk1Duty :最后…

深入分析 Android Service (一)

文章目录 深入分析 Android Service (一)1. Android Service 设计说明1.1. Service 的类型1.2. Service 的生命周期1.3. 创建和启动 Service1.4. 绑定 Service1.5. ServiceConnection1.6. 前台 Service1.7. IntentService示例:创建和使用 IntentService 2. Service …

CentOS7部署Yearning并配置MySQL数据库远程访问详细流程——“cpolar内网穿透”

文章目录 前言1. Linux 部署Yearning2. 本地访问Yearning3. Linux 安装cpolar4. 配置Yearning公网访问地址5. 公网远程访问Yearning管理界面6. 固定Yearning公网地址 前言 本文主要介绍在 Linux 系统简单部署 Yearning 并结合 cpolar 内网穿透工具实现远程访问,破除…

Git基本使用教程(学习记录)

参考文章链接: Git教程(超详细,一文秒懂) RUNOOB Git教程 Git学习记录 1Git概述 1.1版本控制软件功能 版本管理:更新或回退到历史上任何版本,数据备份共享代码:团队间共享代码,…

【vscode篇】1-VScode设置语言为中文,2-解决中文注释乱码问题。

设置语言为中文 在前端开发中,Visual Studio Code(简称vscode)是一个非常好用的工具,但第一次打开vscode会发现界面为英文,这对很多开发者来说会很不友好(比如我),把界面设置成中文只需要安装一个插件即可&…

ONLYOFFICE 协作空间与 WordPress 如何集成

转载自作者:VincentYoung,略有改动 阅读本文,了解如何将 ONLYOFFICE 协作空间与 WordPress 进行集成。 ONLYOFFICE 协作空间是其去年新推出的产品,用创建虚拟办公室房间的方式,来组织公司内部团队成员的在线协作办公&…

Charles-ios无法抓包原因之一证书

VPN证书安装完成后依然无法抓包存在无网络问题 VPN安装证书后直接抓包这时候抓包接口返回无网络,原因是IOS通用-关于本机-证书信任设计未开启信任

webpack5零基础入门-19HMR的应用

1.定义 HMR即HotModuleReplacement 开发时,当我们修改了其中一个模块的代码webpack默认会将所有模块重新打包编译,速度很慢所以我们需要做到修改摸个模块代码,只对这个模块的代码重新打包编译,其他模块不变,这样打包…

初识Spring Boot:构建项目结构与组件解析

目录 前言 第一点:项目的结构 第二点:controller类的创建与使用(构造器) 第二点:service类的创建与使用(逻辑层) 第三点:Mapper类的创建与使用(数据操作) 总结 前言 在进行Sp…