【动手学电机驱动】STM32-MBD(2)将 Simulink 模型部署到 STM32G431 开发板
STM32-MBD(1)安装 STM32 硬件支持包
STM32-MBD(2)Simulink 模型部署入门
STM32-MBD(3)Simulink 状态机模型部署
【动手学电机驱动】STM32-MBD(2)Simulink 模型部署入门
- 1. 软硬件条件和环境测试
- 1.1 软硬件条件
- 1.2 开发环境测试
- 2. 创建基于 STM32 处理器的 Simulink 工程
- 2.1 创建 STM32CubeMX 工程
- 2.2 创建 Simulink 仿真模型
- 2.3 在 STM32CubeMX 中配置外设
- 3. Simulink 模型仿真
- 4. 从 Simulink 模型生成代码并加载到 STM32 硬件板
通过安装MATLAB 硬件支持包,可以将 STM32 微处理器与 MATLAB/Simulink 结合使用,让开发者可以直接在MATLAB环境中进行嵌入式系统的设计和调试。
本节详细介绍将 Simulink 模型部署到基于 STM32 处理器的硬件板上,并进行调试和运行。我们的第一个 STM32-MBD 实验采用 NUCLEO-G431RB 开发板, 以 LED 点灯实验为例,使用 Matlab/Simulink 建模仿真后直接生成 STM32 项目工程代码。
1. 软硬件条件和环境测试
Simulink/STM32 代码生成对于软硬件和开发环境的要求非常严格,很容易由于版本不匹配或路径错误而失败。作者已经踩过了很多的坑,可以说是我在所有开发项目中都从未经历过的。
【动手学电机驱动】STM32-MBD(1)安装 STM32 硬件支持包详细介绍了所需的软硬件条件和安装过程,请严格按照文中介绍的步骤安装和配置。强烈建议首先严格使用推荐版本跑通本文项目。
为了帮助大家确定 Simulink/STM32 代码生成 的开发环境安装配置成功,我们首先要逐项进行检查测试。
1.1 软硬件条件
必需的硬件:
- STM32 开发板(如:NUCLEO-G431RB 开发板,也可以选择其它 STM32 开发板,但需要安装对应的固件包)。
- Micro-micro USB 数据线,或 USB Type-A 至 Micro-B 连接线缆,用于将STM32 Nucleo 板连接到 PC。
必需的软件:
-
STM32 开发工具(建议首先严格使用推荐版本跑通本文项目)
- STM32CubeMX (推荐使用 V6.4.0)
- STM32CubeProgrammer (推荐使用 V2.6.0)
- STM32CubeIDE(或 Keil,MDK-ARM 等 IDE 工具)
- STM32Cube_FW_G4 固件包(推荐采用 V1.5.0)
如果使用其它 STM32 MCU,则需选择对应的固件包。例如使用 STM32F4 时则要选择STM32Cube_FW_F4_V1.26.0 固件包。
-
MATLAB/Simulink(本文使用 MATLAB R2022b,可以采用更新版本)
- Simulink Coder:从 Simulink 模型、Stateflow 图和 MATLAB 函数生成并执行 C 和 C++ 代码,用于实时和非实时应用,包括仿真加速、快速原型构建和硬件在环测试
- STM32 嵌入式硬件支持包,Embedded Coder Support Package for STMicroelectronics STM32 Processors,STM32 处理器的嵌入式硬件支持包
1.2 开发环境测试
-
运行 STM32CubeMX,菜单选择 Help–About,检查版本为 V6.4.0。
-
在 STM32CubeMX 菜单选择 Help–Manage embedded software packages,在弹出窗口中展开 STM32G4,检查 STM32Cube MCU Package for STM32G4 Series V1.5.0 固件包已安装。选项框为绿色表示安装成功,如下图所示。
-
运行 STM32CubeProgrammer,并测试与 STM32 开发板的连接。
(1)通过 ST-Link 将 STM32 微控制器与计算机连接:用 USB 连接线连接 PC 与 NUCLEO-G431RB 开发板(该开发已板集成了 ST-Link ),确保连接正常(可以从设备管理器查看端口,显示“STMicroelectronics STLink Virtual COM Port”)。
(2)运行 STM32CubeProgrammer,此时右上角的状态灯为红色并显示 “Not connect”。
(3)点击右上角 “Connect” 按钮连接设备,如下图所示。
此时:a) 右上角的状态灯为绿色并显示 “Connected”;b) 右侧信息栏 “Target information” 显示目标设备 STM32 MCU和开发板的信息;c) 在 “Device memory” 信息栏显示设备内存地址和对应的内存信息;d) 在 “Log” 信息栏显示相关信息如下。
11:31:31 : STM32CubeProgrammer API v 2.6.0
11:31:34 : ST-LINK SN : 002B00283532510731333430
11:31:34 : ST-LINK FW : V3J15M7
11:31:34 : Board : NUCLEO-G431RB
11:31:34 : Voltage : 3.28V
11:31:34 : SWD freq : 24000 KHz
11:31:34 : Connect mode: Normal
11:31:34 : Reset mode : Software reset
11:31:34 : Device ID : 0x468
11:31:34 : Revision ID : Rev X
11:31:34 : UPLOADING OPTION BYTES DATA ...
11:31:34 : Bank : 0x00
11:31:34 : Address : 0x40022020
11:31:34 : Size : 20 Bytes
11:31:34 : Bank : 0x01
11:31:34 : Address : 0x40022070
11:31:34 : Size : 4 Bytes
11:31:34 : UPLOADING ...
11:31:34 : Size : 1024 Bytes
11:31:34 : Address : 0x8000000
11:31:34 : Read progress:
11:31:34 : Data read successfully
11:31:34 : Time elapsed during the read operation is: 00:00:00.002
- 运行 Matlab,菜单选择 主页–附加功能–管理附加功能,弹出“附加功能管理器”窗口,检查已安装 STM32 嵌入式硬件支持包 “Embedded Coder Support Package for STMicroelectronics STM32 Processors”。
如下图所示,本文的安装版本为 V22.2.2。
- 在“附加功能管理器”窗口选中 STM32 嵌入式硬件支持包后,点击齿轮图标“设置”,弹出“Select STM32 MCUs Family” 窗口
(1)从中选择所使用的 MCU 型号(本文为 STM32Gxx Based MCUs)。
(2)提示必需的 STM32 工具及版本(STM32CubeMX、STM32CubeProgrammer),如尚未安装可以点击 “Download” 下载并安装。
(3)对 STM32CubeMX 进行安装配置验证。
点击 “Browse” 选择本机安装 STM32CubeMX 的路径。
点击 “Validate” 进行验证,如下图所示。如果 STM32CubeMX 的版本较新,将出现软件版本兼容性提示。强烈建议严格使用推荐版本 V6.4.0。
(4)对 STM32CubeProgrammer 进行安装配置验证。
点击“Browse”选择本机安装 STM32CubeProgrammer 的路径。
点击 “Validate” 进行验证,如下图所示。如果 STM32CubeProgrammer 的版本较新,将出现软件版本兼容性提示。强烈建议严格使用推荐版本 V2.6.0。
2. 创建基于 STM32 处理器的 Simulink 工程
STM32 硬件支持包使开发者能够使用 Simulink 访问硬件外设,并使用 STM32CubeMX 工具在处理器上配置外围设备。
要支持在基于 STM32 处理器的板上运行 Simulink 模型,需要使用 STM32CubeMX 图形化工具。STM32CubeMX 工具采用图形界面,可用于配置 STM32 处理器的外设,并为所选的 STM32 处理器生成外设初始化代码。
2.1 创建 STM32CubeMX 工程
-
打开 STM32CubeMX。
-
选择 New Project(或Ctrl-N快捷键)新建工程,进入 New Project 界面。
选择MCU为 STM32G431RBTx(参考开发板的 MCU 型号选择),点击 “Start Project” 建立项目。
-
选择 New Project(或Ctrl-N快捷键)新建工程,自动转入 CubeMX 的 Pinout Configuration 视图。
-
点击菜单栏 “Project Manager” 进入工程配置界面,如下图所示。
(1)在 Project Name 输入项目名称 “STM32G431_MBD01”。
(2)在 Toolchain/IDE 选择 IDE 工具为 “STM32CubeIDE”(也可以根据需要选择其它 IDE 工具 )。
(3)在 “Project Manager” 继续向下拉,“在 MCU and Firmware Package” 栏中,取消选中 “Use latest available version”,根据所安装的 G4 固件版本,选择 “STM32Cube FW_G4 V1.5.0”;
(4)如果固件包不是安装在默认路径,则要取消选中 “Use Default Firmware Location”,通过 Browse 选择固件包的安装路径。
-
点击 “File–Save Project”,保存建立的 CubeMX 项目工程文件 STM32G431_MBD01.ioc。
2.2 创建 Simulink 仿真模型
-
运行 MATLAB 软件,将当前路径切换到 CubeMX 项目 .ioc 的保存路径。
-
打开 Simulink,点击 “空白模型” 创建新的 Simulink 模型,保存为文件 STM32G431_MBD01.slx。注意仿真模型 .slx 与 CubeMX 项目 .ioc 要保存在相同的路径下。
- 在 Simulink 菜单选择 “建模” - “模型设置” (也可以用 CTRL+E),打开“配置参数”对话框。
左侧边栏中选择“求解器”,如下图所示。
(1)在右侧 “仿真时间” 设置为 “inf”。
(2)在 “求解器选择” 选项设置类型为 “定步长”,“固定步长(基础采样时间)” 设为 “1e-4” (对应于 MCU 的 ADC 采样频率为 10kHz)。
(3)可选地,在 "任务和采样周期选项"下勾选:“将每个离散速率视为单独任务”和“自动处理数据传输的速率转换”。
- 如下图所示,在“配置参数”窗口的左边栏中选择“硬件实现”,在右侧 “硬件板(Hardware board)” 选项的下拉框中选择 “STM32G4xx Based”。
说明:
(1)根据使用的 STM32 的型号,从 “Hardware board” 中选择适当的硬件板选项。本项目使用 STM32G431RB MCU,因此选择 “STM32G4xx Based”。
(2)推荐选择 “STM32F4xx Based”,“STM32G4xx Based”,“STM32H4xx Based”,配合 STM32CubeMX 配置外设来实现对 STM32 硬件板的支持。
(3)在 “Hardware board” 选项中,还有一些 “STM32 Nucleo ******” 的选项,这是专门针对某些型号 STM32 Nucleo 开发板提供的硬件支持,可以直接在 Simulink 中对外设进行配置。但是,随着 STM32 的发展很多 Nucleo 开发板并未被支持,而 STM32CubeMX 的应用也越来越广泛,因此作者推荐开发者按照本文的步骤,直接使用 “STM32G4xx Based”,结合 STM32CubeMX 开展基于模型的代码生成。
-
在右侧 “Hardware board settings” 配置 “Target hardware resources” ,点击 “Browse” 选择或点击 “Create” 创建一个STM32CubeMX 工程文件(.ioc)。
(1)点击 “Browse” 选择 CubeMX 工程文件 STM32G431_MBD01.ioc。
(2)如下图所示,系统识别到目标设备为 STM32G4 系列,设备 ID为 STM32G431R(6-8-B)Tx。
(3)打开设备列表 “Device list”,并点击 “Refresh” 按钮刷新,显示连接的设备为 “STM32G43x/STM32G44x”,表明目标设备配置成功。
点击 “确定” 保存上述配置。
-
选择硬件在环通信串口。
点击 “Target hardware resources–Groups–Connectivity”,将 “USART/UART" 设为 “USART3”,将 “Serial port" 设为 电脑上的 COM 端口。具体端口号可以查看电脑”设备管理器“中的”端口(COM和LPT)“。
注意:这是针对 NUCLEO-G431RB 开发板集成了 STLINK-V3E 串口一体调试器。如果使用单独的 USB 转串口模块,要注意连线正确(USART3:PB10, PB11)。
- 回到 Simulink 仿真窗口,搭建仿真模型。
(1)在仿真模型中添加 “Digital Write” 模块参数。
点击菜单栏的 “库浏览器” 打开库浏览器,展开 “Embedded Coder Support Package for STMicroelectronics STM32 Processors – STM32G4xx Based Boards”。选择 “Digital Port Write” 模块,将其拖动到右侧的模型。
(2)设置 “Digital Write” 模块参数。如图所示,按照 CubeMX 项目中的 GPIO 管脚配置,将 Port name 设为 “GPIOA”,将 Pin number 设为 “[5]”,即将 PA5 管脚设置为 GPIO_Output。
(3)在仿真模型中添加 “Pulse Generator” 脉冲发生器模块。如下图所示,设置模块参数为:周期 1秒,脉冲宽度(占空比)为50%。
(4)完成搭建仿真模型,保存为文件 G431_MBD01.slx。注意仿真模型 .slx 与 CubeMX 项目 .ioc 要保存在相同的路径下。
2.3 在 STM32CubeMX 中配置外设
-
回到 STM32CubeMX,打开 STM32CubeMX 工程文件 G431_MBD01.ioc。
-
在 Pinout Configuration 视图进行系统配置。
(1)选择 “System Core – SYS” 设置调试器类型,将 Debug 模式设为 “Serial Wire”。
(2)选择 “System Core – SYS” 设置基础时钟源,将 Timebase Source 设为 “TIM2”——非常重要!
注意:Timebase Source 默认为 “SysTick”,但在 STM32支持包中 “SysTick” 已经用作框架的基础时间功能,因此必须修改为 非"SysTick" 的其它定时器。否则在编译项目时会报错——非常重要!。
(3)选择 “System Core – RCC” 配置时钟模式,设置高速晶振为外部时钟,将 High Speed Clock (HSE) 设为 “Crystal/Ceramic Resonator”。
- 在 Pinout Configuration 视图中,搜索 PA5 管脚(在 NUCLEO 开发板中 连接LD2 灯),将其设置为 GPIO_Output。如下图所示。
- 在 Clock Configuration 视图进行时钟配置,如下图所示。
LED 点灯实验对于时钟时钟设置没有太多要求,只要设置正确即可。本例中使用外部 24MHz晶振,具体设置如下图所示,只供参考。
- 在 Project Manager 视图进行工程配置,如下图所示。
(1)在 Project 中勾选 “Do not generate the main()”,在生成代码时不生成 main.c 文件中的 main() 函数。
(2)在 Project 中取消选中 “Generate Under Root”。
(3)在 Code Generator 中,勾选 “Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral”,让每个外设生成独立的’.c/.h’文件。
(4)在 Advanced Settings 中,将 “Driver Selector” 全部设置为 “LL”(默认为 “HAL”),为外设选择低级 (LL) 驱动–非常重要!否则编译会报错。
(5)在 Advanced Settings 中,将 “Generated Function Calls” 的 “Visibility(Static)” 勾选项全部取消,对所有外设初始化函数调用取消选择可见性(静态)。
- 完成以上配置后,使用快捷键 “CTL+S” 或点击 File–Save Project,保存 CubeMX 项目文件。
注意:在 STM32CubeMX 中配置完成后,不要点击 “GENERATE CODE” 生成代码,而是保存 .ioc 项目文件。
3. Simulink 模型仿真
- 在 Simulink 打开仿真模型 STM32G431_MBD01.slx。
- 为输出信号添加一个示波器。
- 在 “仿真” 窗口点击 “运行”,观察示波器的输出波形。如下图所示,示波器显示周期为 1sec 的方波。
- 双击脉冲发生器模块 Pulse Generator,修改参数 “周期”、“脉冲宽度” 后再开始仿真运行,可以得到不同周期和脉宽的波形。
4. 从 Simulink 模型生成代码并加载到 STM32 硬件板
-
在 Simulink 打开仿真模型 STM32G431_MBD01.slx。
-
在 “硬件(Hardware)” 窗口点击 “编译、部署和启动”(Ctrl+B 快捷键),就启动模型 STM32G431_MBD01 的编译过程,为模型生成代码,并加载到 NUCLEO-G431RB 开发板。
模型编译过程的主要信息显示在 “诊断查看器” 中,编译摘要如下。
如果编译中发生错误,错误信息也将显示在 “诊断查看器” 。
顶层模型编译
### 正在启动 STM32G431_MBD01 的编译过程
### 正在为 '模型特定' 文件夹结构生成代码和工件
### 正在将代码生成到编译文件夹中: D:\MATLAB\SimulinkProjects\STM32G4\STM32G431_MBD01\STM32G431_MBD01_ert_rtw
### Invoking Target Language Compiler on STM32G431_MBD01.rtw
### Using System Target File: D:\Program Files\MATLAB\R2022b\rtw\c\ert\ert.tlc
### Loading TLC function libraries
### Initial pass through model to cache user defined code
.
### Caching model source code
### Writing header file STM32G431_MBD01_types.h
### Writing header file STM32G431_MBD01.h
### Writing header file rtwtypes.h.
### Writing source file STM32G431_MBD01.c
### Writing header file STM32G431_MBD01_private.h
### Writing source file STM32G431_MBD01_data.c
### Writing header file rtmodel.h
### Writing source file ert_main.c
.
...### Successful completion of build procedure for: STM32G431_MBD01
### 'STM32G431_MBD01' 的 Simulink 缓存工件是在 'D:\MATLAB\SimulinkProjects\STM32G4\STM32G431_MBD01\STM32G431_MBD01.slxc' 中创建的。
编译过程已成功完成编译摘要
编译的顶层模型目标:模型 操作 重新编译原因
=========================================
STM32G431_MBD01 代码已生成并完成编译。 生成的代码已过期。 编译了 1 个模型,共 1 个模型(0 个模型已经是最新的)
编译持续时间: 0h 0m 14.395s
-
Simulink 通过调用 STM32CubeProgrammer 将编译的目标文件加载到 STM32 开发板,NUCLEO-G431RB 开发板上的 LD2 会闪烁,表明代码正在运行。
-
在 Simulink 模型中修改 Pulse Generator 模块的参数 “周期”、“脉冲宽度”,重新点击 “编译、部署和启动”,NUCLEO-G431RB 开发板上的 LD2 就以相应的周期和脉宽闪烁,表明基于 Simulink 的模型开发成功。
(本节完)
参考资料:
-
基于 STMicroelectronics STM32 处理器的板快速入门, (https://ww2.mathworks.cn/help/ecoder/stmicroelectronicsstm32f4discovery/ug/Getting-started-stm32cubemx.html?searchHighlight=STM32&s_tid=srchtitle_support_results_2_STM32)
-
安装 STMicroelectronics STM32 处理器的支持程序,(https://ww2.mathworks.cn/help/ecoder/stmicroelectronicsstm32f4discovery/ug/install-support-for-stm32-board-processors.html)
-
使用 STM32CubeMX 和 Simulink 配置基于 STM32 处理器的板,(https://ww2.mathworks.cn/help/ecoder/stmicroelectronicsstm32f4discovery/ug/STM32-CubeMX-Configuration.html?searchHighlight=STM32&s_tid=srchtitle_support_results_5_STM32)
版权声明:
youcans@xidian 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/144325556)
Copyright@youcans 2025
Crated:2025-01
相关文章:
【动手学电机驱动】STM32-MBD(2)将 Simulink 模型部署到 STM32G431 开发板
STM32-MBD(1)安装 STM32 硬件支持包 STM32-MBD(2)Simulink 模型部署入门 STM32-MBD(3)Simulink 状态机模型部署 【动手学电机驱动】STM32-MBD(2)Simulink 模型部署入门 1. 软硬件条件…...
小试牛刀-SpringBoot集成SOL链
目录 一、什么是solanaj? 二、Pom依赖 三、主要类 3.1 RpcClient 3.2 PublicKey 3.3 Transaction 3.4 TransactionInstruction 四、示例代码 Welcome to Code Blocks blog 本篇文章主要介绍了 [小试牛刀-SpringBoot集成SOL链] ❤博主广交技术好友,喜欢文章的…...
数据结构大作业——家谱管理系统(超详细!完整代码!)
目录 设计思路: 一、项目背景 二、功能分析 查询功能流程图: 管理功能流程图: 三、设计 四、实现 代码实现: 头文件 结构体 函数声明及定义 创建家谱树头结点 绘制家谱树(打印) 建立右兄弟…...
【计算机网络】课程 实验二 交换机基本配置和VLAN 间路由实现
实验二 交换机基本配置和VLAN 间路由实现 一、实验目的 1.了解交换机的管理方式。 2.掌握通过Console接口对交换机进行配置的方法。 3.掌握交换机命令行各种模式的区别,能够使用各种帮助信息以及命令进行基本的配置。 4&…...
最新MySQL面试题(2025超详细版)
2025最新超详细MySQL面试题 文章目录 2025最新超详细MySQL面试题[toc]一、 SQL 和基本操作1. SQL的执行顺序2. 如何优化MySQL查询3. 常用的聚合函数4. 数据库事务5. 事务的四大特性(ACID)6. 视图7. MySQL中使用LIMIT子句进行分页8. MySQL中使用变量和用户定义的函数9. MySQL中的…...
Unity-Mirror网络框架-从入门到精通之AdditiveScenes 示例
文章目录 前言Additive Levels和Additive ScenesAdditive Levels场景介绍Portal传送门FadeInOut特效 Additive Scenes示例介绍ZoneHandlerSceneMassage 最后 前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。Mirror是一个用于Unity的开源网络框…...
java 转义 反斜杠 Unexpected internal error near index 1
代码: String str"a\\c"; //出现异常,Unexpected internal error near index 1 //System.out.println(str.replaceAll("\\", "c"));//以下三种都正确 System.out.println(str.replace(\\, c)); System.out.println(str.r…...
html内容过长,实现向上循环滑动效果
以下是几种实现 HTML 内容过长时向上循环滑动的常见方法,你可以根据具体需求和项目场景来选择合适的实现方式: 一、使用 CSS3 animation 实现简单的向上循环滑动(适用于简单的文本等内容滑动场景) 原理 通过 CSS3 的 keyframes…...
RAG(Retrieval-Augmented Generation,检索增强生成)流程
目录 一、知识文档的准备二、OCR转换三、分词处理四、创建向量数据库五、初始化语言聊天模型1.prompt2.检索链3.对话 完整代码 知识文档的准备:首先需要准备知识文档,这些文档可以是多种格式,如Word、TXT、PDF等。使用文档加载器或多模态模型…...
数据库系统概论期末复习
期末考试题型: 选择题 20题 20分 判断题 10题 10分 简答题 4题 20分 SQL语句: (select delete update)30分 设计题:ER图 和关系模式 ER转关系模式,注意主码,外码的标注 15分 应用题:…...
B树与B+树:数据库索引的秘密武器
想象一下,你正在构建一个超级大的图书馆,里面摆满了各种各样的书籍。B树和B树就像是两种不同的图书分类和摆放方式,它们都能帮助你快速找到想要的书籍,但各有特点。 B树就像是一个传统的图书馆摆放方式: 1. 书籍摆放&…...
数据结构-栈与队列笔记
普通的双端队列 验证图书取出顺序 class Solution {/*** 验证书籍的借阅顺序是否合法。* * param putIn 表示放入书架的书籍序列。* param takeOut 表示从书架取出的书籍序列。* return 如果书籍的借阅顺序合法,返回 true;否则返回 false。*/public boo…...
Netty中用了哪些设计模式?
大家好,我是锋哥。今天分享关于【Netty中用了哪些设计模式?】面试题。希望对大家有帮助; Netty中用了哪些设计模式? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Netty 是一个高性能的网络通信框架,广泛…...
设计模式与游戏完美开发(3)
更多内容可以浏览本人博客:https://azureblog.cn/ 😊 该文章主体内容来自《设计模式与游戏完美开发》—蔡升达 第二篇 基础系统 第五章 获取游戏服务的唯一对象——单例模式(Singleton) 游戏实现中的唯一对象 在游戏开发过程中…...
人工智能的发展领域之GPU加速计算的应用概述、架构介绍与教学过程
文章目录 一、架构介绍GPU算力平台概述优势与特点 二、注册与登录账号注册流程GPU服务器类型配置选择指南内存和存储容量网络带宽CPU配置 三、创建实例实例创建步骤镜像选择与设置 四、连接实例SSH连接方法远程桌面配置 一、架构介绍 GPU算力平台概述 一个专注于GPU加速计算的…...
【51单片机零基础-chapter5:模块化编程】
模块化编程 将以往main中泛型的代码,放在与main平级的c文件中,在h中引用. 简化main函数 将原来main中的delay抽出 然后将delay放入单独c文件,并单独开一个delay头文件,里面放置函数的声明,相当于收纳delay的c文件里面写的函数的接口. 注意,单个c文件所有用到的变量需要在该文…...
彻底学会Gradle插件版本和Gradle版本及对应关系
看完这篇,保你彻底学会Gradle插件版本和Gradle版本及对应关系,超详细超全的对应关系表 需要知道Gradle插件版本和Gradle版本的对应关系,其实就是需要知道Gradle插件版本对应所需的gradle最低版本,详细对应关系如下表格࿰…...
容器技术思想 Docker K8S
容器技术介绍 以Docker为代表的容器技术解决了程序部署运行方面的问题。在容器技术出现前,程序直接部署在物理服务器上,依赖管理复杂,包括各类运行依赖,且易变,多程序混合部署时还可能产生依赖冲突,给程序…...
在C程序中实现类似Redis的SCAN机制的LevelDB大规模key分批扫描
在C程序中实现类似Redis的SCAN机制的LevelDB大规模key分批扫描,需要充分利用LevelDB的迭代器(iterator)功能,以便能够高效地扫描和处理大量的键值对。下面是一个详细的实现指南。 环境准备 首先,确保已经安装了Level…...
多模态论文笔记——CogVLM和CogVLM2
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍多模态模型的LoRA版本——CogVLM和CogVLM2。在SD 3中使用其作为captioner基准模型的原因和优势。 文章目录 CogVLM论文背景VLMs 的任务与挑战现有方法及…...
BLDC无感控制的驱动逻辑
如何知道转子已经到达预定位置,因为我们只有知道了转子到达了预定位置之后才能进行换相,这样电机才能顺滑的运转。转子位置检测常用的有三种方式。 方式一:通过过零检测,三相相电压与电机中性点电压进行比较。过零检测的优点在于…...
分布式多机多卡训练全景指南:MPI、DeepSpeed 与 Colossal-AI 深度解析
分布式多机多卡训练技术是深度学习领域提高训练效率和加快模型收敛的重要手段。以下是几个流行的框架和工具: 1. MPI(Message Passing Interface) 概述 MPI 是一种标准化的消息传递协议,用于多机多卡之间的通信与协作,…...
Unity中 Xlua使用整理(一)
1.安装: 从GitHub上下载Xlua源码 Tencent/xLua: xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc. (github.com) 下载Xlua压缩包,并解压将Aseet文件夹中的Xlua和Plugins文件夹复制到Unit…...
在调用 borrowObject 方法时,Apache Commons Pool 会根据连接池的配置触发一系列相关的方法
在调用 borrowObject 方法时,Apache Commons Pool 会根据连接池的配置触发一系列相关的方法 1. GrpcChannel 的概念 GrpcChannel 是 gRPC 客户端与服务器之间通信的核心组件。它是基于 HTTP/2 的连接,支持多路复用,即通过单个通道可以发送多…...
【数据结构与算法:八、排序】
第8章 排序 排序是计算机科学中最基本且最常用的操作之一。本章详细介绍了排序算法的概念、分类、每种算法的定义、图示、代码实现及其应用场景。 8.1 基本概念和排序方法概述 8.1.1 排序的基本概念 排序是指将一组无序的记录按照某种指定的顺序重新排列的过程。 排序的目…...
Unity学习笔记(六)使用状态机重构角色移动、跳跃、冲刺
前言 本文为Udemy课程The Ultimate Guide to Creating an RPG Game in Unity学习笔记 整体状态框架(简化) Player 是操作对象的类: 继承了 MonoBehaviour 用于定义游戏对象的行为,每个挂载在 Unity 游戏对象上的脚本都需要继承自 MonoBehaviour&#x…...
搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程
参考文章: 安装protoc、protoc-gen-go、protoc-gen-go-grpc-CSDN博客 一、简单介绍 本文开发环境,均为 windows 环境,mac 环境其实也类似 ~ ① 编译proto文件,相关插件 简单介绍: protoc 是编译器,用于将…...
策略模式(strategy)
一.策略模式是什么 策略模式是一种行为型对象模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以相互替换。这样,算法可以独立于使用它的客户端而变化。 策略者模式的核心思想是将一系列的算法封装到一系列的策略类里…...
Centos源码安装MariaDB 基于GTID主从部署(一遍过)
MariaDB安装 安装依赖 yum install cmake ncurses ncurses-devel bison 下载源码 // 下载源码 wget https://downloads.mariadb.org/interstitial/mariadb-10.6.20/source/mariadb-10.6.20.tar.gz // 解压源码 tar xzvf mariadb-10.5.9.tar.gz 编译安装 cmake -DCMAKE_INSTA…...
如何在 VSCode 中配置 C++ 开发环境:详细教程
如何在 VSCode 中配置 C 开发环境:详细教程 在软件开发的过程中,选择一个合适的开发环境是非常重要的。Visual Studio Code(VSCode)作为一款轻量级的代码编辑器,凭借其强大的扩展性和灵活性,受到许多开发者…...
信息安全、网络安全和数据安全的区别和联系
1. 前言 有次有朋友问我 信息安全、网络安全和数据安全,这三个词平时写文档时怎么用? 我想很多人都说不清。这次我查阅了资料,尽量讲清楚这三者之间的区别和联系。 2. 信息安全 2.1 定义 信息安全是指为数据处理系统建立和采用的技术和管…...
路由组件与一般组件的区别
路由组件与一般组件的区别 1. 基本概念 1.1 路由组件 路由组件是指通过路由规则映射的组件,通常放在 pages 或 views 文件夹中。 1.2 一般组件 一般组件是指通过 import 导入后直接使用的组件,通常放在 components 文件夹中。 2. 主要区别 2.1 存…...
【微服务】4、服务保护
微服务架构与组件介绍 单体架构拆分:黑马商城早期为单体架构,后拆分为微服务架构。跨服务调用与组件使用 服务拆分后存在跨服务远程调用,如下单需查询商品信息,使用openfeign组件解决。服务间调用关系复杂,需维护服务…...
6_TypeScript 函数 --[深入浅出 TypeScript 测试]
在 TypeScript 中,函数是编程的核心组成部分之一。TypeScript 不仅继承了 JavaScript 的所有函数特性,还添加了静态类型检查和其他一些增强功能,使得函数更加安全和易于理解。以下是关于 TypeScript 函数的一些关键点和两个具体的示例&#x…...
Apifox=Postman+Swagger+Jmeter+Mock
A. 开发人员接口管理使用(Swagger 工具管理接口) B. 后端开发人员通过Postman 工具,一边开发一边测试 C. 前端开发人员需要Mock 工具提供前端调用 D. 测试人员通过(Postman、Jmeter)等工具进行接口测试 为了后台开发、前端开发、测试工程师等不同角色更加便捷管理…...
升级 Spring Boot 3 配置讲解 —— Spring Boot 3 核心源码专讲
学会这款 🔥全新设计的 Java 脚手架 ,从此面试不再怕! Spring Boot 3 是 Spring 生态中的重要里程碑,它不仅全面支持 Java 17,还引入了许多新特性,如对 GraalVM 原生镜像的支持、改进的性能优化以及更灵活的…...
接口开发完后,个人对于接下来接口优化的一些思考
优化点 入参的合法性和长度范围,必填项的检查验证 因为没有入参,所以不需要考虑。 批量思想解决N1问题 // 假设要查询100个订单及其对应的用户信息 List<Order> orders orderMapper.selectList(new QueryWrapper<>().last("limit …...
jenkins 使用 ssh-agent向windows进行部署
背景: jenkins在linux的docker环境内,应用服务部署在windows。需要使用jenkins实现自动化部署。 实现方式: jenkins上构建pipeline任务,脚本如下: 遇到问题: 1、问题:jenkins 调用部署bat脚…...
音视频入门基础:MPEG2-PS专题(6)——FFmpeg源码中,获取PS流的视频信息的实现
一、引言 通过FFmpeg命令可以获取到PS文件/PS流的视频压缩编码格式、色彩格式(像素格式)、分辨率、帧率信息: ./ffmpeg -i XXX.ps 本文以H.264为例讲述FFmpeg到底是从哪个地方获取到这些视频信息的。 二、视频压缩编码格式 (…...
如果Adobe 退出中国后怎么办
最近听说Adobe要退出中国了?那咱们的设计师们可得好好想想怎么搞到正版软件了。别急,今天教大家一个超酷的福利——Edu邮箱! Edu邮箱是什么?有什么好处? Edu邮箱就是学校给学生和老师们发的邮箱,一般结尾是.edu。有了…...
欧几里得距离在权重矩阵中的物理意义
欧几里得距离在权重矩阵中的物理意义 目录 欧几里得距离在权重矩阵中的物理意义**衡量神经元差异程度**:**反映模型变化程度**:**聚类和分组的依据**:自然语言处理中的模型更新:**神经网络聚类分组**:欧几里得距离在权重矩阵中的物理意义衡量神经元差异程度: 在神经网络中…...
玩转大语言模型——ollama导入huggingface下载的模型
ollama导入huggingface模型 前言gguf模型查找相关模型下载模型 导入Ollama配置参数文件导入模型查看导入情况 safetensfors模型下载模型下载llama.cpp配置环境并转换 前言 ollama在大语言模型的应用中十分的方便,但是也存在一定的问题,比如不能使用自己…...
Linux-----进程通讯(管道Pipe)
目录 进程不共享内存 匿名管道 通过匿名管道实现通讯 有名管道 库函数mkfifo() 案例 进程不共享内存 不同进程之间内存是不共享的。是相互独立的。 #include <stdio.h> #include <stdlib.h> #include <errno.h>int num 0;int main(int argc, char con…...
【C++11】列表初始化、右值引用和移动语义、引用折叠、完美转发
C11 一.C的发展历史二.列表初始化1.C98的{}2.C11的{}3.C11中的std::initializer_list 三.右值引用和移动语义1.左值和右值2.左值引用和右值引用3.引用延长生命周期4.左值和右值的参数匹配5.右值引用和移动语义使用场景1.左值引用使用场景2.移动构造和移动赋值3.右值引用和移动语…...
Openssl1.1.1s rpm包构建与升级
rpmbuild入门知识 openssh/ssl二进制升级 文章目录 前言一、资源准备1.下载openssh、openssl二进制包2.安装rpmbuild工具3.拷贝源码包到SOURCES目录下4.系统开启telnet,防止意外导致shh无法连接5.编译工具安装6.补充说明 二、制作 OpenSSL RPM 包1.编写 SPEC 文件2.…...
递归思想的深度理解——汉诺塔问题和青蛙跳台阶问题
递归的深度理解——汉诺塔问题and青蛙跳台阶问题 青蛙跳台阶问题汉诺塔问题 青蛙跳台阶问题 问题:一只青蛙可以一次跳一级台阶,也可以一次跳两级台阶,如果青蛙要跳n级台阶,共有多少种跳法? 解答:我们可以先…...
从数据到诊断:朴素贝叶斯算法助力肿瘤预测之路
1.案例概述 肿瘤性质的判断影响着患者的治疗方式和痊愈速度。传统的做法是医生根据数十个指标来判断肿瘤的性质,预测效果依赖于医生的个人经验而且效率较低,而通过机器学习有望能快速预测肿瘤的性质。 2.数据集 本次肿瘤预测使用的数据集共有569组样本…...
Element-UI:如何实现表格组件el-table多选场景下根据数据对某一行进行禁止被选中?
如何实现表格组件el-table多选场景下根据数据对某一行进行禁止被选中? 在使用 Element UI 的 Table 组件时,如果你想要禁用某一行的选中(特别是在多选模式下),可以通过自定义行的 selectable 属性来实现。selectable …...
Dexcap复现代码数据预处理全流程(四)——demo_clipping_3d.py
此脚本的主要功能是可视化点云数据文件(.pcd 文件),并通过键盘交互选择演示数据的起始帧和结束帧,生成片段标记文件 (clip_marks.json) 主要流程包括: 用户指定数据目录:检查目录是否存在并处理标记文件 -…...
JWT理解
前言 随着互联网的快速发展,身份验证和授权成为了许多应用的重要需求。JWT(JSON Web Token)作为一种轻量级的身份验证和授权机制,得到了广泛的应用。本文将为您详细介绍JWT的原理、结构和优点,帮助您更好地理解和应用…...