Qemu-STM32(十七):STM32F103加入AFIO控制器
概述
本文主要描述了在Qemu平台中,如何添加STM32F103的AFIO控制器模拟代码,AFIO是属于GPIO引脚复用配置的功能。
参考资料
STM32F1XX TRM手册,手册编号:RM0008
添加步骤
1、在hw/arm/Kconfig文件中添加STM32F1XX_AFIO,如下所示:
+号部分为新增加内容
diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig
index 2a66ff5f..c0edade0 100644
--- a/hw/arm/Kconfig
+++ b/hw/arm/Kconfig
@@ -419,6 +419,7 @@ config STM32F103_SOCselect STM32F1XX_FLASHselect STM32F1XX_USARTselect STM32F1XX_GPIO
+ select STM32F1XX_AFIO
2、在include/hw/arm/stm32f103_soc.h文件中添加
+号部分为新增加内容
diff --git a/include/hw/arm/stm32f103_soc.h b/include/hw/arm/stm32f103_soc.h
index c4c9bc52..ee015939 100644
--- a/include/hw/arm/stm32f103_soc.h
+++ b/include/hw/arm/stm32f103_soc.h
@@ -29,6 +29,7 @@#include "hw/misc/stm32f1xx_flash.h"#include "hw/char/stm32f1xx_usart.h"#include "hw/gpio/stm32f1xx_gpio.h"
+#include "hw/misc/stm32f1xx_afio.h"#define RCC_BASE_ADDR 0x40021000#define EXTI_BASE_ADDR 0x40010400
@@ -40,14 +41,16 @@#define UART2_BASE_ADDR 0x40004400#define UART3_BASE_ADDR 0x40004800+#define STM_AFIO_BASE 0x40010000#define TYPE_STM32F103_SOC "stm32f103-soc"#define STM32F103_SOC(obj) \
@@ -68,6 +71,7 @@ typedef struct STM32F103State {STM32F1XXFlashState flash;STM32F1XXUsartState usart[STM_NUM_USARTS];STM32F1XXGPIOState gpio[STM_NUM_GPIOS];
+ STM32F1XXAFIOState afio;} STM32F103State;
3、在hw/arm/stm32f103_soc.c文件中添加如下代码片段
+号部分为新增加内容
diff --git a/hw/arm/stm32f103_soc.c b/hw/arm/stm32f103_soc.c
index d673eace..f9f0c120 100644
--- a/hw/arm/stm32f103_soc.c
+++ b/hw/arm/stm32f103_soc.c
@@ -72,6 +72,9 @@ static void stm32f103_soc_initfn(Object *obj)sysbus_init_child_obj(obj, "flash", &s->flash, sizeof(s->flash),TYPE_STM32F1XX_FLASH);+ sysbus_init_child_obj(obj, "afio", &s->afio, sizeof(s->afio),
+ TYPE_STM32F1XX_AFIO);
+for (i = 0; i < STM_NUM_USARTS; i++) {object_initialize(&s->usart[i], sizeof(s->usart[i]), TYPE_STM32F1XX_USART);qdev_set_parent_bus(DEVICE(&s->usart[i]), sysbus_get_default());
@@ -167,6 +170,15 @@ static void stm32f103_soc_realize(DeviceState *dev_soc, Error **errp)busdev = SYS_BUS_DEVICE(dev);sysbus_mmio_map(busdev, 0, gpio_addr[i]);}
+ /* AFIO Controller */
+ dev = DEVICE(&s->afio);
+ object_property_set_bool(OBJECT(&s->afio), true, "realized", &err);
+ if (err != NULL) {
+ error_propagate(errp, err);
+ return;
+ }
+ busdev = SYS_BUS_DEVICE(dev);
+ sysbus_mmio_map(busdev, 0, STM_AFIO_MAPR2);}static Property stm32f103_soc_properties[] = {
4.在hw/misc/Kconfig中添加
diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig
index af2c8f8b..d140a18a 100644
--- a/hw/misc/Kconfig
+++ b/hw/misc/Kconfig
@@ -113,6 +113,9 @@ config STM32F1XX_PWRconfig STM32F1XX_FLASHbool+config STM32F1XX_AFIO
+ bool
+config STM32F2XX_SYSCFGbool
5.在hw/misc/Makefile.objs中添加
diff --git a/hw/misc/Makefile.objs b/hw/misc/Makefile.objs
index ec738e27..743d2b83 100644
--- a/hw/misc/Makefile.objs
+++ b/hw/misc/Makefile.objs
@@ -69,6 +69,7 @@ common-obj-$(CONFIG_STM32F1XX_RCC) += stm32f1xx_rcc.ocommon-obj-$(CONFIG_STM32F1XX_EXTI) += stm32f1xx_exti.ocommon-obj-$(CONFIG_STM32F1XX_PWR) += stm32f1xx_pwr.ocommon-obj-$(CONFIG_STM32F1XX_FLASH) += stm32f1xx_flash.o
+common-obj-$(CONFIG_STM32F1XX_AFIO) += stm32f1xx_afio.oobj-$(CONFIG_STM32F4XX_RCC) += stm32f4xx_rcc.oobj-$(CONFIG_STM32F4XX_PWR) += stm32f4xx_pwr.oobj-$(CONFIG_STM32F4XX_FLASH) += stm32f4xx_flash.o
6.在hw/misc/创建新文件hw/misc/stm32f1xx_afio.c
+/*
+ * Copyright (c) 2025 liang yan <yanl1229@163.com>
+ *
+ * STM32F1XX AFIO
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, see <http://www.gnu.org/licenses/>.
+ *
+ * Contributions after 2012-01-13 are licensed under the terms of the
+ * GNU GPL, version 2 or (at your option) any later version.
+ */
+#include "qemu/osdep.h"
+#include "qapi/error.h"
+#include "qemu/log.h"
+#include "hw/misc/stm32f1xx_afio.h"
+#include "hw/irq.h"
+#include "hw/qdev-properties.h"
+#include "migration/vmstate.h"
+#include "qemu/module.h"
+
+#ifndef STM_AFIO_ERR_DEBUG
+#define STM_AFIO_ERR_DEBUG 0
+#endif
+
+#define DB_PRINT_L(lvl, fmt, args...) do { \
+ if (STM_AFIO_ERR_DEBUG >= lvl) { \
+ qemu_log("%s: " fmt, __func__, ## args); \
+ } \
+} while (0);
+
+#define DB_PRINT(fmt, args...) DB_PRINT_L(1, fmt, ## args)
+
+static void stm32f1xx_afio_reset(DeviceState *dev)
+{
+ STM32F1XXAFIOState *s = STM32F1XX_AFIO(dev);
+ s->afio_evcr = 0x00000000;
+ s->afio_mapr = 0x00000000;
+ s->afio_exticr1 = 0x00000000;
+ s->afio_exticr2 = 0x00000000;
+ s->afio_exticr3 = 0x00000000;
+ s->afio_exticr4 = 0x00000000;
+ s->afio_mapr2 = 0x00000000;
+}
+
+static uint64_t stm32f1xx_afio_read(void *opaque, hwaddr addr,
+ unsigned int size)
+{
+ STM32F1XXAFIOState *s = opaque;
+ uint64_t retvalue = 0;
+
+ DB_PRINT("Address: 0x%" HWADDR_PRIx "\n", addr);
+ switch(addr) {
+ case STM_AFIO_EVCR:
+ retvalue = s->afio_evcr;
+ break;
+ case STM_AFIO_MAPR:
+ retvalue = s->afio_mapr;
+ break;
+ case STM_AFIO_EXTICR1:
+ retvalue = s->afio_exticr1;
+ break;
+ case STM_AFIO_EXTICR2:
+ retvalue = s->afio_exticr2;
+ break;
+ case STM_AFIO_EXTICR3:
+ retvalue = s->afio_exticr3;
+ break;
+ case STM_AFIO_EXTICR4:
+ retvalue = s->afio_exticr4;
+ break;
+ case STM_AFIO_MAPR2:
+ retvalue = s->afio_mapr2;
+ break;
+ default:
+ qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" HWADDR_PRIx "\n",
+ __func__, addr);
+ retvalue = 0;
+ break;
+ }
+ return retvalue;
+}
+
+static void stm32f1xx_afio_write(void *opaque, hwaddr addr,
+ uint64_t val64, unsigned int size)
+{
+ STM32F1XXAFIOState *s = opaque;
+ uint32_t value = val64;
+
+ DB_PRINT("Address: 0x%" HWADDR_PRIx ", Value: 0x%x\n", addr, value);
+ switch(addr) {
+ case STM_AFIO_EVCR:
+ s->afio_evcr = value;
+ break;
+ case STM_AFIO_MAPR:
+ s->afio_mapr = value;
+ break;
+ case STM_AFIO_EXTICR1:
+ s->afio_exticr1 = value;
+ break;
+ case STM_AFIO_EXTICR2:
+ s->afio_exticr2 = value;
+ break;
+ case STM_AFIO_EXTICR3:
+ s->afio_exticr3 = value;
+ break;
+ case STM_AFIO_EXTICR4:
+ s->afio_exticr4 = value;
+ break;
+ case STM_AFIO_MAPR2:
+ s->afio_mapr2 = value;
+ break;
+ default:
+ qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" HWADDR_PRIx "\n",
+ __func__, addr);
+ }
+}
+
+static const MemoryRegionOps stm32f1xx_afio_ops = {
+ .read = stm32f1xx_afio_read,
+ .write = stm32f1xx_afio_write,
+ .endianness = DEVICE_NATIVE_ENDIAN,
+};
+
+static const VMStateDescription vmstate_stm32f1xx_afio = {
+ .name = TYPE_STM32F1XX_AFIO,
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .fields = (VMStateField[]) {
+ VMSTATE_UINT32(afio_evcr, STM32F1XXAFIOState),
+ VMSTATE_UINT32(afio_mapr, STM32F1XXAFIOState),
+ VMSTATE_UINT32(afio_exticr1, STM32F1XXAFIOState),
+ VMSTATE_UINT32(afio_exticr2, STM32F1XXAFIOState),
+ VMSTATE_UINT32(afio_exticr3, STM32F1XXAFIOState),
+ VMSTATE_UINT32(afio_exticr4, STM32F1XXAFIOState),
+ VMSTATE_UINT32(afio_mapr2, STM32F1XXAFIOState),
+ VMSTATE_END_OF_LIST()
+ }
+};
+
+static void stm32f1xx_afio_init(Object *obj)
+{
+ STM32F1XXAFIOState *s = STM32F1XX_AFIO(obj);
+
+ memory_region_init_io(&s->mmio, obj, &stm32f1xx_afio_ops, s,
+ TYPE_STM32F1XX_AFIO, 0x400);
+ sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->mmio);
+
+ sysbus_init_irq(SYS_BUS_DEVICE(obj), &s->irq);
+}
+
+static void stm32f1xx_afio_class_init(ObjectClass *klass, void *data)
+{
+ DeviceClass *dc = DEVICE_CLASS(klass);
+
+ dc->reset = stm32f1xx_afio_reset;
+ dc->vmsd = &vmstate_stm32f1xx_afio;
+}
+
+static const TypeInfo stm32f1xx_afio_info = {
+ .name = TYPE_STM32F1XX_AFIO,
+ .parent = TYPE_SYS_BUS_DEVICE,
+ .instance_size = sizeof(STM32F1XXAFIOState),
+ .instance_init = stm32f1xx_afio_init,
+ .class_init = stm32f1xx_afio_class_init,
+};
+
+static void stm32f1xx_afio_register_types(void)
+{
+ type_register_static(&stm32f1xx_afio_info);
+}
+
+type_init(stm32f1xx_afio_register_types)
7.在include/hw/misc/创建stm32f1xx_afio.h文件
+/*
+ * Copyright (c) 2025- liang yan <yanl1229@163.com>
+ *
+ * STM32F1XX AFIO
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, see <http://www.gnu.org/licenses/>.
+ *
+ * Contributions after 2012-01-13 are licensed under the terms of the
+ * GNU GPL, version 2 or (at your option) any later version.
+ */
+#ifndef STM32F1XX_AFIO_H
+#define STM32F1XX_AFIO_H
+
+#include "hw/sysbus.h"
+
+#define STM_AFIO_EVCR 0x00
+#define STM_AFIO_MAPR 0x04
+#define STM_AFIO_EXTICR1 0x08
+#define STM_AFIO_EXTICR2 0x0c
+#define STM_AFIO_EXTICR3 0x10
+#define STM_AFIO_EXTICR4 0x14
+#define STM_AFIO_MAPR2 0x1c
+
+#define TYPE_STM32F1XX_AFIO "stm32f1xx-afio"
+#define STM32F1XX_AFIO(obj) \
+ OBJECT_CHECK(STM32F1XXAFIOState, (obj), TYPE_STM32F1XX_AFIO)
+
+typedef struct {
+ /* <private> */
+ SysBusDevice parent_obj;
+
+ /* <public> */
+ MemoryRegion mmio;
+
+ uint32_t afio_evcr;
+ uint32_t afio_mapr;
+ uint32_t afio_exticr1;
+ uint32_t afio_exticr2;
+ uint32_t afio_exticr3;
+ uint32_t afio_exticr4;
+ uint32_t afio_mapr2;
+
+
+ qemu_irq irq;
+
+} STM32F1XXAFIOState;
+
+#endif
总结
本文描述了如何在qemu中添加stm32f103平台上AFIO控制器实现步骤。
相关文章:
Qemu-STM32(十七):STM32F103加入AFIO控制器
概述 本文主要描述了在Qemu平台中,如何添加STM32F103的AFIO控制器模拟代码,AFIO是属于GPIO引脚复用配置的功能。 参考资料 STM32F1XX TRM手册,手册编号:RM0008 添加步骤 1、在hw/arm/Kconfig文件中添加STM32F1XX_AFIO&#x…...
刀客doc:小红书商业技术负责人苍响离职
根据大厂日爆的爆料,小红书商业化再度迎来高层人事变动,原商业平台技术负责人苍响(薯名),职级L2,已于本月正式离职,其下属团队现由电商业务负责人接管。 根据刀客doc获得的资料,苍响…...
CC52.【C++ Cont】滑动窗口
目录 1.题目 2.分析 方法1:暴力枚举 方法2:暴力枚举的优化:"同向双指针",也称滑动窗口 前置知识 核心操作 例子解释 代码 提交结果 1.题目 LCR 008. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target…...
linux中由于编译选项-D_OS64BIT导致的核心已转储问题
linux中由于编译选项-D_OS64BIT导致的核心已转储问题排查解决: 原因: a.so b.so a.so使用b.so 程序1 程序2 使用a.so 程序1运行正常,程序2启动后提示核心已转储。 程序1和程序2运行的代码都一致,只执行创建xApplication app&…...
Ubuntu搭建 Nginx以及Keepalived 实现 主备
目录 前言1. 基本知识2. Keepalived3. 脚本配置4. Nginx前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn Java基本知识: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRU…...
Knife4j 接口文档添加登录验证流程分析
Knife4j 接口文档添加登录验证流程是非常必要的,否则接口文档一旦暴露到外面是很危险的,今天我们详细分析一下。在1.9.6的版本时,作者把swagger-bootstrap-ui项目重命名为Knife4j,今天分析2.0.6版本。 1、pom.xml文件引入 <pa…...
C++之string
string 是C中常见的一个用于处理和操作字符串的类。一直有用它来存储字符串,今天来介绍介绍一下它的定义和一些基本用法吧。 1、头文件 #include <string>2、定义和初始化 #include <iostream> #include <string> using namespace std;int main…...
【含文档+PPT+源码】基于SSM的电影数据挖掘与分析可视化系统设计与实现
项目介绍 本课程演示的是一款基于SSM的电影数据挖掘与分析可视化系统设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本…...
DeepSeek提示词技巧
以下是使用Deepseek等AI工具时提升效果的提示词模式总结,涵盖核心规律、应用场景及效果对比: 规律一:结构化提示(解决模糊性问题) 问题:开放式问题导致回答笼统 模式:角色任务约束输出格式 例子…...
软考高项(信息系统项目管理师)第 4 版全章节核心考点解析(第4版课程精华版)
一、核心输入输出速记体系(力扬老师独家口诀) (一)规划阶段万能输入(4 要素) 口诀:章程计划,组织事业 ✅ 精准对应(ITTO 核心输入): 章程&#…...
【linux网络】网络基础概念
1. 初始协议 1.1 OSI 七层模型 OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范; 把网络从逻辑上分为了 7 层. 每一层都有相关、相对应的物理设备&a…...
【PyTorch动态计算图实战解析】从原理到高效开发
目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比二、实战演示环境配置要求核心代码实现案例1:梯度计算可视化案例2:动态控制流案例3:自定义反向传播运行结果验证三、性能对比测试方法论…...
【专题五】位运算(1):常见位运算操作总结
📝前言说明: 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法 本人屎山代码;(2)优质解法 优质代码;ÿ…...
react-native-vector-icons打包报错并且提示:copyReactNativeVectorIconFonts相关信息
使用react-native-vector-icons,打包时会报: FAILURE: Build failed with an exception. * What went wrong: Some problems were found with the configuration of task :app:copyReactNativeVec torIconFonts (type Copy).- Gradle detected a proble…...
【Sqlalchemy Model转换成Pydantic Model示例】
【Sqlalchemy Model转换成Pydantic Model示例】 由于Sqlalchemy和Pydantic的模型字段类型可能有差异, 所以需要一个通用的装换类 def sqlalchemy_to_pydantic_v2(sqlalchemy_model, pydantic_model):"""通用函数,将 SQLAlchemy 模型实例转换为 Pyd…...
探索语音增强中的多尺度时间频率卷积网络(TFCM):代码解析与概念介绍
探索语音增强中的多尺度时间频率卷积网络(TFCM):代码解析与概念介绍 在现代音频处理领域,语音增强技术始终是一个备受关注的研究热点。其主要目标是通过去除背景噪声、回声或其他混杂信号,提升语音通话或录音的质量。…...
私有知识库 Coco AI 实战(四):打造 ES 索引参数小助手
经过前面的实战,我们已经能够快速、准确的检索 ES 官方文档的内容了,但是还是要自己去阅读。既然 Coco AI 能与大模型交互,我们何不直接用大模型来阅读文档,回答我们的问题? 模型配置 我们进入 Coco AI 管理后台&…...
苍穹外卖心得体会
1 登录认证 技术点:JWT令牌技术(JSON Web Token) JWT(JSON Web Token)是一种令牌技术,主要由三部分组成:Header头部、Payload载荷和Signature签名。Header头部存储令牌的类型(如JW…...
Ubuntu上搭建python环境并安装第三方库
Ubuntu上搭建python环境并安装第三方库 更新系统包列表安装Python和pip验证安装创建并使用虚拟环境虚拟环境中安装第三方库编写并测试python脚本运行.py文件 使用Ubuntu 24.04搭建python环境并安装第三方库 更新系统包列表 sudo apt update安装Python和pip sudo apt install…...
redis高阶2 高性能
灵魂拷问: redis 为什么块? 纯内存访问单线程避免上下文切换渐进式ReHash , 缓存时间戳 Redis 的 key 和 value组织结构: 全局哈希表: 为了实现从键到值的快速访问。 redis 使用了一个哈希表 来保存所有键值对。一个哈希表 其实就…...
go编解码json和http请求
1.json概述 json是日常工作中http请求的最重要的数据格式。对比日常使用python中的json,获得http请求后json.loads和json.dumps函数,go中显的非常麻烦,这里结合json和http请求的总结下,便于积累和学习。这里给出一个json的类型&a…...
洛谷题解 | CF1979C Earning on Bets
目录 题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 说明/提示题目思路AC 代码 题目描述 You have been offered to play a game. In this game, there are $ n $ possible outcomes, and for each of them, you must bet a certain integer amount of coins. In th…...
在线文章系统自动化测试报告
目录 1. 项目简介 1.1. 用户登录页面 1.2. 文章列表页面 1.3. 文章详情页面 1.4. 文章编辑与发布页面 2. 测试计划 3. 测试环境/工具/技术栈 4. 编写自动化测试用例编辑 5. 自动化测试脚本开发 5.1. 项目整体结构 5.2. 配置utils.py 5.2.1. 导入必要的库 5.2.2.…...
C++ 类和对象(3)初始化列表、友元函数、内部类
文章目录 再谈构造函数构造函数体内赋值 初始化列表初始化列表特点 类型转换static成员static特点C11中成员初始化的新用法 友元友元函数友元函数特点 友元类友元类的特点 内部类内部类的特点 再谈构造函数 构造函数体内赋值 当我们创建对象时,编译器会调用构造函…...
CF4C Registration system(哈希实现)
解题思路:因为这道题在每次输入一个字符串后,都需要进行一次查找以判断是否需要按照规则生成新的用户名,故这道题使用STL容器map进行哈希是最合适的(map的查找时间复杂度为log n),在题目描述中,如果用户名已经被注册&a…...
DDI0487--A1.7
Introduction RAS(Reliability,Availability,Serviceability) RAS是衡量一个系统可靠性的三个方面: Reliability——持续提供正确服务的能力。 Availability——正确提供服务的准备状态。 Serviceability——能够进行修改和修复的能力。 R…...
MySQL事务(transaction)(笔记)
事务(Transaction)(必须掌握必须理解) 1.什么是事务? 一个事务是一个完整的业务逻辑单元(一个业务逻辑单元常常涉及到多条DML语句共同执行完成),不可再分(最小的工作单元) 一个事务就是一个业务,完成一个…...
ADS1299模拟前端(AFE)代替芯片——LHE7909
在现代医疗科技的飞速发展中,精确的生物电势测量设备变得越来越重要。领慧立芯推出的LHE7909,是一款专为心电图(ECG)和其他生物电势测量设计的低噪声24位模数转换器(ADC),为医疗设备制造商提供了…...
(三十二)Android开发中AppCompatActivity和Activity之间的详细区别
在 Android 开发中,AppCompatActivity 和 Activity 是两个核心类,用于创建和管理应用程序的用户界面。尽管它们功能上有重叠,但它们之间存在显著的区别。本文将详细讲解 AppCompatActivity 和 Activity 的区别,并结合代码示例和具…...
Neo4j 的 `SET n += $properties` 语法详解
Neo4j 的 SET n $properties 语法详解 SET n $properties 是 Neo4j Cypher 查询语言中的一个非常有用的语法,用于更新节点或关系的属性。让我详细解释它的含义和工作原理: 基本含义 SET:Cypher 中用于修改属性或标签的关键字n࿱…...
springboot 框架把 resources下的zip压缩包, springboot 项目启动后解压到项目根目录工具类
最近有一个需求,在开发的时候 有一些c的扩展文件 需要放到服务器上,如果手动放上去,给用户部署项目就很麻烦,就根据这个需求,先把项目需要的 扩展文件 打包成zip压缩包 然后项目启动的时候 把resources文件夹下的 zip压…...
指针(5)
1.sizeof 和 strlen 的对比 1.1sizeof sizeof 是操作符,sizeof 计算变量所占内存空间的大小,单位是字节,如果操作数是类型的话,计算的是使用类型创建的变量所占空间的大小。 sizeof 只关注占用内存的空间的大小,不在…...
机器学习day4-Knn+交叉验证api练习(预测facebook签到位置)
数据集:FackebookV : 预测 row id:签⼊事件的id x y:坐标 accuracy: 准确度,定位精度 time: 时间戳 place_id: 签到的位置,需要预测的内容 具体步骤: # 1.获取数据集 # 2.基本数据处理 # 2.1 缩⼩数据…...
AI工具 Trae 创建java项目和配置运行环境完整示例
以下是使用字节跳动 Trae IDE 创建 Java 项目并配置运行环境的完整示例,结合其核心功能和搜索结果的实践案例整理: 一、环境准备与安装 下载与安装 访问 Trae 官网 下载 Windows 或 macOS 版本客户端,安装完成后选择中文界面和主题(推荐 Dark/DeepBlue 主题)。首次启动时支…...
【论文_序列转换模型架构_20230802v7】Attention Is All You Need 【Transformer】
https://arxiv.org/abs/1706.03762 20170612 v1 代码实现_notebook ∗Equal contribution. Listing order is random. Jakob proposed replacing RNNs with self-attention and started the effort to evaluate this idea. 提出用 self-attention 替代 RNNs,并开始…...
清晰易懂的跨域请求知识——拿捏
1. 什么是跨域请求? 简单来说:当你的 前端网页(例如 http://frontend.com)通过 JavaScript 调用 后端接口(例如 http://backend.com/api)时,如果两者的 域名、端口、协议 中任意一项不同&#…...
前端漏洞不扫描理由
漏洞类型豁免理由基于DOM的XSS1.已实施安全加固: 使用encodeURIComponent对URL参数进行编码 对特殊字符(<>“”&)进行HTML实体转义 使用template literal替代字符串拼接 移除了直接操作DOM的不安全写法,二次扫描仍然扫描出来,且修改建议模糊 2…...
论文阅读的三个步骤
论文阅读的三个步骤 方法说明链接:https://www.academia.edu/4907403/How_to_Read_a_Paper 方法框架如下...
Javascript 中的继承?如何实现继承?
一、继承的本质 继承:子对象可以自动拥有父对象的属性和方法,就像孩子继承父母的基因。JavaScript 的继承:通过原型链实现(原型和原型链是底层核心)。 二、4 种常见继承方式 1. 原型链继承(传家宝模式&am…...
深入理解 Linux 权限管理:从基础到进阶
在 Linux 系统中,权限管理是保障系统安全与资源合理分配的核心机制。无论是服务器管理员,还是日常使用 Linux 的开发者,深入掌握权限管理,不仅能避免因权限设置不当导致的数据泄露或系统故障,还能灵活高效地管理各类资…...
第1阶段-前5天-考试题及答案
文章目录 1.1 用户 root 的家目录是哪里?1.2 如何查询 linux 系统 ip 地址?1.3 检查是否可以访问 baidu.com 的命令?1.4 [rootoldboy-c7 /etc/sysconfig/ ]# 说说每一部分含义?1.5 说说 Linux 常见快捷键?(至少 3 个)1.6 Windows 分为 C 盘,D 盘,但是 Linux 一切从 根或/ …...
农村供水智能化远程监控解决方案
农村供水智能化远程监控解决方案 ——基于巨控GRM242Q-4D4I4Q(HE)模块的快速部署方案 一、项目需求与痛点 某西南山区农村供水项目需管理12个分散站点,每个站点包含: 4-20mA模拟量:压力传感器、流量计485通信设备:智能水表&…...
4月29日星期二今日早报简报微语报早读
4月29日星期二,农历四月初二,早报#微语早读。 1、特朗普声称中方领导人打了电话,外交部:近期中美元首没有通话; 2、跳水世界杯总决赛名单出炉,“梦之队”全主力出战; 3、深圳:对年…...
C++日更八股--first
### 内存static和dynamic的区别 static(静态) 和 dynamic(动态)<br> static:内存分配在编译的时候确定,大小和生命周期固定,无需运行时分配开销<br> dynamic:内存分配在运行时动态申请…...
Git操作指令
1.基础操作指令: (1).查看修改的状态(git status): 查看修改的状态(暂存区、工作区) (2).添加工作区到暂存区(git add 单个文件名 | 通配符): 添加工作区一个或多个文件的修改到暂存区 (3).提交暂存区到本地仓库(git commit -m "注释内容"): 提交暂存区内容到本…...
Linux——安装NVM
1. 安装命令 官方地址:https://github.com/nvm-sh/nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash2. 安装完成后执行命令 source ~/.bashrc3. 验证 nvm -v...
C++之AVL树
前言 一、AVL的概念 二、AVL树的实现 2.1 AVL的结点结构 2.2 AVL树结点的插入 平衡因子的更新 更新原则: 更新停止的条件: 插入结点以及更新平衡因子的代码实现 旋转 右单旋 左单旋 左右双旋 右左双旋 2.3 AVL树的查找 2.4 AVL树的平衡性检测 总结 前言 …...
解决STM32H743单片机USB_HOST+FATF操作usb文件
前缀 花了两天的时间整理了一下在使用STM32H743单片机开发usb相关功能时遇到的问题及解决方案,具体为以下2种情况: 1.USB插上单片机后,单片机卡死,导致长时间没有喂狗程序重启; 2.USB正常插拔后,使用FAT…...
数据结构|并查集
Hello !朋友们,这是我在学习过程中梳理的笔记,以作以后复习回顾,有时略有潦草,一些话是我用自己的话描述的,可能不够准确,还是感谢大家的阅读! 目录 一、并查集Quickfind 二、两种算…...
从拒绝采样到强化学习,大语言模型推理极简新路径!
大语言模型(LLMs)的推理能力是当下研究热点,强化学习在其复杂推理任务微调中广泛应用。这篇论文深入剖析了相关算法,发现简单的拒绝采样基线方法表现惊人,还提出了新算法。快来一探究竟,看看这些发现如何颠…...