STM32 - 在机器人领域,LL库相比HAL优势明显

在机器人控制器、电机控制器等领域的开发,需要高实时性、精细化控制或者对代码执行效率、占用空间有较高要求。所以,大家常用的HAL库明显不符合要求。再加上,我们学习一门技术,一定要学会掌握底层的原理。MCU开发的底层就是寄存器。
总的来说,多于开发嵌入式多年的人来说,HAL库的优势基本都可以忽略了。

一、LL(Low-Layer)优势

LL(Low-Layer)库相比于HAL(Hardware Abstraction Layer) 库,通常具有以下优势:
代码更精简,执行效率更高
LL 库提供了对寄存器的更直接的访问方式,封装更薄,函数调用层次相对更少。
由于函数调用和抽象层的减少,代码占用空间和执行开销都更低。
在对实时性要求较高的场景(例如电机高速控制、精密运动控制等),LL 库的轻量特性能够减少延时和抖动。

更高的可控性与灵活性
LL 库保留了对硬件资源的精细化配置能力,你可以直接读写和配置外设寄存器,而不必依赖过多的中间层。
可以根据实际应用需求灵活地裁剪或修改驱动逻辑。例如需要更改某个寄存器位的默认配置时,LL 库能够更容易地实现。
适合自行编写定制化的中断服务函数、优化外设初始化流程等。

更有助于深入理解硬件底层
由于 LL 库本质上非常贴近寄存器级别,开发者在使用过程中更容易学习并掌握 MCU 硬件外设的细节。
在调试和排错时,更容易定位到外设寄存器层面,从而快速找到问题根源。

适合对启动速度或内存占用敏感的项目
许多运动控制或者机器人项目都可能在资源比较受限的微控制器上运行,需要节省Flash、RAM以及启动时间。
与 HAL 相比,LL 对内存占用和初始化开销的控制更优。

二、HAL(Hardware Abstraction Layer)优势

HAL (Hardware Abstraction Layer) 库相比于 LL(Low-Layer)库,通常具有以下优势:
更高层次的抽象,易上手、易维护
HAL 封装程度较高,通过函数与常用数据结构来抽象底层寄存器操作,让开发者更关注应用逻辑而非寄存器细节。
相对更容易理解和使用,对初学者或项目周期较紧的团队更友好。

通用性与可移植性更好
HAL 提供了一致的 API 接口,不同系列的 STM32 芯片上的外设驱动接口基本相同,使得移植到其他 STM32 芯片或升级项目时更方便。
对于需要支持多款 MCU 型号的项目,HAL 的通用接口能减少平台迁移或维护的工作量。

开发生态与资料丰富
ST 官方提供了大量基于 HAL 的示例、参考代码以及 Cube 生态工具(例如 STM32CubeMX),用户能够快速生成初始化代码并进行配置。
社区或论坛中绝大多数示例和库封装都基于 HAL,遇到问题时便于快速查找解决方案。

封装完整,功能覆盖面广
HAL 库在外设功能上覆盖全面,许多外设功能(如 USB、以太网、SD 卡、图形库等)都有对应的 HAL 驱动。
对于不追求极致性能或精简度的场合,HAL 几乎可以满足所有常见应用需求。

可与中间件结合使用
ST 官方及第三方提供的众多中间件(如 FreeRTOS、FatFS、TCP/IP 协议栈等)通常都基于 HAL 接口进行对接。
直接使用 HAL 可以与这些中间件更好地配合,减少额外封装或接口转换带来的麻烦。

总的来说,多于开发嵌入式多年的人来说,HAL库的优势基本都可以忽略了。

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

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

相关文章

【计算机网络】2物理层

物理层任务:实现相邻节点之间比特(或)的传输 1.通信基础 1.1.基本概念 1.1.1.信源,信宿,信道,数据,信号 数据通信系统主要划分为信源、信道、信宿三部分。 信源:产生和发送数据的源头。 信宿:接收数据的终点。 信道:信号的传输介质。 数据和信号都有模拟或数字…

kubernetes|云原生|部署单master的kubernetes 1.25.5版本集群完全记录(使用contained 运行时)

一、 部署目标: kubernetes版本1.19,1.23的前后差异还是比较巨大的,到1.25版本,为了追求高性能,自然还是需要使用containerd,本文将主要讲述在centos7虚拟机下部署kubernetes 1.25.5集群,使用…

DeepSeek+Dify本地部署私有化知识库

1.Windows安装docker Windows安装Docker-CSDN博客 2.安装olloma https://ollama.com/ 安装完成,可以在桌面右下角看到olloma图标 3.安装deepseekR1模型 ollama官网(deepseek-r1),找到deepseek模型 选择合适大小的模型&#xff…

[Linux][经验总结]Ubuntu6.11.0 docker更换镜像源(实操可用的正确方法)

一、前言 关于Ubuntu更换docker镜像源,网上有很多的教程,但在实操中发现,更换的源无法生效——原因是我的docker是在系统安装时,选择附加安装的package的方式安装的。 现将处理过程记录如下。 二、获取镜像源 在网上随便找个几…

