标准库开发和寄存器开发的区别

1.标准库

void GPIO_Toggle_INIT(void)//初始化GPIO
{GPIO_InitTypeDef GPIO_InitStructure = {0};//定义GPIO结构体RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能GPIO时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//GPIO引脚选择GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//GPIO模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//GPIO速度GPIO_Init(GPIOA, &GPIO_InitStructure);//传参配置
}

①GPIO_InitTypeDef

②RCC_APB2PeriphClockCmd

标准库是厂商提供的,我们所说的标准库开发方式本质就是对地址进行封装。而我们所说的寄存器开发方式就是对地址进行直接操作。

2.寄存器开发

下图是51单片机芯片头文件

实际上就是对地址是直接操作,让地址映射为寄存器名,方便程序员开发

①sfr

  • sfr 用于定义这些寄存器的别名,方便程序员通过名字直接访问寄存器。如P0

sfr 寄存器名 = 地址;  
sfr P0 = 0x80;   // 定义 P0 口的寄存器,地址为 80H 

​​​​②sbit

  • sbit 用于定义寄存器的单个位的别名,可直接操作 1 个比特。

sbit 位名 = 寄存器名 ^ 位位置;  
或  
sbit 位名 = 地址 ^ 位位置;  
sbit LED = P0 ^ 0;   // 定义 P0 口的第 0 位 

3.总结

标准库开发方式:

  1. 提供了对底层硬件的抽象封装
  2. 通过API函数调用实现功能
  3. 开发效率高,代码可移植性强
  4. 适合快速开发和产品原型验证
  5. 示例:STM32的HAL库、标准外设库

寄存器开发方式:

  1. 直接操作MCU的寄存器地址
  2. 需要对芯片手册有深入了解
  3. 执行效率更高,代码量更小
  4. 适合对性能和资源要求严格的场合
  5. 示例:直接配置GPIO寄存器控制LED

实际应用中,通常采用混合开发方式:

  • 对性能要求高的部分使用寄存器操作
  • 其他部分使用标准库提高开发效率

具体到开发步骤:

  1. 标准库方式:

    • 包含对应头文件
    • 调用初始化函数
    • 使用API完成功能
  2. 寄存器方式:

    • 查阅芯片手册获取寄存器地址
    • 定义寄存器指针
    • 直接读写寄存器

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

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

相关文章

在 WebSocket 中使用 @Autowired 时遇到空指针异常

背景:在websocket在有新的连接加入进来时,调用servier中的服务,使用 Autowired 注入的 Bean 竟然是 null!这并非 Spring 的 Bug,而是对 WebSocket 生命周期管理理解不足导致的。了解这个问题,我们需要区分两…

MGER实验

一、实验拓扑图二、配置1.R5为ISP,只能进行IP地址配置,其所有地址均配为公有IP地址R1侧为15.1.1.1,对应R5为15.1.1.2R2侧为25.1.1.2,对应R5为25.1.1.1R3侧为35.1.1.2,对应R5为35.1.1.1R4侧为45.1.1.2,对应R…

基于 XGBoost 与 SHAP 的医疗自动化办公与可视化系统(下)

