初版BL程序一些细节整理(碎碎念)

一.串口的中断触发

        一般我们都是使用TXE或者RXNE来触发中断,其实还有完整传输结束的TC标志位和接收完成的IDLE标志位

        这两个标志位有些不同,RXNE标志位只需要读取寄存器就会自行清除,但是这两个需要读取两个,拿IDLE举例子

这里需要这么写,才能清理标志位

二.关于DMA提前人为中断

        如果手动disable了DMA,那么TCIF标志位会立马挂起

但是如果不清除该标志位,DMA就无法启动

所以我们再配置好DMA后,启动前,要清理标志位,1,2两种清理方式,任意一种都行

三.3种关于定义print导向串口输出的方法

1.覆写库函数

基础概念

关于怎么覆写标准库里面的原函数_c语言编译,怎么覆盖库文件的函数-CSDN博客

我们首先需要点开keil中的MicroLIB库

什么是MicroLIB库,为什么需要点开

这是keil的精简C语言库,代码量少很多,他使用是了标准库的头文件接口,接口在编译阶段会被链接到选择的库(比如 MicroLIB)的 实现部分。

同时他的底层实现函数和标准库的不同

这里我们需要重新定义他的底层fputc()函数,一下定义即可

2.使用sprintf打印到字符数组,再用串口发送字符数组,此方法打印到字符数组

3.将sprintf函数封装起来,实现专用的printf,此方法就是把方法2封装起来

方法三涉及到可变参函数,这里介绍说明如何使用和原理

四.可变参函数

1.我们首先需要添加<stdarg.h>头文件,包括一下宏

首先类似void Serial_Printf(char *format, ...),这种带有....的函数就是,可变参函数,他允许你

👆这些操作都是合理的

2.实现原理
 

首先每个函数的调用就会构建一个属于自己的栈空间,存放自己的变量

va_list args;可以理解为生成了一个栈指针

va_start(arg, format);可以理解为将栈指针指向format后

所以使用va_arg(arg, int);取出数据的时候,会直接取走format后面的int类型数据,类似👇操作

 va_end(arg);就是清理掉之前的指针

这样上面的代码就很简单可以看懂了 ,下面的这个代码也能轻松看懂使用了

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

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

相关文章

为何京东与蚂蚁集团竞相申请稳定币牌照?

京东与蚂蚁集团竞相申请稳定币牌照&#xff0c;主要是为了抢占数字金融新赛道&#xff0c;结合香港的宽松监管政策与全球稳定币市场的快速增长。香港2023年推出的稳定币监管框架及2025年8月即将实施的《稳定币条例》&#xff0c;为企业提供了合规路径&#xff0c;吸引京东通过币…

[特殊字符] Harmony OS Next里的Web组件:网页加载的全流程掌控手册

&#x1f389; Harmony OS Next里的Web组件&#xff1a;网页加载的全流程掌控手册 ##Harmony OS Next ##Ark Ts ##教育 本文适用于教育科普行业进行学习&#xff0c;有错误之处请指出我会修改。 开发者必看的生命周期回调详解代码实操指南 作为开发者&#xff0c;你可能经常需…

【Java学习笔记】集合介绍

集合 > > 集合的引出 在之前常使用数组存储数据&#xff0c;存在的问题如下&#xff1a; &#xff08;1&#xff09;初始化时&#xff0c;长度必须指定&#xff0c;而且一旦指定&#xff0c;不能更改 &#xff08;2&#xff09;不方便扩容&#xff08;使用循环复制原…

电流传感器在汽车中的应用:从BMS电池管理到电机控制的工程解析

1 电流传感器&#xff1a;汽车电子系统的神经末梢 在现代汽车电子架构中&#xff0c;电流传感器已从简单的测量元件演变为​​关键的安全与性能组件​​。作为动力系统的“神经末梢”&#xff0c;它们持续采集电流参数并反馈至控制单元&#xff0c;构成​​实时闭环控制的基础…

积分商城拼团系统框架设计

一、逻辑分析 用户相关逻辑 用户注册与登录&#xff1a;用户需要注册账号才能参与积分商城拼团活动。注册过程中需收集必要信息&#xff0c;如用户名、密码、联系方式等。登录功能则用于验证用户身份&#xff0c;方便用户后续操作。用户积分管理&#xff1a;用户通过各种途径&a…

java 数据结构-HashMap

一、hashmap特点 1、HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。 2、HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。 3、HashMap 是无序的,即不会记录插入的顺序。 4、HashMa…

DBSyncer:一款开源的数据同步工具

DBSyncer&#xff08;简称 dbs&#xff09;是一款开源的实时数据同步中间件&#xff0c;提供 MySQL、Oracle、SQL Server、PostgreSQL、SQLite、Elasticsearch、Kafka、File、SQL 数据库等同步场景&#xff1b;支持上传插件自定义同步转换业务&#xff1b;提供监控全量和增量数…

