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库的优势基本都可以忽略了。
相关文章:
STM32 - 在机器人领域,LL库相比HAL优势明显
在机器人控制器、电机控制器等领域的开发,需要高实时性、精细化控制或者对代码执行效率、占用空间有较高要求。所以,大家常用的HAL库明显不符合要求。再加上,我们学习一门技术,一定要学会掌握底层的原理。MCU开发的底层就是寄存器…...
力扣No.376.摆动序列
题目: 链接: https://leetcode.cn/problems/wiggle-subsequence/description/ 代码: class Solution {public int wiggleMaxLength(int[] nums) {int nnums.length;//状态表示:int[] fnew int[n];int[] gnew int[n];//初始化:for(int i0;i…...
找工作、创业的思考和出路
最近有几位朋友在找工作,以及探索职场出路,与他们聊了一些关于找工作和职业发展的话题。而这些话题对大多数职场人来说,都是必须考虑和面对的问题。今天就基于这两个话题展开聊聊。 首先,初入职场时,工作是相对容易找…...
IP关联是什么?怎么避免?
在跨境电商的道路上,大家好!今天想和大家聊一聊一个非常重要的话题,那就是IP关联的问题。在商业活动中,了解如何避免IP关联对保护我们宝贵的商铺至关重要。接下来,我们将深入探讨IP关联的概念、影响及如何有效防止这一…...
C语言中qsort函数的详解,以及模拟
引言 C语言中qsort函数的详解和模拟实现qsort函数,这里为了使用冒泡排序来模拟qsort函数 一、详解qsort函数 在 C 语言中,qsort 函数是一个标准库函数,用于对数组进行快速排序(Quick Sort)。它位于 <stdlib.h>…...
9、讲一讲你理解的虚拟内存【中高频】
计算机早期,CPU 是直接操作 物理内存(Physical Memory)的,但这会导致 内存空间无法完全隔离,一个程序修改了另一个程序的地址空间,就会导致程序崩溃;同时物理内存大小有限,一旦超出这…...
算法刷题整理合集(四)
本篇博客旨在记录自已的算法刷题练习成长,里面注有详细的代码注释以及和个人的思路想法,希望可以给同道之人些许帮助。本人也是算法小白,水平有限,如果文章中有什么错误或遗漏之处,望各位可以在评论区指正出来…...
高数1.5 极限的运算法则
1. 预备知识 2.四则求极限法则 3.复合运算求极限法则...
【鸿蒙开发】Hi3861学习笔记- 定时器中断
00. 目录 文章目录 00. 目录01. 概述02. 定时器相关API2.1 hi_timer_create2.2 hi_timer_start2.3 hi_timer_stop2.4 hi_timer_delete 03. 硬件设计04. 软件设计05. 实验现象06. 附录 01. 概述 定时器,顾名思义就是用来计时的,我们常常会设定计时或闹钟…...
Spring Cloud Config 快速介绍与实例
Spring Cloud Config 是什么? Spring Cloud Config 是一个用于分布式系统的配置管理工具,提供集中化的外部配置支持。它适用于微服务架构,能够将各个服务的配置集中存储在服务端(如 Git 仓库),客户端按需动态获取配置,解决了配置分散、环境切换复杂等问题。 Spring Cl…...
Power Apps 技术分享:画布应用使用表单控件
前言 表单控件,是画布应用里一个非常好用的控件,我们今天简单介绍下,如何使用这个控件。 正文 1.首先,我们需要有一个数据源,我们这里用上一篇博客新建的数据源,如下图: 2.新建一个页面…...
【数据库】Data Model(数据模型)数据模型分析
理解图片中的 Data Model(数据模型)是学习数据库设计和应用程序开发的重要一步。作为初学者,你可以通过比喻和简单的解释来理解这些概念以及它们之间的联系。以下是对图片中数据模型的详细分析,以及如何理解它们之间的关系。 1. 数…...
【Unity】 HTFramework框架(六十二)Agent编辑器通用智能体(AI Agent)
更新日期:2025年3月14日。 Github源码:[点我获取源码] Gitee源码:[点我获取源码] 索引 编辑器通用智能体AIAgent类Friday(星期五)启用智能体设置智能体类型开放智能体权限智能体交互资源优化批处理运行代码联网搜索休闲…...
Elasticsearch 滚动索引(Rollover Index)详解
文章目录 1、滚动索引的作用2、滚动索引的用法2.1 核心概念2.2 实现步骤 3、适用场景4、与其他技术的结合使用5、案例:日志数据的滚动索引5.1 场景描述5.2 实现步骤 6、示例:结合索引生命周期管理(ILM)6.1 场景描述6.2 实现步骤 7…...
学习笔记:黑马程序员JavaWeb开发教程(2025.3.17)
11.5 案例-文件上传-阿里云OSS-入门 出现报错:Process exited with an error: 1 (Exit value: 1),点击exec那一行,出现错误原因:Command execution failed. 在CSDN上找到了解决方法: 之后出现新的报错&…...
python局部变量和全局变量
文章目录 1.局部变量和全局变量2.局部变量2.1 局部变量的作用2.2 局部变量的生命周期 3. 全局变量3.1 函数不能直接修改全局变量的引用3.2 在函数内部修改全局变量的值3.3 全局变量定义的位置3.4 全局变量命名的建议 1.局部变量和全局变量 (1)局部变量 …...
攻克 3D 模型网站建设难题,看迪威系统优势
在当今数字化时代,3D 模型广泛应用于建筑设计、游戏开发、工业制造、文化创意等诸多领域。拥有一个功能强大的 3D 模型网站,对于企业展示产品、设计师分享作品、教育机构开展教学等都具有重要意义。然而,构建这样一个网站却并非易事ÿ…...
仿最美博客POETIZE(简易版)
写在前面 本文章参考于两个开源项目分别为:POETIZE-最美博客,拾壹博客 如有侵权,请联系删除 正题 此页面为拾壹博客修改而成,采用了POETIZE的布局以及背景图片,技术栈:SpringbootVue,主要涉及页面为网站…...
vue/H5的日历组件可简单定制
在components创建riliZujian.vue <template><div class"max_box"><!-- 日历 文字 --><div class"month"><div click"lastMonth" class"monthText13">上月</div><div class"monthText2&q…...
STM32——独立看门狗(IWDG)
IWDG 简介 独立看门狗本质上是一个 定时器 ,这个定时器有一个输出端,可以输出复位信号。该定时器是一个 12 位的递减计数器 ,当计数器的值减到 0 的时候,就会产生一个复位信号。如果 在计 数没减到 0 之前,重置计…...
C++11智能指针简述
一、实现原理 在智能指针对象中有一个裸指针,此指针存储的是动态创建对象的地址,用于生存期控制,能够确保智能指针对象离开所在作用域时,自动正确地销毁动态创建的对象,防止内存泄漏。 使用裸指针存在的问题ÿ…...
fastpdf应用程序错误0xc0000142
原因:一般是部分DLL文件未能被系统注册或者丢失,导致动态库调用错误造成的。 解决方法:将DLL文件重新注册一遍。 手动复制:1.按下“winr”打开运行,在运行框中输入“cmd”,再点击确定; 2.在命…...
Linux操作系统实验报告单(3)文本编辑器vi/vim
一、实验目的 掌握vi/vim编辑器的进入和退出方式了解vi/vim的三种模式熟练vi/vim的操作命令 二、实验内容 1.在家目录下新建一个名为“vitest_name”(“name”为学生姓名拼音)的目录。 ●创建用户目录命令:sudo mkdir /home/vitest_lw3613 …...
linux(centos8)下编译ffmpeg
必要依赖 # centos8有些找不到依赖包,需要手动下载源码编译 sudo dnf install -y epel-release sudo dnf install -y git gcc gcc-c make nasm yasm \libtool autoconf automake cmake \bzip2 bzip2-devel zlib-devel \xz xz-devel x264-devel x265-devel \openssl…...
Centos固定IP配置
虚拟机安装 安装vmware 网盘链接 安装centos7.5 网盘链接 安装教程自行查找 固定IP配置 对安装好的VMware进行网络配置,方便虚拟机连接网络,本次设置建议选择NAT模式,需要宿主机的Windows和虚拟机的Linux能够进行网络连接,…...
AI自动获客系统源码
一、AI自动获客的显著优势 在当今商业环境中,AI自动获客技术正逐渐成为企业获客的新宠。相较于传统的获客方式,它展现出诸多显著优势。首先,AI技术能够通过智能分析和精准匹配,快速找到潜在客户,从而大大提高获客效率…...
3.17[Q]CV Bézier curve
我是计算机视觉学生,?详细解释,越细节越好 我是计算机视觉学生,如何使用de Casteljau 算法来绘制由 4 个控制点表示的 Bzier 曲线?原理是什么?工作流程是什么?详细解释,越细节越好…...
K8S学习之基础三十一:k8s中RBAC 的核心概念
Kubernetes (k8s) 中的 RBAC(Role-Based Access Control,基于角色的访问控制)是一种用于管理用户和服务账户对集群资源访问权限的机制。RBAC 允许管理员通过定义角色(Role)和角色绑定(RoleBindingÿ…...
二叉树算法题实战:从遍历到子树判断
目录 一、引言 二、判断两棵二叉树是否相同 思路 代码实现 注意点 三、二叉树的中序遍历 思路 代码实现 注意点 四、判断一棵树是否为另一棵树的子树 思路 代码实现 注意点 编辑 五、补充 一、引言 作者主页:共享家9527-CSDN博客 作者代码仓库&am…...
第8章 信息安全工程(一)
8.1 信息安全管理 8.1.1 保障要求 网络与信息安全保障体系中的安全管理建设,通常需要满足以下 5 项原则: (1)网络与信息安全管理要做到总体策划,确保安全的总体目标和所遵循的原则。 (2)建立相关组织机构,要明确责任部门&…...