NHANES指标推荐:BRI!

文章题目:Association of body roundness index with cardiovascular disease in patients with cardiometabolic syndrome: a cross-sectional study based on NHANES 2009-2018 DOI:10.3389/fendo.2025.1524352 中文标题:心脏代谢综合征患者…

3.水中看月

前言 这篇文章讲解套接字分配IP地址和端口号。这部分内容也相对有些枯燥,但并不难,而 且是学习后续那些有趣内容必备的基础知识(计算机网络基础)。 一、分配给套接字的IP地址与端口号 IP是InternetProtocol(网络协议…

Linux驱动开发-①pinctrl 和 gpio 子系统②并发和竞争③内核定时器

Linux驱动开发-①pinctrl 和 gpio 子系统②并发和竞争③内核定时器 一,pinctrl 和 gpio 子系统1.pinctrl子系统2.GPIO子系统 二,并发和竞争1.原子操作2.自旋锁3.信号量4.互斥体 三,按键实验四,内核定时器1.关于定时器的有关概念1.…

奇安信二面

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…

Python库安装报错解决思路以及机器学习环境配置详细方案

文章目录 概要第三方库gdalpymoltalibmahotasgraphviznltk-datalazypredictscikit-surprisenb_extensionspyqt5-toolsspacy、en_core_web_sm 机器学习GPU-torch安装torch_geometric安装ubuntu安装显卡驱动dlib安装torch-cluster、torch-scatter、torch-sparse和torch-geometric…

Power Apps 技术分享:连接SharePoint列表数据源

前言 在使用Power Apps的时候,使用列表作为数据源是非常方便和经济的,列表创建简单,SharePoint的存储也不像Dataverse需要按照容量付费。 正文 1.我们先在SharePoint中建一个列表,添加一些测试数据,如下图:…

【Linux】learning notes(4)cat、more、less、head、tail、vi、vim

文章目录 catmore 查看整个文件less 查看整个文件head 查看部分文件tail 查看部分文件vim / vi cat cat 命令在 Linux 和 Unix 系统中非常常用,它用于连接文件并打印到标准输出设备(通常是屏幕)。虽然 cat 的基本用法很简单,但它…

C++11函数包装器

目录 std::function 注意事项 包装静态成员函数 包装非静态成员函数 std::bind 用法 应用场景 std::function function是C11引入的类,可以用任何可调用对象作为参数,构造出一个新对象。 可调用对象有函数指针,仿函数,lamb…

maven的安装配置

目录 一、官网下载压缩包 二、配置环境变量 设置 MAVEN_HOME 添加 MAVEN_HOME\bin 到 PATH 三、配置本机仓库和远程仓库 四、配置idea 一、官网下载压缩包 Download Apache Maven – Maven 如上图。选择这个压缩包 选择好文件,下载完后,配置环境变…

分布式事务

1 事务 众所周知,事务具有ACID四大特性: 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。 一致性(Consistency)&a…

Postman中Authorization和Headers的区别

案例 笔者在进行token验证的时候碰到的问题 一般如果是进行token验证,大部分是在Headers下面添加token名称及token的值 这样:后端提取请求头的token即可 还有一种是,左侧选择Bearer Token,右侧添加token的值,后端传递的 大概…

1.备战SISAP 2025挑战:调研2024挑战

简介 紧张刺激的SISAP 2025 challenge发布了,此博客用于记录备战的一些准备,思路和实验。 25年挑战介绍 详细信息参考SISAP Indexing challenge 2025 Task 1:内存受限索引 这项任务要求参与者开发具有reranking(重排&#xf…

FPGA学习(二)——实现LED流水灯

FPGA学习(二)——实现LED流水灯 目录 FPGA学习(二)——实现LED流水灯一、DE2-115时钟源二、控制6个LED灯实现流水灯1、核心逻辑2、代码实现3、引脚配置4、实现效果 三、模块化代码1、分频模块2、复位暂停模块3、顶层模块 四、总结 一、DE2-115时钟源 DE2-115板子包含一个50MHz…

进程间通信--匿名管道

进程间通信介绍 进程间通信目的 数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件&…

【鸿蒙开发】Hi3861学习笔记-Visual Studio Code安装(New)

00. 目录 文章目录 00. 目录01. Visual Studio Code概述02. Visual Studio Code下载03. Visual Studio Code安装04. Visual Studio Code插件05. 附录 01. Visual Studio Code概述 vscode是一种简化且高效的代码编辑器,同时支持诸如调试,任务执行和版本管…

人工智能 Day06 pandas库进阶

1.处理缺失数据 总体流程是这样的, 归根在于如何处理NAN,接下来详细赘述 1.1. 处理缺失值的相关函数 判断缺失值 pd.isnull(df):用于判断 DataFrame df 中的元素是否为缺失值(NaN ),返回一个与df 形状相同…