大型语言模型的中毒攻击的系统评价

大家读完觉得有帮助记得及时关注和点赞&#xff01;&#xff01;&#xff01; 抽象 随着预训练大型语言模型 &#xff08;LLM&#xff09; 及其训练数据集的广泛使用&#xff0c;人们对与其使用相关的安全风险的担忧显著增加。 这些安全风险之一是 LLM 中毒攻击的威胁&#xff…

Windows 10更新失败解决方法

前言 在我们使用 Windows 时的时候&#xff0c;很多时候遇到系统更新 重启之后却一直提示“我们无法完成更新&#xff0c;正在撤销更改” 这种情况非常烦人&#xff0c;但其实可以通过修改文件的方法解决&#xff0c;并且正常更新到最新版操作系统 01修改注册表 管理员身份…

Redis高级|Redis单线程VS多线程(基础)

文章目录 面试题Redis为什么选择单线程为什么逐渐加入多线程特性Redis6、Redis7的多线程特性和IO多路复用入门Redis7多线程 面试题 Redis到底是单线程还是多线程&#xff1f;IO多路复用听说过吗&#xff1f;Redis为什么这么快&#xff1f; Redis为什么选择单线程 其实Redis单…

ONLYOFFICE 的AI技巧-1.集成OCR、文本转图像、电子表格集成等新功能

随着人工智能不断革新数字办公空间&#xff0c;我们通过全新的 ONLYOFFICE AI 插件再次实现突破。无论您是长期用户还是新手&#xff0c;这些更新都将让您的文档处理更加智能、直观且高效。让我们一起来了解这些最新增强功能——部分功能已在 ONLYOFFICE 文档 8.3.3 版本中上线…

Snipaste:一款简单强大的跨平台截图工具

给大家介绍一款我在日常写作中使用的截图工具&#xff1a;Snipaste 。它是一个支持截图&#xff08;Snip&#xff09;和贴图&#xff08;Paste&#xff09;功能的免费软件&#xff0c;支持 Windows、macOS、Linux 跨平台。 智能截图 Snipaste 提供了强大的截图功能&#xff0c…

python学习打卡day52

DAY 52 神经网络调参指南 知识点回顾&#xff1a; 随机种子内参的初始化神经网络调参指南 参数的分类调参的顺序各部分参数的调整心得 作业&#xff1a;对于day41的简单cnn&#xff0c;看看是否可以借助调参指南进一步提高精度。 day41的简单CNN最后的结果&#xff0c;今天要做…

自定义线程池 4.0

自定义线程池 4.0 1. 简介 上次我们实现了自定义线程池的 3.1 版本&#xff0c;提供了线程工厂创建线程和工具类创建简单线程池的功能&#xff0c;增强了线程池的灵活性&#xff0c;并且用起来更加方便了&#xff0c;本文我们将做如下的优化&#xff1a; 给线程池添加关闭的…

list is not in GROUPBY clause and contains nonaggregated column ‘*.*‘

SELECT list is not in GROUP BY clause and contains nonaggregated column mydb.t.address which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_modeonly_full_group_by 关于查询列不在分组字段内触发错误 之前我一直使用其…

Linux vmware image iso qcow2镜像大全

Download Linux VMware Images | Linux VMware Images

城市排水管网液位流量监测系统解决方案

一、方案背景 城市排水管网作为城市的“生命线”&#xff0c;其运行状况直接关系到城市的防洪排涝、水环境质量以及居民的生活质量。随着城市化进程的加速&#xff0c;城市排水管网规模不断扩大&#xff0c;结构日益复杂&#xff0c;传统的人工巡检和简单监测手段已难以满足对排…

算法学习笔记:3.广度优先搜索 (BFS)——二叉树的层序遍历

什么是广度优先搜索 (BFS)? 想象一下你在玩一个迷宫游戏&#xff0c;你需要找到从起点到终点的最短路径。广度优先搜索 (BFS) 就像是你在迷宫中逐层探索的过程&#xff1a; 先探索距离起点最近的所有位置然后探索距离起点第二近的所有位置以此类推&#xff0c;直到找到终点 …

并发编程-Synchronized

Mark Word 什么是Mark Word&#xff1f; Mark Word是Java对象头中的一个字段&#xff0c;它是一个32位或64位的字段&#xff08;取决于系统架构&#xff09;&#xff0c;用于存储对象的元数据信息。这些信息包括对象的哈希码、锁状态、年龄等。 Mark Word有什么用&#xff1f…

【51单片机】5. 矩阵键盘与矩阵键盘密码锁Demo

1. 矩阵键盘原理 通过矩阵连接的模式&#xff0c;原本需要16个引脚连接的按钮只需要8个引脚就能连接好&#xff0c;减少了I/O口的占用。 矩阵按钮是通过扫描来读取状态的。 2. 扫描的概念 输出扫描示例&#xff1a;数码管扫描 原理&#xff1a;显示第1位→显示第2位→显示第…