— 登录接口 — @app.post(“/token”) def login(form_data: OAuth2PasswordRequestForm = Depends()): user = fake_users_db.get(form_data.username) if not user or form_data.password != user[“password”]: raise HTTPException(status_code=400, detail=“用户名或密…

python学智能算法(二十九)|SVM-拉格朗日函数求解中-KKT条件

引言 前序学习进程中,对拉格朗日函数执行了初步求导,并获得了简化后的拉格朗日函数极值计算式: L(w,b,α)∑i1mαi−12∑i,j1mαiαjyiyjxiTxjL(w,b,\alpha)\sum_{i1}^{m}\alpha_{i}-\frac{1}{2}\sum_{i,j1}^{m}\alpha_{i}\alpha_{j}y_{i}y_…

【AI论文】MiroMind-M1:通过情境感知多阶段策略优化实现数学推理的开源新进展

摘要:近期,大型语言模型已从流畅的文本生成发展至能在多个领域进行高级推理,由此催生了推理语言模型(RLMs)。在众多领域中,数学推理堪称代表性基准,因为它需要精确的多步骤逻辑与抽象推理能力&a…

《使用Qt Quick从零构建AI螺丝瑕疵检测系统》——6. 传统算法实战:用OpenCV测量螺丝尺寸

目录一、概述1.1 背景介绍:从“看见”到“看懂”1.2 学习目标二、图像预处理:让目标更突出三、轮廓发现与尺寸测量四、总结与展望一、概述 1.1 背景介绍:从“看见”到“看懂” 在上一篇文章中,我们成功地为应用程序安装了“眼睛…

《人性的弱点》重构【01】

手上有本《人性的弱点》(韩文桥 译,浙江文艺出版社,2017.1出版),前些年买的,近期翻出来看看。这门书虽成书于80多年前,但卡耐基对人性洞察之深刻,时至今日,并未觉得过时。…

k8s开启审计日志

k8s默认是关闭审计功能的,想看的话需要到apiserver的pod中才可以。 开启此功能是为了进行k8s审计日志的收集,方便我们查看k8s中用户的各自操作。 开启此功能之前,我们要先创建个审计策略文件audit-policy.yaml 例如以下的测验文件 apiVersion…

Kafka MQ 消费者应用场景

Kafka MQ 消费者应用场景 1 消费者自动提交的时机 在 Kafka 中默认的消费位移的提交方式是自动提交,这个由消费者客户端参数 enable.auto.commit 配置,默认值为 true。当然这个默认的自动提交不是每消费一条消息就提交一次,而是定期提交,这个定期的周期时间由客户端参数 …

Git版本控制系统

Git作为目前最流行的分布式版本控制系统,已经成为开发者必备的技能之一。本文将全面介绍Git的核心概念、基本操作、分支管理以及与GitHub的协作开发,帮助读者从零开始掌握Git的使用。 一、Git概述 1.1 Git发展历史 Git诞生于2005年,由Linu…

如何编译RustDesk(Unbuntu 和Android版本)

编译Linux版本的RustDesk备注:官方文档上,一边都是基于sciter,这个在后面已经不建议使用了,但是依然可以编译刚开始的时候看官方的文档,涉及的东西比较多,也搞的一头雾水,通过B站上一个视频&…

Spring中的循环依赖:解密、破局与架构启示

> 当两个Bean紧紧相拥,Spring容器却陷入死锁——这是Java开发者的经典噩梦 某电商平台凌晨上线时突然宕机,日志里反复滚动着`BeanCurrentlyInCreationException`的报错。经排查,**优惠券服务与库存服务在初始化时相互依赖**,形成致命闭环。这个价值百万的故障案例,揭开…

DataFrame​(数据框)

一种二维表格型数据结构,类似于电子表格(如 Excel)或 SQL 表,由行(记录)​和列(字段)​组成。它是数据分析、机器学习和科学计算中最常用的数据结构之一,尤其在 ​Python…

B站视频评论数据爬取

爬取B站视频评论数据爬取与分析 如果只要单纯的脚本可以直接看项目结构里的b_comments.py 一、技术架构 1、环境配置 Python 3.8PyCharm 2、模块配置 requests:用于发送HTTP请求time:用于处理时间相关的操作csv:用于读写CSV文件json&#xff…

OpenAI最新大模型GPT-4o体验之Code Copilot AI编程大模型

一、前言GPT-4o("o"代表"全能")具备处理各种文本、声音和图像资料的能力,能够输出多种格式的文本、声音和图像。GPT-4o 的推出标志着 AI 技术的重大突破。它不再局限于单一媒介,而是首次实现了文本、语音和图…

社交电商推客系统全栈开发指南:SpringCloud+分润算法+Flutter跨端

一、推客系统概述与市场背景推客系统(TuiKe System)是一种基于社交关系的营销推广平台,通过用户分享商品或服务链接,实现裂变式传播和精准营销。近年来,随着社交电商的蓬勃发展,推客系统已成为企业获客的重…

网安-中间件-Redis未授权访问漏洞

目录 Redis Redis持久化 动态修改配置 使用反弹连接的情况 常见监听端口的方式 常见建立反弹连接的方式 流程 Linux crontab cron文件存储路径 利用Redis实现攻击 1.webshell提权案例 2.定时任务shell反弹案例 3.SSH Key getshell案例 ​编辑Redis其他利用方式 …

【c++深入系列】:万字详解栈和队列和deque(附模拟实现的源码)

🔥 本文专栏:c 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: 石头能被水滴穿,不是因为水有多强,而是因为它从未停过。 ★★★ 本文前置知识: 模版 栈 那么栈这个…

速通python加密之RSA加密

RSA加密 RSA加密是一种非对称加密算法(与AES等对称加密不同),由罗纳德李维斯特(Ron Rivest)、阿迪萨莫尔(Adi Shamir)和伦纳德阿德曼(Leonard Adleman)于1977年提出&…

Java BeanUtils 类详解:作用、语法与示例

一、BeanUtils 的核心作用BeanUtils 是 Apache Commons 和 Spring Framework 提供的工具类,主要用于简化 JavaBean 的操作。核心功能包括:属性拷贝:对象间同名属性自动复制动态访问:通过字符串名称操作属性类型转换:自…