VScode+OpenOCD+HTOS栈回溯在国产mcu芯片上完全调试
VScode+OpenOCD+Cmake+HTOS栈回溯在国产32芯片上完全调试
说实话用的都是HAL库开发的,flash链接文件用的都是stm32的,只能说国产芯片抄的基本完全一样了。具体芯片是什么就不介绍了,看过文章就能猜出来是哪家的了。代码开源在Gitee上了。https://gitee.com/huayi1234/HTOS/tree/VScode+openocd
基于 VS Code 的 STM32+HTOS 开发环境详解
1. 开发环境概述
本文将详细介绍一个基于 VS Code 的 STM32 开发环境配置,该环境使用 CMake 作为构建系统,OpenOCD 作为调试和下载工具,以及 Ninja 作为构建工具。这是一套专业的嵌入式开发环境,特别适用于 STM32F103 系列微控制器的开发,同时集成了自研的 HTOS 轻量级实时操作系统。
2. VS Code 配置文件详解
在这套开发环境中,.vscode
目录下有三个关键的 JSON 配置文件,它们定义了如何在 VS Code 中构建和调试 STM32 项目。下面将详细介绍这些配置文件。
2.1 launch.json - 调试配置
launch.json 文件定义了如何在 VS Code 中调试 STM32 项目:
{"version": "0.2.0","configurations": [{"name": "Cortex Debug","type": "cortex-debug","request": "launch","servertype": "openocd","cwd": "${workspaceRoot}","executable": "${workspaceRoot}/build/Debug/test.elf","device": "STM32F103C8T6","configFiles": ["${workspaceRoot}/apm32_openocd.cfg"],"svdFile": "${workspaceRoot}/STM32F103xx.svd","runToEntryPoint": "main","preLaunchTask": "build","env": {"LC_ALL": "C"}}]
}
这个配置的主要元素:
- 调试器类型:使用
cortex-debug
插件,这是一个专为 ARM Cortex 芯片调试设计的 VS Code 扩展 - 硬件类型:配置为 STM32F103C8T6 芯片
- 可执行文件路径:指向 test.elf
- OpenOCD 配置:使用 apm32_openocd.cfg 文件(哈哈哈)
- SVD 文件:使用 STM32F103xx.svd 文件,提供寄存器级别的调试信息
- 入口点:设置为
main
函数 - 预启动任务:在调试前先执行 build 任务确保代码已编译
2.2 tasks.json - 任务配置
tasks.json 文件定义了可在 VS Code 中执行的任务:
{"version": "2.0.0","tasks": [{"label": "build","type": "shell","command": "cd ${workspaceFolder}/build/Debug; ninja","group": {"kind": "build","isDefault": true},"problemMatcher": ["$gcc"]},{"label": "download","type": "shell","command": "openocd -f ${workspaceFolder}/openocd.cfg -c \"program ${workspaceFolder}/build/Debug/test.elf verify reset exit\"","dependsOn": "build","problemMatcher": []},{"label": "download-apm32","type": "shell","options": {"shell": {"executable": "cmd.exe","args": ["/c"]}},"command": "openocd -f \"${workspaceFolder}/apm32_openocd.cfg\" -c \"program_apm32\"","dependsOn": "build","problemMatcher": [],"group": "build"},{"label": "debug","type": "shell","options": {"shell": {"executable": "cmd.exe","args": ["/c"]}},"command": "openocd -f \"${workspaceFolder}/apm32_openocd.cfg\"","dependsOn": "build","problemMatcher": [],"isBackground": true,"presentation": {"reveal": "always","panel": "new"}}]
}
主要任务包括:
- build:使用 Ninja 构建系统编译项目
- download:使用标准 OpenOCD 配置将程序下载到 STM32 芯片
- download-apm32:使用特殊的 APM32 配置将程序下载到芯片
- debug:启动 OpenOCD 服务器用于调试,这是一个后台任务
2.3 settings.json - VS Code 设置
settings.json 文件包含了 VS Code 的自定义设置:
{"VsCodeTaskButtons.showCounter": true,"VsCodeTaskButtons.tasks": [{"label": "$(tools) 编译","task": "build","tooltip": "编译STM32项目"},{"label": "$(cloud-download) 下载-APM32","task": "download-apm32","tooltip": "编译并下载程序到APM32"},]
}
这个配置使用了 “VsCodeTaskButtons” 扩展,它在 VS Code 界面上添加按钮,方便一键执行常用任务:
- 一个编译按钮,执行 build 任务
- 一个下载按钮,执行
download-apm32
任务
3. 调试方法详解
3.1 调试工具链
该项目使用以下调试工具链:
- VS Code + Cortex-Debug 扩展:提供 IDE 界面和调试 UI
- OpenOCD:提供与调试器硬件的通信
- SVD 文件:提供芯片寄存器级别的详细信息,增强调试体验
3.2 调试步骤
在该环境中调试 STM32 项目的步骤:
-
编译项目:
- 点击 VS Code 界面上的 “编译” 按钮,或
- 按下
Ctrl+Shift+B
运行默认构建任务,或 - 在命令面板中执行 “Tasks: Run Build Task”
-
下载程序:
- 点击 VS Code 界面上的 “下载-APM32” 按钮,或
- 从命令面板中运行 “Tasks: Run Task” 然后选择 “download-apm32”
-
启动调试:
- 按下
F5
或点击侧边栏的调试图标,然后点击 “开始调试” - VS Code 会自动执行 build 任务,然后启动 OpenOCD 连接目标设备
- 程序会停在 main 函数入口点
- 按下
-
调试操作:
- 设置断点:点击代码行号左侧
- 单步执行:F10(逐过程)、F11(逐语句)
- 查看变量:调试面板中的 “变量” 视图或将鼠标悬停在代码上
- 查看寄存器:Cortex-Debug 提供的 “寄存器” 视图
- 查看内存:运行 “Cortex-Debug: View Memory” 命令
3.3 硬件故障调试
该环境特别配置了硬件故障触发和处理机制。在 main.c 中的 task4Function 函数专门设计用来触发硬件故障:
if(counter == 5) {/* 在计数到5时触发硬件故障 */printf("Task4: Trying to trigger hardware fault...\r\n");//HAL_Delay(500); /* 等待消息输出完成 *//* 两种触发硬件故障的方式: *//* 方式1: 访问非法地址 */volatile uint32_t *invalid_ptr = (uint32_t *)0xCCCCCCCC;*invalid_ptr = 0x12345678; /* 这会触发硬件故障 *//* 方式2: 除零操作 (注释掉,以便上面的方式生效) *//* volatile uint32_t a = 10;volatile uint32_t b = 0;volatile uint32_t c = a / b; /* 这会触发硬件故障 *//* (void)c; /* 避免未使用变量的警告 */
}
通过调试这段代码,可以观察系统如何响应硬件故障,这对测试 HTOS 操作系统的异常处理能力非常有价值。在调试时,可以观察:
- 触发硬件故障时的 CPU 寄存器状态
- 硬件故障处理程序的执行流程
- 系统如何恢复或重置
这个东西的话,其实如果可以在线调试的话倒是没什么用。但是对于无法在线调试的情况下就很有用了,而且整个环境是基于完全开源的场景的,所以可以把代码下载到任何芯片上。任何架构都可以。
4. CMake 构建系统
该项目使用 CMake 作为构建系统,主要配置文件包括:
- CMakeLists.txt:定义项目的构建规则
- CMakePresets.json:定义不同的构建预设
- cmake/gcc-arm-none-eabi.cmake:配置 ARM 交叉编译器的设置
CMake 在项目中的作用:
- 自动查找和配置工具链
- 定义构建目标和依赖关系
- 生成 Ninja 构建文件
- 简化交叉编译配置
5. OpenOCD 配置
项目使用了两个 OpenOCD 配置文件:
- openocd.cfg:标准 STM32 配置
- apm32_openocd.cfg:针对 APM32 芯片或特定调试器的自定义配置
这些文件定义了:
- 调试适配器类型和配置(如 ST-Link)
- 目标芯片的配置
- 特殊的下载和调试命令
这个下面是用cortex-debug这个插件调试的情况。当然对于RISC-V这种没有插件的应该也可以用OpenOCD的GDB服务器调试。
如上图可以完全进行在线调试,个人认为调试很方便。另外就是这个debug插件似乎支持一些实时内核,我这个是自己写的内核所以应该不支持,之后可以尝试一些移植来试试。
6. 项目结构
该项目的结构是典型的 STM32CubeMX 生成的项目,增加了 HTOS 操作系统组件:
- Core/: 包含应用程序代码
- Inc/: 头文件
- Src/: 源文件,包括 main.c
- Drivers/: STM32 HAL 库和 CMSIS 代码
- HTOS/: 自定义操作系统代码
- include/: HTOS 头文件
- kernel/: HTOS 内核实现
- portable/: 移植层代码
- build/: 构建输出目录
7. 使用技巧与最佳实践
7.1 高效调试技巧
-
断点策略:
- 设置条件断点可以在特定条件满足时才停止
- 使用日志断点可以在不停止执行的情况下打印信息
-
硬件异常分析:
- 设置中断向量表断点来捕获所有异常
- 使用 SVD 文件查看外设寄存器状态
- 检查故障状态寄存器了解异常原因
-
内存优化:
- 使用内存视图监控栈/堆使用情况
- 监控 HTOS 任务栈使用情况防止溢出
7.2 常见问题解决
-
OpenOCD 连接问题:
- 检查 USB 线缆质量
- 确认 ST-Link 固件是最新版本
- 尝试降低 SWD 时钟频率
-
构建错误:
- 检查工具链路径配置
- 确认 CMake 和 Ninja 版本兼容
- 查看详细构建日志
-
调试卡死:
- 检查是否进入了无限循环
- 查看是否触发了硬件故障但没有正确处理
- 检查硬件连接和供电情况
结语
这套 VSCode + CMake + OpenOCD + Ninja 的开发环境构成了一个功能强大、灵活且高效的 STM32 开发平台。通过本文介绍的 VS Code 配置文件和调试技术,可以充分利用现代工具链的优势,提高嵌入式开发效率。特别是硬件故障调试功能,对于开发可靠的嵌入式系统尤为重要。
希望这篇文章能够帮助开发者更好地理解和使用这套开发环境,构建出更稳定、高效的嵌入式系统!
注:本文中介绍的开发环境和方法可能需要根据具体项目和硬件进行调整,以适应不同的开发需求。
相关文章:
VScode+OpenOCD+HTOS栈回溯在国产mcu芯片上完全调试
VScodeOpenOCDCmakeHTOS栈回溯在国产32芯片上完全调试 说实话用的都是HAL库开发的,flash链接文件用的都是stm32的,只能说国产芯片抄的基本完全一样了。具体芯片是什么就不介绍了,看过文章就能猜出来是哪家的了。代码开源在Gitee上了。https:…...
2025年最新版动漫短剧系统开发小程序app教程,源码部署上线
以下是动漫短剧系统开发上线的详细教程,包含从0到1的全流程: 一、需求分析(关键:明确核心功能) 核心功能清单: 用户端:短视频浏览、弹幕评论、收藏/点赞、创作者关注、付费订阅。创作者端&am…...
Java练习——day2(集合嵌套)
文章目录 练习1练习2练习3 练习1 给定一个字符串列表List words,统计每个单词出现的次数,并用Map<String, Integer>存储结果。 示例代码: import java.util.*;public class WordCount {public static void main(String[] args) {// 示…...
国产CPU处理器性能实测:龙芯/海光/兆芯/华颉VS英特尔和AMD!
最近后台总收到粉丝留言:"现在国产CPU到底行不行?想换电脑又怕国产的不够强"。今天咱们就掏心窝子聊聊这个话题——国产CPU处理器到底是"弯道超车"还是"贴牌组装"?性能真能和英特尔i5、AMD锐龙掰手腕吗&#x…...
Excel自定义函数取拼音首字母
1.启动Excel 2003(其它版本请仿照操作),打开相应的工作表; 2.执行“工具 > 宏 > Visual Basic编辑器”命令(或者直接按“AltF11”组合键),进入Visual Basic编辑状态; 3.执行“…...
Vue3 SSR生物启发架构:仿生渲染与DNA流式编码
一、神经元弹性调度网络 1.1 突触连接式渲染集群 1.2 生物能效对比表 调度模式能耗(kWh/万次)突触延迟容错阈值信息熵利用率轮询调度4.2220ms60%35%蚁群算法2.8150ms75%48%神经形态调度0.945ms93%82%DNA协进化调度0.312ms99.9%95% 二、DNA流式编码协议 2.1 四碱基序列转换器…...
git的上传流程
好久没使用git 命令上传远程仓库了。。。。。温习了一遍; 几个注意点--单个文件大小不能超过100M~~~ 一步步运行下面的命令: 进入要上传的文件夹内,点击git bash 最终 hbu的小伙伴~有需要nndl实验的可以自形下载哦...
C++学习记录:
今天我们来学习一门新的语言,也是C语言最著名的一个分支语言:C。 在C的学习中,我们主要学习的三大组成部分:语法、STL、数据结构。 C的介绍 C的历史可追溯至1979年,当时贝尔实验室的本贾尼斯特劳斯特卢普博士在面对复杂…...
MAC-批量任务并行处理实现
批量任务并行处理示例(基于Spring框架) 以下是一个 完整可运行 的批量任务并行处理示例,包含 任务拆分、异步执行、线程池管理、耗时 监控 等核心功能,适用于数据清洗、文件处理、批量通知等场景。 1. 线程池配置 @Configuration @EnableA…...
《电子类专业:通往科技未来的钥匙》
一、电子类专业全景概览 在当今科技飞速发展的时代,电子类专业无疑占据着现代科技体系中基础与核心的重要地位。从我们日常生活中不可或缺的智能手机、电脑,到推动社会进步的人工智能、大数据技术,再到探索宇宙奥秘的航天航空设备,电子类专业的身影无处不在。它就像一把万…...
全链路开源数据平台技术选型指南:六大实战工具链解析
在数字化转型加速的背景下,开源技术正重塑数据平台的技术格局。本文深度解析数据平台的全链路架构,精选六款兼具创新性与实用性的开源工具,涵盖数据编排、治理、实时计算、联邦查询等核心场景,为企业构建云原生数据架构提供可落地…...
大塔集团乔迁开新局 企业赋能贯全程
2025年4月15 日,在佛山市佛山大道北175号,大塔集团乔迁开业盛大启幕,业界目光聚焦于此。 点睛仪式 揭牌仪式 彩绸飘扬、嘉宾云集,现场气氛热烈非凡,这一标志性时刻,宣告着大塔集团正式踏上全新发展征程。 …...
Ubuntu系统下部署 NFS服务教程
Ubuntu系统下部署 NFS服务教程 一、NFS 服务简介二、环境准备三、服务器端配置1. 安装 NFS 服务端2. 创建共享目录3. 配置共享规则4. 生效配置并启动服务四、客户端配置1. 安装 NFS 客户端2. 创建本地挂载点3. 挂载远程目录4. 验证挂载状态5. 测试读写五、高级配置技巧1. 开机自…...
shell编程正则表达式与文本处理器
目录 基础正则表达式 扩展正则表达式 sed工具使用方法 awk 工具使用方法 前言 在 Shell 编程的世界里,正则表达式与文本处理器是两大不可或缺的利器。正则表达式(RegularExpression,简称 RE)作为一种强大的字符串匹配工具,能够通过特定的字符组合来描述和匹配一系列符合特…...
SparseDrive---论文阅读
纯视觉下的稀疏场景表示 算法动机&开创性思路 算法动机: 依赖于计算成本高昂的鸟瞰图(BEV)特征表示。预测和规划的设计过于直接,没有充分利用周围代理和自我车辆之间的高阶和双向交互。场景信息是在agent周围提取ÿ…...
YOLOV8 OBB 海思3516训练流程
YOLOV8 OBB 海思3516训练流程 目录 1、 下载带GPU版本的torch(可选) 1 2、 安装 ultralytics 2 3、 下载pycharm 社区版 2 4、安装pycharm 3 5、新建pycharm 工程 3 6、 添加conda 环境 4 7、 训练代码 5 9、配置Ymal 文件 6 10、修改网络结构 9 11、运行train.py 开始训练模…...
ThinkPHP框架接入Stripe支付
我的框架是ThinkPHP5.0,后台是fastadmin 1.安装composer包,包名是 stripe/stripe-php 2.下单代码 <?php namespace app\common\service; use app\common\controller\Api; use Stripe\Stripe; use Stripe\Checkout\Session; use think\Config;clas…...
文件上传漏洞学习
什么是文件上传漏洞 文件上传漏洞指用户通过上传一个恶意的可执行文件,例如木马、病毒、webshell、恶意脚本等等在服务器中执行,配合其他工具,获得网站控制权或达到一些其他效果。 文件上传漏洞原理 由于对上传文件的格式限制不够严格&…...
【function call】大模型的hello function call
1. 所有的大模型的function call 功能就是将function 也当作输入到大模型中 2. 不同的平台或者模型调用的方式可能不一样 一个硅基流动的例子 import requests from openai import OpenAIclient = OpenAI(api_key="sk-vuffqulyakrzccyqenavdryxyamqkhemidvgaihdqmehmhlv&…...
CVFSNet:一种用于端到端脑梗塞溶栓治疗后改良脑梗死溶栓分级(mTICI)评分的跨视图融合评分网络|文献速递-深度学习医疗AI最新文献
Title 题目 CVFSNet: A Cross View Fusion Scoring Network for end-to-end mTICI scoring CVFSNet:一种用于端到端脑梗塞溶栓治疗后改良脑梗死溶栓分级(mTICI)评分的跨视图融合评分网络 01 文献速递介绍 中风目前是全球主要的致死原因之…...
解决 .Net 6.0 项目发布到IIS报错:HTTP Error 500.30
今天在将自己开发许久的项目上线的时候,发现 IIS 发布后请求后端老是报一个 HTTP Error 500.30 的异常,如下图所示。 后来仔细调查了一下发现是自己的程序中写了 UseStaticFiles 的依赖注入,这个的主要作用就是发布后端后,想…...
施磊老师基于muduo网络库的集群聊天服务器(一)
文章目录 技术栈项目需求环境安装muduo网络库安装编译错误:解决办法:移动头文件和库文件 redis和mysql安装验证mysql环境修改mysql密码Nginx--先不安装 Json介绍为什么需要json?什么是 json 序列化?常用的数据传输序列化格式?直接使用json第三方库json序列化代码演示复杂键值…...
WebStorm中Gitee账号的密码登录与令牌登录设置
1.账号密码添加 1.1安装插件 说明:安装Gitee插件 1.2点击通过账号密码登录 说明:需要Gitee账号和密码 1.3登录 说明:通过邮箱和密码登录 1.4登录成功 2.令牌登录 2.1Token登录 说明:需要Gitee生成的私人令牌进行登录。 2.2G…...
Android开发案例——简单计算器
实现计算机的简单功能 1、显示页面jsj.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height&…...
实现类似 “更新中” 的水平进度条按钮效果
如上图所示 activity_test3.xml <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layout_width"match_parent"android:layout_height"match_parent…...
【QT入门到晋级】QT打动态库包及引入动态库包
前言 本篇为持续更新状态,内容包含window、Linux下打动态库包,以及引入动态库包的方式。 一、window 1、动态库打包 以百度的OCR接口调用打dll库为例,以下为qtcreator创建动态库过程: 1.1Qtcreator创建lib项目 创建成功后&…...
Linux:解决 yum 官方源无法使用(CentOS 7)
文章目录 一、原因二、解决方法 一、原因 CentOS 7 在 2024年 6 月 30 日结束了它的生命周期(End of Life, EOL),这意味着官方不再提供更新和支持,包括其 yum 源也将停止服务。 因此对于仍然需要使用 CentOS 7 的用户来说&#…...
软考-高项,知识点一览十八 项目绩效域
十八 项目绩效域 价值驱动的项目管理知识体系关注价值的实现,包含了 项目管理原则、绩效域、项目生命周期、过程组、10 大知识领域和价值交付系统。在整个生命周期过程中,项目管理者需要始终坚持项目管理原则,通过涵盖 10 大知识领域的项目管…...
macOS安装java
一、下载 官网Java Downloads | Oracle 安装载java8,下载对应的JDK Java Downloads | Oracle 二、双击安装 安装 完成 三、查看安装位置 打开终端窗口,执行命令: /usr/libexec/java_home -V /Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Content…...
wpf ScaleTransform
在WPF中,ScaleTransform是用于实现元素缩放的核心类,属于System.Windows.Media命名空间下的变换类型。以下是其主要特性与使用方式的总结: 核心属性 缩放比例 ScaleX:水平方向缩放比例(默认1.0,即…...
开源分享!! 4款免费的数据库在线工具
无论是开发企业网站、搭建电商系统,还是做复杂的应用开发,数据库管理都是绕不开的核心环节。你是否遇到过这些问题: 在本地装了一堆数据库工具,来回切换麻烦又低效?想调试 SQL 语句,还要先配置各种环境&am…...
Mybatis-plus 主键自增值与数据库主键自增值不一致
数据库表的自增值为 100 但是在 java 项目中向数据库插入一天数据后报错: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property id of class com.wf.dao.pojo.Article with…...
数据清洗到底在清洗什么?
在大数据时代,数据是每个企业的五星资产,被誉为“新石油”,但未经处理的数据往往参杂着大量“杂质”。这些“脏数据”不仅影响分析结果,严重的甚至误导企业决策。数据清洗作为数据预处理的关键环节,正是通过“去芜存菁…...
shell编程之正则表达式
目录 1,正则表达式的定义 2,正则表达式用途 正则表达式的常用选项及示例(grep为例): sed基本语法及常用选项: awk的基本语句及常用选项: 扩展正则表达式(egrep) 元字符总结: …...
每日一题-力扣-2537. 统计好子数组的数目 0416
LeetCode 2537. 统计好子数组的数目 问题描述 给定一个整数数组nums和一个整数k,定义"好子数组"为包含至少k对相等元素的子数组。任务是计算数组中所有"好子数组"的数量。 两个相等的元素构成一对,例如数组[1,1,1]中有3对(1,1)&am…...
遨游防爆手机:构筑煤矿安全通讯的数字护盾
在煤炭、石油、化工等危险作业场景中,安全生产始终是企业发展的生命线。面对复杂多变的生产环境,传统的通讯设备已难以满足现代工业对安全性、可靠性和智能化的严苛要求。遨游通讯作为国内领先的防爆通讯设备制造商,凭借其核心科技自主研发的…...
进程通信详解
进程间通信(IPC)详解:原理、方式与使用场景全解析 摘要 进程间通信(IPC)是操作系统中用于实现多个独立进程之间数据交换和资源协作的重要机制。本文系统地讲解了 IPC 的基本概念、设计目标和系统实现原理,…...
《What Are Step-Level Reward Models Rewarding?》全文翻译
《What Are Step-Level Reward Models Rewarding?Counterintuitive Findings from MCTS-Boosted Mathematical Reasoning》 Step-Level奖励模型到底奖励了什么?来自基于MCTS提升的数学推理的反直觉发现 摘要 Step-level奖励模型(SRMs)通过…...
windows使用docker-desktop安装milvus和可视化工具attu
这里写目录标题 docker-desktop安装docker安装milvusdocker安装milvus可视化工具attu注意点 docker-desktop安装 参考:Windows Docker 安装 docker安装milvus 参考:添加链接描述在 Docker 中运行 Milvus(Windows) docker安装m…...
如何通过原型链实现方法的“重写”(Override)?
在 JavaScript 中,通过原型链实现方法的 “重写”(Override) 的核心思路是:在子类(或子对象)的原型链上定义同名方法,覆盖父类(或父对象)的方法。以下是具体实现步骤和代…...
PyTorch - Tensor 学习笔记
上层链接:PyTorch 学习笔记-CSDN博客 Tensor 初始化Tensor import torch import numpy as np# 1、直接从数据创建张量。数据类型是自动推断的 data [[1, 2],[3, 4]] x_data torch.tensor(data)torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])输出&am…...
《协议栈的骨架:从Web请求到比特流——详解四层架构的可靠传输与流量控制》
前言 本篇博客将详细介绍网络原理(细~~~) 💖 个人主页:熬夜写代码的小蔡 🖥 文章专栏 若有问题 评论区见 🎉欢迎大家点赞👍收藏⭐文章 一.应用层 这里的应用层只是个开头&a…...
软考 系统架构设计师系列知识点 —— 设计模式之创建者模式
本文内容参考: 软考 系统架构设计师系列知识点之设计模式(2)_系统架构设计师中考设计模式吗-CSDN博客 创建者模式_百度百科 建造者模式_百度百科 https://zhuanlan.zhihu.com/p/551870461 特此致谢! Builder Pattern…...
oracle判断同表同条件查出两条数据,根据长短判断差异
目标:同一个物料,账套不同,排查同料号有差异的规格名称 在Oracle数据库中,如果你想查询同一张表中两条数据某个字段的长度不同的情况,你可以使用JOIN语句或者窗口函数(如ROW_NUMBER()、RANK()、DENSE_RANK…...
咋用fliki的AI生成各类视频?AI生成视频教程
最近想制作视频,多方考查了决定用fliki,于是订阅了一年试试,这个AI生成的视频效果来看真是不错,感兴趣的自己官网注册个账号体验一下就知道了。 fliki官网 Fliki生成视频教程 创建账户并登录 首先,访问fliki官网并注…...
【STM32-代码】
STM32-代码 ■ printf() 输出到uart1■■■ ■ printf() 输出到uart1 static UART_HandleTypeDef * g_HDebugUART &huart1;int fputc(int c, FILE *f) {(void)f;HAL_UART_Transmit(g_HDebugUART, (const uint8_t *)&c, 1, DEBUG_UART_TIMEOUT);return c; }int fgetc…...
用cursor三个小时复刻高德地图的足迹地图
用cursor三个小时复刻了高德地图的足迹地图,当然,是“低配”版的。 1、首先要初始化,提出一个需求,让它自由发挥 运行之后发现它报错了,原因出在这行代码,“https://cdn.jsdelivr.net/npm/echarts5,4.3/…...
Git分支管理与工作流实践
Git分支管理与工作流实践 一、Git分支规范与核心原则 主分支(master/main) 核心作用:存储生产环境代码,永远保持稳定且可直接发布。禁止直接在此分支开发。操作规范:仅通过合并release或hotfix分支更新,合…...
python面试总结
目录 Python基础 1、python及其特点 2、动态类型和静态类型? 3、变量命名规则是什么? 4、基本数据类型有哪些? 5、Python 中字典? 6、集合set是什么?有什么特点? 7、python的字符串格式化 函数 1…...
基于骨骼识别的危险动作报警系统设计与实现
基于骨骼识别的危险动作报警系统设计与实现 基于骨骼识别的危险动作报警分析系统 【包含内容】 【一】项目提供完整源代码及详细注释 【二】系统设计思路与实现说明 【三】基于骨骼识别算法的实时危险行为预警方案 【技术栈】 ①:系统环境:Windows 10…...