STM32F103_HAL库+寄存器学习笔记19 - CAN发送中断+CAN接收中断+接收所有CAN报文+ringbuffer数据结构
导言
完成本章节的学习后,CAN驱动代码已经具备实战项目的大部分功能,完全可以在工作上使用:
- CAN发送有串行与中断方式,且三个发送邮箱都使用了;
- CAN接收用FIFO1的三个邮箱与高效的数据结构ringbuffer。另外,还有接收FIFO1的溢出监控。
如上所示,本章节的目的是在《[[STM32F103_HAL库+寄存器学习笔记17 - CAN中断接收 + 接收CAN总线所有报文]]》的基础上增加强大的数据结构ringbuffer。ringbuffer是嵌入式MCU开发必须掌握的数据结构。优点如下:
- 缩短中断处理时间
在中断服务程序(ISR)中,只需要尽快把接收到的数据存入ringbuffer,然后立即退出中断。这样可以保证中断处理时间尽可能短,降低对系统其他高优先级任务的影响。短时间的中断处理对实时性要求较高的系统尤为重要。 - 解耦中断与数据处理
将数据先存入ringbuffer,可以把数据处理工作从中断上下文中剥离出来,在主循环或者专门的任务中再进行数据解析和处理。这种方式降低了中断内执行复杂计算或处理逻辑时对整个系统实时响应的负面影响。 - 缓冲突发数据
在CAN总线上,当有数据突发或短时间内大量数据到达时,ringbuffer能够临时缓存这些数据,避免中断处理时间不足导致数据丢失。即使主循环在短时段内处理不过来,ringbuffer可以起到缓冲作用,从而增强系统的鲁棒性。 - 保证数据顺序
环形缓冲区本质上是先进先出的(FIFO)结构,能够保持接收到的数据顺序一致性。这对于需要按照接收顺序依次处理的数据帧来说非常重要。 - 提高系统整体效率与可维护性
将数据接收和数据处理分离后,系统各部分的功能更加模块化,便于后续维护与扩展。中断函数只负责数据的快速存储,而数据处理模块可以采用更灵活的调度机制进行处理和响应。 - 防止中断嵌套和竞态条件
使用ringbuffer还可以降低在中断中长时间占用处理资源带来的潜在问题,如中断嵌套或与其他共享资源的竞态问题。只需注意在操作ringbuffer时进行合适的同步(如临界区保护、原子操作等),以确保数据一致性。
总之,在CAN接收中断中采用ringbuffer设计能够提高系统的实时性、稳定性以及灵活性,既减少了中断处理时间,又能有效管理和处理突发数据,从而为整个系统构建一个高效可靠的数据处理链路。
如上所示,本章节的实验结果是CAN分析仪将CAN报文发送到CAN总线上,接着,STM32F103接收到CAN总线上的CAN报文后,立即将CAN报文发送到CAN总线上。随后,CAN分析仪能收到刚才发送出去的CAN报文。
程序的效果如下:
如上所示,CAN分析仪一共发送5个CAN报文,ID从0x201~0x205。接着,STM32F103将5个CAN报文返回。
项目地址:
github:
- HAL库:https://github.com/q164129345/MCU_Develop/tree/main/stm32f103_hal_library19_Can_Rec_With_RB
- 寄存器方式:https://github.com/q164129345/MCU_Develop/tree/main/stm32f103_ll_library19_Can_Rec_With_RB
gitee(国内)
- HAL库:https://gitee.com/wallace89/MCU_Develop/tree/main/stm32f103_hal_library19_Can_Rec_With_RB
- 寄存器方式:https://gitee.com/wallace89/MCU_Develop/tree/main/stm32f103_ll_library19_Can_Rec_With_RB
一、开源ringbuffer - LwRB
1.1、简单介绍
官方:https://docs.majerle.eu/projects/lwrb/en/latest/index.html
如上所示,LwRB的功能很齐全。一般,新手应该先从怎样放入消息与怎样取出消息先开始。
二、代码(HAL库)
2.1、myCanDrive.c
如上两图所示,完成ringbuffer的初始化准备工作。另外,为什么sizeof(g_CanRxRBDataBuffer) + 1
? 不是直接sizeof(g_CanRxRBDataBuffer)
?? 参考后面的内容: [[#5.1、为什么lwbr_init()的第三个入口参数要额外+1?]]
如上所示,当接收到新的CAN报文时,需要:
- 先检查ringbuffer能不能装下最新的CAN报文(有可能主循环处理较慢,导致CAN报文“消化”比较慢);
- ringbuffer装不下最新的CAN报文的话,我一般的做法是清除全局旧的数据。或者,可以用
lwrb_read()
函数读一个包的内容出来丢掉,相当于腾出一个位置给最新的CAN报文; - 最后,将最新的CAN报文放入ringbuffer。
2.2、main.c
如上所示,每隔50ms调用函数CAN_Send_CANMsg_FromRingBuffer()
一次,将ringbuffer里的CAN报文发送出去。
2.3、编译代码
如上所示,代码编译成功。
如上所示,从.map文件看到寄存器程序占用ROM = 5.23KB,占用RAM = 2.86KB。
2.4、debug调试
如上所示,CAN分析仪发送50条CAN报文到CAN总线上,STM32F103一共收到50条CAN报文,并将50条CAN报文发回给CAN分析仪。
三、代码(寄存器方式)
3.1、myCanDrive_reg.c
如上所示,在函数CAN_Config()
里调用lwrb_init()
完成ringbuffer的初始化。
3.2、main.c
3.3、编译代码
编译成功,0错误0警告。
如上所示,从.map文件看到寄存器程序占用ROM = 3.54KB,占用RAM = 2.81KB。
对应的HAL库占用ROM = 5.23KB,RAM = 2.86KB。
3.4、debug调试
如上所示,使用CAN分析仪发送50个CAN报文到CAN总线上,CANID:0x201 ~ 0x232。从全局变量g_RxCount看到,STM32F103收到50个CAN报文,并将所有CAN报文返回给CAN分析仪。
五、细节补充
5.1、为什么lwrb_init()的第三个入口参数要额外+1?
如上所示,先来看源码lwrb.c里第66行的注释"Maximum number of bytes buffer can hold is ‘size - 1’ ",中文意思大概是ringbuffer只能存size - 1个字节,最后一个字节不能用!接下来,实际测试看看。
如上所示,将数组g_CanRxRBDataBuffer的大小从50改为3,目的是方便实验。
如上所示,ringbuffer能接收到第三条CAN报文的最后一个字节,没有丢失数据!!接下来,删除+1试试。
如上所示,ringbuffer初始化函数lwrb_init()里的第三个入口参数从sizeof(g_CanRxRBDataBuffer) + 1
改为sizeof(g_CanRxRBDataBuffer)
。试试效果怎样。
如上所示,ringbuffer丢失了第三条CAN报文的最后一个字节0x08。丢失数据了!!至于作者为什么这样设计,肯定是有原因的。
## 5.2、lwrb库ringbuffer的总缓存大小为size - 1 在设计环形缓冲区(ring buffer)时,通常会选择只使用总缓存区大小的size−1 个字节,这样的设计主要是为了避免在区分“空”和“满”状态时出现歧义。下面详细说明这种设计思路以及它的优点。
- 解决空满状态歧义
状态描述
- 空状态:当读指针(r_ptr)和写指针(w_ptr)相等时,我们希望判断缓冲区为空。
- 满状态:如果允许使用所有的 size 个字节,那么当写指针追上读指针时(即两者相等)就会有两种可能:
- 缓冲区为空(刚开始写入,读写指针都指向同一位置)。
- 缓冲区已经满了(写入的数据已填满整个缓冲区,但由于写指针环绕导致与读指针重合)。
预留一个字节的好处
通过只使用 size−1 个字节来保存数据,可以采用如下约定:
- 当 w_ptr == r_ptr 时,表示缓冲区为空。
- 当 (w_ptr + 1) % size == r_ptr 时,表示缓冲区已满。
这种做法使得区分“空”和“满”状态不再需要额外的标记或计数变量,从而简化了逻辑和实现,也更容易保证代码的线程安全性和鲁棒性。
- 简化状态计算及实现逻辑
- 简单的可用空间计算:在函数
lwrb_get_free()
中,通过计算size - 1 - (已使用字节数)来获得空闲空间。若允许使用全部size个字节,就需要额外判断是否存在一个“满”的标志,这会增加实现的复杂度。 - 无需额外状态变量:如果不预留一个字节,就需要额外的布尔标记或计数器来区分缓冲区是空还是满。预留一个字节的方式简化了代码,同时也降低了出错的风险。
- 实现上的一致性:使用固定的策略(始终预留一个字节),使得所有操作(写入、读取、跳过等)在处理指针环绕问题时的一致性更好,不容易出现边界条件问题。
总之,预留一个字节来存储 size−1 个有效数据的设计是环形缓冲区的常见实现方式,主要原因在于:
- 避免读写指针重合导致的空满状态歧义。
- 简化缓冲区状态的计算逻辑,不需要额外的标记变量。
- 提升代码的健壮性和易维护性。
这种设计在实际的嵌入式系统中尤为常见,因为它保证了在高性能、资源受限的环境下,数据管理逻辑能够保持简单而高效。
相关文章:
STM32F103_HAL库+寄存器学习笔记19 - CAN发送中断+CAN接收中断+接收所有CAN报文+ringbuffer数据结构
导言 完成本章节的学习后,CAN驱动代码已经具备实战项目的大部分功能,完全可以在工作上使用: CAN发送有串行与中断方式,且三个发送邮箱都使用了;CAN接收用FIFO1的三个邮箱与高效的数据结构ringbuffer。另外,还有接收FI…...
【 Git 全局忽略文件完全指南:配置、规则与最佳实践】
Git 全局忽略文件完全指南:配置、规则与最佳实践 前言 在软件开发过程中,我们经常遇到一些不需要被版本控制系统追踪的文件,例如IDE配置文件、编译生成的中间文件、日志文件等。虽然可以在每个项目中创建.gitignore文件,但对于开…...
RabbitMQ常见面试题回答重点
文章目录 什么是消息队列?为什么需要消息队列消息队列的模型消息队列常见名词如何保证消息不丢失?(可靠性)如何保证消息不重复/业务幂等性如何保证消息有序性如何处理消息堆积消息队列设计为推送还是拉取 / 推拉模式优点无法路由的…...
一文详解opencv-python环境搭建:Mac配置python的cv2开发环境
在计算机视觉领域,OpenCV 作为跨平台的计算机视觉和机器学习软件库,凭借其丰富的功能和稳定的性能,已成为开发者的重要工具之一。而 Python 语言因其简洁的语法和强大的科学计算生态,成为许多开发者调用 OpenCV 功能的首选语言组合…...
Unity打开项目时目标平台被改变
2021年1月20日18:20:32 现象: 我的项目已经是切换到目标平台为Android的项目,每天工作过程中会多次打开关闭该项目,但是总有偶然的几率,会出现打开项目以后,目标平台自动被切换为Windows,然后就开始忙碌于…...
Python 写一个带参数的EXE函数
Python写一个带参数的函数,压成EXE import argparse import time import sysdef main():# 创建参数解析器parser argparse.ArgumentParser(description"命令行参数示例程序")# 添加指定的参数parser.add_argument("-subitem", typestr, requi…...
4月21日星期一今日早报简报微语报早读
4月21日星期一,农历三月廿四,早报#微语早读。 1、女子伸腿阻止列车关门等待同行人员,被深圳铁路警方行政拘留; 2、北理工再通报:开除宫某党籍,免去行政职务,解除聘用关系; 3、澳门…...
2025年最新服务器、中间件安全(面试题)
活动发起人小虚竹 想对你说: 这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!…...
《FDTD Solutions仿真全面教程:超构表面与光束操控的前沿探索》
FDTD基础入门FDTD基础入门 1、FDTD Solutions 求解物理问题的方法 1.1 FDTD与麦克斯韦方程 1.2 FDTD中的网格化 2、FDTD Solutions 特点与应用 3、FDTD功能与使用主窗口——CAD人机交互界面 计算机辅助设计(CAD)模拟编辑器:主标题栏、工具条、实体对象树…...
AI时代,是该切换到Cursor编辑器了
Cursor 使用指南:从入门到高效编程 一、Cursor 简介 Cursor 是一款基于人工智能技术的先进代码编辑器,它致力于为开发者打造更高效、智能的编程环境。通过集成前沿的自然语言处理(NLP)和代码生成技术,Cursor 能够精准…...
在 UE5 编辑器中,由于游戏设置 -> EV100 设置,点击播放前后的光照不同。如何保持点击播放前后的光照一致?
In Unreal Engine 5 (UE5), discrepancies in lighting between the editor and play modes are often due to auto exposure settings, particularly when using the EV100 system. To maintain consistent lighting across both modes, follow these steps:YouTube1Epic …...
【Linux网络编程十】网络原理之IP协议【网络层】
网络原理之IP协议【网络层】 1.理解IP协议2.IP报文2.1分片问题 3.路由器3.1路由问题 4.网络划分5.私有ip与公有ip6.理解运营商与全球网络7.NAT技术7.1NAPT 1.理解IP协议 IP协议的本质工作:提供一种能将数据跨网络从A主机送到B主机的能力。 而用户需要的是能够可靠的…...
C++23 让 Lambda 表达式中的 () 更可选:P1102R2 提案深度解析
文章目录 一、背景与动机:Lambda 表达式中的痛点1.1 问题的根源 二、P1102R2 提案:让 () 可选2.1 提案的核心内容2.2 语法调整的细节2.3 提案的合理性 三、编译器支持:主流编译器的跟进四、对 C 编程的影响:简化语法与提升一致性4…...
国产AI新突破!全球首款无限时长电影生成模型SkyReels-V2开源:AI视频进入长镜头时代!
在 AI 技术日新月异的今天,我们再次见证了历史性的突破。 昆仑万维 SkyReels 团队于近日正式发布了全球首款支持无限时长的电影生成模型——SkyReels-V2,并免费开源。这无疑为 AI 视频领域掀开了崭新的一页,标志着 AI 视频正式迈入长镜头时代…...
如何以特殊工艺攻克超薄电路板制造难题?
一、超薄PCB的行业定义与核心挑战 超薄PCB通常指厚度低于1.0毫米的电路板,而高端产品可进一步压缩至0.4毫米甚至0.2毫米以下。这类电路板因体积小、重量轻、热传导性能优异,被广泛应用于折叠屏手机、智能穿戴设备、医疗植入器械及新能源汽车等领域。然而…...
VScode-py环境
settings.json {"git.ignoreLimitWarning": true,"code-runner.runInTerminal": true,"code-runner.executorMap": {"python": "python3"} } 第二句话保证在终端里面进行IO 第三句话保证python3的用户不会执行python关键…...
4.21 从0开始配置spark-local模式
首先准备好安装包 然后使用命令解压 使用source /etc/profile命令让环境变量生效 输入命令 spark-submit --class org.apache.spark.examples.SparkPi --master local[2] /opt/module/spark-local/examples/jars/spark-examples_2.12-3.1.1.jar 10 即在spark运行了第一个程序…...
git详解
目录 常用命令速查 一、Git 的概念与作用 二、Git 仓库(Repository) 1. 本地仓库 2. 远程仓库 三、Git 的三个核心区域 1. 工作区(Working Directory) 2. 暂存区(Staging Area / Index) 3. 版本库…...
I/O复用函数的使用——select
I/O复用函数的使用——select 目录 一、概念 二、select接口 2.1 基础概念 2.2 使用 select 函数的标准输入读取代码 2.3 基于 select 模型的多客户端 TCP 服务器实现 一、概念 i/o复用使得程序能同时监听多个文件描述符,可以提高程序性能。 之前为了让服务器能…...
LangChain与图数据库Neo4j LLMGraphTransformer融合:医疗辅助诊断、金融风控领域垂直领域、法律咨询场景问答系统的技术实践
LangChain与图数据库融合:垂直领域问答系统的技术实践 一、技术背景与核心价值 在垂直领域(如金融、医疗、法律)的问答场景中,传统RAG系统常面临实体关系推理不足和专业术语理解偏差的痛点。LangChain通过集成图数据库与知识图谱…...
Trae国际版的下载与简单使用示例(免费使用Claude,GPT4.1等多个高级模型)
文章目录 Trae的下载与使用什么是Trae重要亮点Trae的核心功能主要特点 安装指南下载步骤系统要求安装步骤 基础操作代码补全代码生成代码解释 高级功能自定义设置 总结参考资料 Trae的下载与使用 什么是Trae Trae是一款先进的AI编程助手工具,专为开发者打造。它集…...
Python 金融量化分析
文章目录 1. IPython:交互式的 Python 命令行安装常用操作IPython Notebook 2. NumPy:数据计算模块主要功能安装与导入创建 ndarrayndarray 的常用属性示例代码常用创建函数示例代码 3. NumPy 索引和切片数组运算数组索引和切片布尔型索引花式索引通用函…...
Linux:进程:进程控制
进程创建 在Linux中我们使用fork函数创建新进程: fork函数 fork函数是Linux中的一个系统调用,用于创建一个新的进程,创建的新进程是原来进程的子进程 返回值:如果子进程创建失败,返回值是-1。如果子进程创建成功&a…...
量子计算在金融领域的应用与展望
在当今数字化时代,金融行业正面临着前所未有的技术变革。量子计算作为前沿科技领域的明珠,正在逐渐从实验室走向实际应用,为金融行业带来新的机遇和挑战。本文将探讨量子计算在金融领域的应用现状、优势以及未来的发展展望。 一、量子计算简介…...
StarRocks:一款开源的高性能分析型数据仓库
StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、CBO(基于成本优化)、智能物化视图、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。 StarRocks 是一个 Linux 基金会开源项目,采用 Apache 2.0 许…...
NLP高频面试题(四十九)大模型RAG常见面试题解析
为什么要构建RAG系统? RAG系统通过结合信息检索和生成模型,解决了LLM在知识更新、幻觉和上下文限制等方面的挑战。它允许模型在生成响应前引用外部知识库,提高答案的准确性和相关性。 RAG与大模型微调的区别? 项目RAG系统大模型微调知识更新通过更新外部知识库实现需要重…...
【NLP 68、R-BERT】
为什么划掉你的名字,为什么不敢与你对视 —— 25.4.21 一、R-BERT:基于BERT的关系抽取模型 R-BERT(Relation BERT)是一种用于关系抽取(Relation Extraction)任务的模型,它结合了预训练语言模型…...
Java:多线程
多线程 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。 并发和并行 并发:在同一时刻,有多个指令在单个CPU上交替执行 并行:在同一时刻,有多个指令在多个CPU上同时执行 …...
第一章:自然语言处理
目录 1.1 自然语言处理发展史 1.2 统计语言模型发展史 统计语言模型 NNLM 模型 Word2Vec 模型 ELMo 模型 BERT 模型 大语言模型 1.3 小结 自然语言处理(Natural Language Processing,NLP)是一门借助计算机技术研究人类语言的科学。虽…...
Git 大文件使用 Git-LFS 管理,推送失败
配置了.gitattributes文件后, *.jar filterlfs difflfs mergelfs -text *.so filterlfs difflfs mergelfs -text *.aar filterlfs difflfs mergelfs -text *.bin filterlfs difflfs mergelfs -text *.a filterlfs difflfs mergelfs -text 仍然推送失败 POST git-…...
[c语言日寄]免费文档生成器——Doxygen在c语言程序中的使用
【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是…...
RK3588上编译opencv 及基于c++实现图像的读入
参考博文: https://blog.csdn.net/qq_47432746/article/details/147203889 一、安装依赖包 sudo apt install build-essential cmake git pkg-config libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libjpe…...
C++ GPU并行计算开发实战:利用CUDA/OpenCL加速粒子系统与流体模拟
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开…...
Java 设计模式心法之第3篇 - 总纲:三大流派与导航地图
前两章,我们修炼了 SOLID 这套强大的“内功心法”,为构建高质量软件打下了坚实根基。现在,是时候鸟瞰整个设计模式的“武林”了!本文将为您展开一幅由 GoF 四人帮精心绘制的 23 种经典设计模式的“全景导航地图”。我们将探索这些…...
高级java每日一道面试题-2025年4月19日-微服务篇[Nacos篇]-Nacos未来的发展方向和规划有哪些?
如果有遗漏,评论区告诉我进行补充 面试官: Nacos未来的发展方向和规划有哪些? 我回答: Nacos 作为阿里巴巴开源的服务发现、配置管理和服务治理平台,其未来的发展方向和规划主要体现在以下几个关键领域: 1. 安全性与标准化 API分类精细化…...
跳过reCAPTCHA验证的技术解析与优化实践
Google的reCAPTCHA验证系统已成为保护网站安全的核心工具之一。然而,频繁的验证弹窗可能降低用户体验,甚至导致用户流失。如何在遵守平台规则的前提下,通过技术优化与用户行为管理减少验证触发率,成为我们亟需解决的难题。 但需要…...
idea使用docker插件一键部署项目
一、首先保证我们电脑上已经安装了docker docker -v查看docker版本,如果不能识别,需要先下载docker destop,在官网下载正常安装即可。 安装成功就可以使用docker 命令了 二、idea下载docker插件并配置docker参数 我是通过tcp连接docker服务…...
强化学习笔记(三)——表格型方法(蒙特卡洛、时序差分)
强化学习笔记(三)——表格型方法(蒙特卡洛、时序差分) 一、马尔可夫决策过程二、Q表格三、免模型预测1. 蒙特卡洛策略评估1) 动态规划方法和蒙特卡洛方法的差异 2. 时序差分2.1 时序差分误差2.2 时序差分方法的推广 3. 自举与采样…...
[SpringMVC]请求响应参数传递
controller前置url解决业务重名 在项目中,常常会碰到不同的业务之间的某个方法同名的情况。例如在一个文档管理系统(有着文档和发布者两个实体)中,两个实体都有着 "add" 业务。如果两个实体相关的业务url都用 "/ad…...
在C++业务类和QML之间创建一个数据桥梁
工作中经常会遇到两种业务直接按无法直接沟通,此时需要建立一个桥梁将两者进行联系起来,假设一个C业务类,有一个QML UI, 如果将BridgeClass 类通过qmlRegisterType 注册到QML中,在C中如何能够调用到BridgeClass 对象吗…...
超详细mac上用nvm安装node环境,配置npm
一、安装NVM 打开终端,运行以下命令来安装NVM: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash 然后就会出现如下代码: > Profile not found. Tried ~/.bashrc, ~/.bash_profile, ~/.zprofile, ~/.…...
MH2103系列coremark1.0跑分数据和优化,及基于arm2d的优化应用
CoreMark 1.0 介绍 CoreMark 是由 EEMBC(Embedded Microprocessor Benchmark Consortium)组织于 2009 年推出的一款用于衡量嵌入式系统 CPU 或 MCU 性能的标准基准测试工具。它旨在替代陈旧的 Dhrystone 标准(Dhrystone 容易受到各种libc不同…...
YOLO11改进 | 特征融合Neck篇之Lowlevel Feature Alignment机制:多尺度检测的革新性突破
## 为什么需要重新设计特征融合机制? 在目标检测领域,YOLO系列模型因其高效的实时性成为工业界和学术界的标杆。然而,随着应用场景的复杂化(如自动驾驶中的多尺度目标、无人机图像中的小物体检测),传统特征融合策略的局限性逐渐暴露:**特征对齐不足导致语义信息错位、多…...
解决方案:远程shell连不上Ubuntu服务器
服务器是可以通过VNC登录,排除了是服务器本身故障 检查服务是否在全网卡监听 sudo ss -tlnp | grep sshd确保有一行类似 LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid...,fd3))返回无结果,表明系统里并没有任…...
Flutter路由模块化管理方案
总结记录一下Flutter路由模块管理: 1、创建路由基类 abstract class BaseRouteConfig {Map<String, WidgetBuilder> get routes; } 2、创建不同模块的路由配置类 // 认证模块路由 class AuthRoutes extends BaseRouteConfig {overrideMap<String, Widg…...
Java BIO、NIO、AIO、Netty面试题(已整理全套PDF版本)
什么是IO Java中的I/O(输入/输出)机制基于流(Stream)的概念实现数据的传输。流将数据序列化,即按照特定顺序逐次进行读写操作。简而言之,Java程序通过I/O流与外部设备进行数据交换。 Java类库中的I/O功能十…...
TapData × 梦加速计划 | 与 AI 共舞,TapData 携 AI Ready 实时数据平台亮相加速营,企业数据基础设施现代化
在实时跃动的数据节拍中,TapData 与 AI 共舞,踏出智能未来的新一步。 4月10日,由前海产业发展集团、深圳市前海梦工场、斑马星球科创加速平台等联合发起的「梦加速计划下一位独角兽营」正式启航。 本次加速营以“打造下一位独角兽企业”为目…...
一键部署k8s之EFK日志收集系统
一、部署es 1.下载安装 #下载安装 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.13.2-linux-x86_64.tar.gz #解压 [rootes software]# tar xf elasticsearch-8.13.2-linux-x86_64.tar.gz #创建运行elasticsearch服务用户并修改权限 [rootes softw…...
Python常用的第三方模块【openpyxl库】读写Excel文件
openpyxl库模块是用于处理Microsoft Excel文件的第三方库,可以对Excel文件中的数据进行写入和读取。 weather.pyimport reimport requests#定义函数 def get_html():urlhttps://www.weather.com.cn/weather1d/101210101.shtml #爬虫打开浏览器上的网页resprequests.…...
加油站小程序实战教程12显示会员信息
目录 1 布局搭建1.1 搭建头像1.2 显示会员等级1.3 余额显示 最终效果 我们上一篇介绍了会员注册的功能,会员注册后再次进入页面的时候就可以根据openid加载会员信息,本篇我们介绍一下显示会员的余额 1 布局搭建 我们现在在我的页面显示的是会员未开通…...