STM32 Flash详解教程文章
目录
Flash基本概念理解
Flash编程接口FPEC
Flash擦除/写入流程图
Flash选项字节基本概念理解
Flash电子签名
函数读取地址下存放的数据
Flash的数据处理限制部分
编写不易,请勿搬运,感谢理解!!!
Flash基本概念理解
STM32的Flash里面包含,程序存储器,系统存储器,选项字节,通过对Flash闪存的片上外设接口(接口地址在ram地址),可以对程序存储器跟选项字节进行擦除和编程。
·程序存储器:用来下载存放程序的位置
·系统存储器:用来存放BootoLoader芯片出厂自带程序
·选项字节:用来配置Flash读保护,写保护,等功能
其常见在程序中的用法是,通过程序软件编程利用内部Flash数据掉电不丢失的特性与内部Flash通常不用使用完,将重要的参数存储在Flash的最后几页内。
和使用指针指向系统存储区域内,芯片的ID号地址,读取属于芯片自己的ID号,通过利用芯片不同的ID号,在程序执行时判断芯片ID号,如果不同则不执行程序,来实现程序只能在特定芯片上运行。
最后一种用法就是通过对Flash的选项字节配置,来完成程序的读保护跟写保护,在程序中来配置。
flash分配地址详解
在STM32F1系列芯片中,其中Flash每页的起始地址后三位均以 000 400 800 C00 开头。
Flash编程接口FPEC
Flash编程控制器 FPEC 全称是 Flash Program/Erase Controller 用于对Flash存储器进行读写和擦除的硬件模块。该模块包含7个32位寄存器。
·FPEC键寄存器(FLASH_KEYR):用于解锁FPEC外设,允许进行Flash编程或擦除操作
·选择字节键寄存器(FLASH_OPTKEYR):用于解锁Flash选项字节的修改操作
·闪存控制寄存器(FLASH_CR):控制Flash编程和擦除操作的核心寄存器
·闪存状态寄存器(FLASH_SR):指示Flash当前状态和操作结果
·闪存地址寄存器(FLASH_AR):指定Flash操作的目标地址
·选择字节寄存器(FLASH_OBR):读取选项字节当前的配置状态
·写保护寄存器(FLASH_WRPR):指示和配置Flash的写保护状态
7个寄存器中需要注意的是,Flash_SR寄存器的BSY位,当该位为1的时候代表正在进行flash操作,当为0的时候代表操作结束或者发生错误,通常来读取该位的值来判断flash操作是否完成结束。
Flash_CR寄存器的PG位代表是否选择编程操作,PER位是否选择页擦除操作,MER位是否选择全擦除操作,OPTPG选择字节编程,OPTER擦除选择字节,STRT开始操作,该位为1的时候将触发擦除操作,只能由软件置1并在BSY为1的时候清除为0,LOCK锁为1代表FPEC和Flash_CR被锁住,为0代表解锁成功。
寄存器地址范围图
在芯片复位后,FPEC模块是被保护的,Flash_CR寄存器不能被读写操作,首先需要对,Flash_KEYR写入特定键值KEY1 KEY2 来完成解锁操作,如果写入错误会在下次复位之前锁死,FPEC跟Flash_CR寄存器。
·RDPRT键 = 0x000000A5 //解除读保护
·KEY1 = 0x45670123 //KEY1+KEY2解除FPEC锁
·KEY2 = 0xCDEF89AB
需要注意的是,在解锁FPEC对Flash_CR寄存器操作完成对Flash的读|写之后,需要设置Flash_CR中的LOCK位锁住FPEC跟Flash_CR位,来防止数据的误写入导致对Flash进行操作。
Flash擦除/写入流程图
Flash写入数据流程图
Flash页擦除流程图
Flash全擦除流程图
在三张流程图中只有擦除流程图需要置Flash_CR寄存器的STRT位为1,在上文有介绍过当为1的时候会执行擦除操作,然后当Flash_SR寄存器的BSY为0的是时候会将STRT位置0。
Flash选项字节基本概念理解
在芯片地址中给选项字节分配了16个字节的地址,其中8个字节的地址用来备份,当前选项字节的数据,只有8个字节用来配置Flash选项字节。其中四个字节用来写保护,1个字节用来读保护,1个字节配置选项,2个字节存储用户数据。
分配地址图
需要注意的是,在完成对FPEC的解锁之后,还需要再次对Flash_OPTKKEYR写入KEY1 KEY2来完成对选项字节的解锁,同事置Flash_CR的OPTWRE位为1才能对选项字节进行写入操作。
·RDP:写入RDPRT键(0x000000A5)后解除读保护
·USER:硬件看门狗配置 停机模式|待机模式 是否产生复位
·Data:用户自定义数据
·WRP:该位置用来配置写保护
Flash电子签名
电子签名是芯片出厂的时候由芯片制造商写入的信息,存放地址实在系统存储区域,用来表示芯片的唯一性跟芯片的flash容量大小。
·0x1FFFF7E0
~ 0x1FFFF7E3 存放flash大小
·0x1FFFF7E8
~ 0x1FFFF7EF
存储 UID。
其中UID Uniqune Device ID 唯一设备标识,共96位12字节改信息用户不可更改,可以利用指针进行访问。
函数读取地址下存放的数据
上文中提到了在大多数单片机程序中因为自身Flash没有被使用完,因此可以对剩余Flash空间进行读写数据操作函数如下。
uint32_t FlashR_Word(uint32_t address)
{return *((__IO uint32_t *)(address))
}
函数中__IO来自官方定义库文件定义如下
#define __IO voliate
将宏定义带入到函数中就能得到下面代码
(__IO uint32_t *)(address) = (volitate uint32_t *)(address)
改代码作用是将函数局部变量参数转化为指向该参数的uint32_t,指针类型,同时括号外面的*就是指针解引用的意思,就是返回指针指向该地址下的数值,这里因为声明的指针类型为uint32_t类型所以就能返回一个字的地址。
也就是32位数据,4个字节的数据,同理可以得到读取16位数据的函数,还有读取一个字节的函数,只要把函数内声明的指针类型给改了就行了。
uint16_t FlashR_HWord(uint32_t address)
{return *((__IO uint16_t *)(address))
}uint8_t FlashR_Byte(uint32_t address)
{return *((__IO uint8_t *)(address))
}
//这里因为改变了 内部声明的指针类型 跟返回值类型所以能获取的数据大小也被限制了
Flash的数据处理限制部分
在对Flash进行数据存储的通常情况下需要再程序中定义一个 uint16_t data[512] 数组,大小是1024也就是一个Flash页面大小,先将数据写入ram的数组里面然后再写入Flash里面进行存储,通常这种情况是因为Flash本身的写入限制问题。
首先Flash擦除的最小单位是页,同时在Flash进行写入的时候不存在数据覆盖这种写法,也就是将数据0x12345对改地址重新写入数据0x56787是写不进去的是因为Flash中的数据只能从1->0,而不能从0->1,而在擦除完单页Flash之后,该页存储的数据全部为0xFFFF FFFF 也就是全部是1。
这就导致了如果直接对Flash进行数据写入,会发现在数据写入到最后的时候如果想要更改前面的数据大概率是需要擦除才能进行写入的,但是如果进行擦除其他位的数据又丢失,所以通常常用的数据数据手段也就是。
将Flash单页数据读出保存在一个Flash页大小的数组里面进行更改数据,然后将整页数据重新写入到Flash数组里面来完成操作,跟将需要写入的数据先在数组里面进行覆盖,最后统一写入Flash里面。
✅ Step 1:先从 Flash 读取数据到 RAM。
✅ Step 2:在 RAM 修改数据。
✅ Step 3:擦除 整个 Flash Page(Flash 只能整页擦除)。
✅ Step 4:将 RAM 数据重新写入 Flash。
#include "stm32f10x.h"
#include "Store.h"
#include "MyFlash.h"
//数组内512个数据 每个数据类型是 uint16_t 也就是2个字节 数组能存放1024字节数据 也就是对应Flash一页的容量
uint16_t Store_Data[512];
//在ram 里面定义一个数组 需要备份的时候统一转到闪存里面
void Flash_Init(void)
{if(Flash_WHWord(0x08000000)!=0xA5A5){Earse_FlashPage(0x08000000);Flash_WHWord(0x08000000 ,0xA5A5 );for(uint16_t i = 1;i<512;i++){Flash_WHWord(0x08000000 +i*2 ,0x0000 );}}//将Flash里面数据保存读到ram里面for(uint16_t i = 0; i<512;i++){Store_Data[i] = FlashRH_Word(0x08000000 + i*2);}
}
void Flash_Save(void)
{//先擦除Flash在进行写入,不然会发现写不进去Earse_FlashPage(0x08000000);for(uint16_t i = 0;i<512;i++){Flash_WHWord(0x08000000 + i*2,Store_Data[i] );}
}
//函数用来清除数组 Flash里面的数据
void Flah_Clear(void)
{for(uint16_t i = 0;i<512;i++){Store_Data[i] = 0x0000;}Flash_Save();
}
代码部分
这里需要注意的是i*2问题,因为在Flash里面最小写入单元跟最小存储单元室一个半字,也就是16位,4个字节,举个例子就是0x0800 0000是单元起始地址,到0x0800 0001 地址该单元结束,该地址指向存储单元,每个地址指向的存储单元能够存储 2个字节。
所以在数据数据进行写入的时候,地址的起始地址都是用2的倍数开头的,因为像0x0800 0001这种是不合法地址,是没有办法进行写入半字数据。
这种用法通常是用在单片机程序很小,自身Flash占用不完的情况下使用,而有没有办法知道自己的程序占用多少字节,同时改变程序烧录的位置,无论程序大小都不能烧录到自己保存数据的Flash数据部分这种方法也是有的。
查看程序自身大小方法图
魔术棒里面有程序的起始地址还有结束地址,只要把在Keil5里面可以更改这两个地址从而达到更改程序的烧录地址的效果。
欢迎指正,希望对你,有所帮助!!!
相关文章:
STM32 Flash详解教程文章
目录 Flash基本概念理解 Flash编程接口FPEC Flash擦除/写入流程图 Flash选项字节基本概念理解 Flash电子签名 函数读取地址下存放的数据 Flash的数据处理限制部分 编写不易,请勿搬运,感谢理解!!! Flash基本概念…...
业务开发 | 基础知识 | Maven 快速入门
Maven 快速入门 1.Maven 全面概述 Apache Maven 是一种软件项目管理和理解工具。基于项目对象模型的概念(POM),Maven 可以从中央信息中管理项目的构建,报告和文档。 2.Maven 基本功能 因此实际上 Maven 的基本功能就是作为 Ja…...
Python实现从SMS-Activate平台,自动获取手机号和验证码(进阶版2.0)
前言 本文是该专栏的第52篇,后面会持续分享python的各种干货知识,值得关注。 在本专栏之前,笔者在文章《Python实现SMS-Activate接口调用,获取手机号和验证码》中,有详细介绍基于SMS-Activate平台,通过python来实现自动获取目标国家的手机号以及对应的手机号验证码。 而…...
网络安全 | 安全信息与事件管理(SIEM)系统的选型与实施
网络安全 | 安全信息与事件管理(SIEM)系统的选型与实施 一、前言二、SIEM 系统的功能概述2.1 数据收集与整合2.2 实时监控与威胁检测2.3 事件响应与自动化2.4 合规性管理 三、SIEM 系统选型的关键因素3.1 功能需求评估3.2 可扩展性与性能3.3 易用性与可维…...
解决DeepSeek服务器繁忙问题
目录 解决DeepSeek服务器繁忙问题 一、用户端即时优化方案 二、高级技术方案 三、替代方案与平替工具(最推荐简单好用) 四、系统层建议与官方动态 用加速器本地部署DeepSeek 使用加速器本地部署DeepSeek的完整指南 一、核心原理与工具选择 二、…...
node.js+兰空图床实现随机图
之前博客一直用的公共的随机图API,虽然图片的质量都挺不错的,但是稳定性都比较一般,遂打算使用之前部署的兰空图床,自己弄一个随机图 本文章服务器操作基于雨云——新一代云服务提供商的云服务器进行操作,有兴趣的话可…...
DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗?
DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗? 文章目录 DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗?一、引言1. 背景2. 问题 二、DeepSeek vs ChatGPT:谁更胜一筹?2.1 语言生成能力评测对比场景…...
mac搭建环境
从0-1搭建mac环境 先查看自己的芯片信息 bash uname -mbash-3.2$ uname -m arm64这里是自己的型号安装brew xcode-select --install xcode-select -p /bin/zsh -c “$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)” source /Users/lanren/.…...
【R语言】t检验
一、基本介绍 t检验(t-test)是用于比较两个样本均值是否存在显著差异的一种统计方法。 t.test()函数的调用格式: t.test(x, yNULL, alternativec("two.sided", "less", "greater"), mu0, pairFALSE, var.eq…...
尚硅谷爬虫note005
一、编解码 1.get请求的quote方法 将汉字转为Unicode字符 # _*_ coding : utf-8 _*_ # Time : 2025/2/12 16:33 # Author : 20250206-里奥 # File : demo19_get请求的quote方法 # Project : PythonProject10-14# 景甜page # https://www.baidu.com/s?ieutf-8&f8&rsv…...
词袋模型和词嵌入模型区别和关联分析(词袋模型是否属于词嵌入模型)
词袋模型(Bag of Words, BoW)不属于词嵌入模型,它们是两种完全不同的文本表示方法。以下从多个维度对比二者的核心区别 1. 本质区别 特性词袋模型 (BoW)词嵌入模型 (Word Embedding)表示形式离散的稀疏向量(高维,维度…...
借用python 学习 VM的 FTP(VisionMaster4.3)
无懒不python:看官方V社区有介绍: 需要安装 Quick Easy FTP Server V4.0.0.exe 为了表示敬意再次放出链接: V社区-机器智能技术交流-VM关于FTP存图的一点分享 好了VM先放一边 先用python自收 自发: 毕竟这个免费 FTP服务端: 0.ftpserver.py 需要安装的库 和 注意事项已经在…...
BDD风格测试
BDD风格测试(Behavior-Driven Development) BDD(行为驱动开发)是一种以自然语言描述系统行为的测试方法论,强调团队协作与业务价值验证。结合Mockito的BDD风格API,可以编写更符合业务场景描述、更易读的测…...
[免费]Springboot+Vue医疗(医院)挂号管理系统【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的SpringbootVue医疗(医院)挂号管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue医疗(医院)挂号管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 在如今社会上,关于信息上…...
Linux 查看磁盘中的大文件
在 Linux 系统中,你可以使用以下方法来查看磁盘中的大文件信息: 1. 使用 find 命令 find 命令可以递归查找指定目录下的大文件。 find /path/to/directory -type f -size 100M -exec ls -lh {} \;/path/to/directory:要查找的目录路径&…...
浅识MQ的 Kafka、ActiveMQ、RabbitMQ、RocketMQ区别
DeepSeek回复: 以下是主流消息队列(MQ)的对比分析,结合核心特性、适用场景和实际案例说明: 一、主流MQ对比分析 维度 Kafka RabbitMQ RocketMQ ActiveMQ所属公司Apache(LinkedIn开源)…...
君海游戏岗位,需要私我
游戏岗位内推啦,需要找我哈 共14个职位 广告投放主管 社会招聘全国 广告投放 社会招聘全国 设计主管 社会招聘全国 海外投放 社会招聘广东省广州市 海外运营 社会招聘广东省广州市 产品运营专员 社会招聘广东省广州市 平台运营 社会招聘广东…...
Vue2/Vue3分别如何使用Watch
在 Vue 2 和 Vue 3 中,watch 用于监听数据的变化并执行相应的逻辑。虽然两者的核心功能相同,但在语法和使用方式上有一些区别。以下是 Vue 2 和 Vue 3 中使用 watch 的详细说明: Vue 2 中的 watch 在 Vue 2 中,watch 是通过选项式…...
boss直聘登录 网易易盾 无感 滑块 分析
声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向分析 实测网站是存在风控的比较…...
蓝桥杯 Java B 组之日期与时间计算(闰年、星期计算)
Day 5:日期与时间计算(闰年、星期计算) 在编程竞赛中,日期和时间计算是常见考点,涉及 闰年判断、星期计算、日期间隔计算 等问题。本日的学习目标: 判断闰年计算某个日期是星期几计算两个日期之间相差多少…...
51单片机之引脚图(详解)
8051单片机引脚分类与功能笔记 1. 电源引脚 VCC(第40脚):接入5V电源,为单片机提供工作电压。GND(第20脚):接地端,确保电路的电位参考点。 2.时钟引脚 XTAL1(第19脚&a…...
掌控系统性能的利器:自动化系统性能监控工具
友友们好! 我的新专栏《Python进阶》正式启动啦!这是一个专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会找到: ● 深入解析:每一篇文章都将…...
用大模型学大模型03-数学基础 概率论 随机变量 概率分布
deepseek.com:什么是概率,什么是随机变量?深度学习中常用概率的分布有哪些? 1. 什么是概率? 概率是描述事件发生的可能性的数值,范围在 0 到 1 之间: 0:事件不可能发生。1:事件必…...
ASP.NET Core 使用 FileStream 将 FileResult 文件发送到浏览器后删除该文件
FileStream 在向浏览器发送文件时节省了服务器内存和资源,但如果需要删除文件怎么办?本文介绍如何在发送文件后删除文件;用 C# 编写。 另请参阅:位图创建和下载 使用FileStream向浏览器发送数据效率更高,因为文件是从…...
如何使用DHTMLX Scheduler的拖放功能,在 JS 日程安排日历中创建一组相同的事件
DHTMLX Scheduler 是一个全面的调度解决方案,涵盖了与规划事件相关的广泛需求。假设您在我们的 Scheduler 文档中找不到任何功能,并且希望在我们的 Scheduler 文档中看到您的项目。在这种情况下,很可能可以使用自定义解决方案来实现此类功能。…...
UE_C++ —— Unreal Interfaces
目录 一,Declare an Interface in C 二,Interface Specifiers 三,Implement an Interface in C 四,Declare Interface Functions 五,C Only Interface Functions 六,Blueprint Callable Interface Fu…...
mapbox 从入门到精通 - 目录
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀总目录1.1 ☘️ mapbox基础1.2 ☘️…...
CentOS搭建PPPOE服务器
一、安装软件包 yum -y install rp-pppoe 二、配置服务器 1.修改配置文件 打开/etc/ppp/pppoe-server-options文件 nano /etc/ppp/pppoe-server-options 编辑为以下内容: # PPP options for the PPPoE server # LIC: GPL require-pap require-chap login …...
在 CentOS 系统中配置交换空间(Swap)解决内存不足
🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 …...
pytorch训练五子棋ai
有3个文件 game.py 五子棋游戏 mod.py 神经网络模型 xl.py 训练的代码 aigame.py 玩家与对战的五子棋 game.py class Game:def __init__(self, h, w):# 行数self.h h# 列数self.w w# 棋盘self.L [[- for _ in range(w)] for _ in range(h)]# 当前玩家 - 表示空 X先…...
超越DeepSeek R1的Moe开源大模型 Qwen2.5-max 和 Qwen Chat Web UI 的发布,阿里搅动AI生态
敲黑板,说重点,最近阿里推出的 Qwen2.5-max 和 Qwen Chat Web UI,将对AI生态又一次冲击。 说冲击,因为 DeepSeek R1的热潮还未散退的情况下,由于服务器压力不能注册新的API,然后价格涨价,服务有…...
动态规划两个数组的dp问题系列一>两个字符串的最小ASCII 删除和
这里写目录标题 题目解析:状态表示:状态转移方程:初始化:填表顺序:返回值:代码呈现: 题目解析: 状态表示: 状态转移方程: 初始化: 填表顺序&#…...
【C语言】程序环境与预处理
目录 程序的翻译环境和执行环境 粗谈编译链接 翻译环境 编译的几个阶段及链接 运行环境 预处理详解 预定义符号 #define #define 定义标识符 #define 定义宏 #define 替换规则 #和## 带副作用的宏参数 宏和函数的对比 命名约定 #undef 命令行定义 条件编译 …...
DeepSeek 背后的技术:GRPO,基于群组采样的高效大语言模型强化学习训练方法详解
强化学习(Reinforcement Learning, RL)已成为提升大型语言模型(Large Language Models, LLMs)推理能力的重要技术手段,特别是在需要复杂推理的任务中。DeepSeek 团队在 DeepSeek-Math [2] 和 DeepSeek-R1 [3] 模型中的…...
AnythingLLM打造私有知识库
一、 OllamaDeepSeek安装 https://blog.csdn.net/Stestack/article/details/145405151?spm1001.2014.3001.5502二、 nomic-embed-text nomic-embed-text主要用于文本嵌入和句子相似度任务,能够将这些任务应用于分类、聚类、检索等多种自然语言处理场景。该模型在…...
springboot多数据源事务管理
在Java应用中,使用多数据源时,事务管理是一个常见且复杂的问题。由于每个数据源都有自己的事务管理器,跨多个数据源的事务管理需要特别处理。以下是几种常见的解决方案: 1. JTA(Java Transaction API) JT…...
Lineageos 22.1 aosp15 定制学习专栏介绍
一.前言 学习了一段时间的rom开发,需求也大概做了一些,但是一直没有记录下来总结,这个专栏开始会基于如下平台开始尝试做一些常见模块的需求定制,记录学习,如果有错误欢迎指正,大家一起学习!至于pixel编译…...
win10中mstsc远程Centos-Stream 9图形化界面
文章目录 1 前置状态2 安装配置XRDP3 关闭SELinux3.1 查看selinux状态3.2 关闭selinux 4 启动XRDP5 Win10远程连接测试 1 前置状态 已安装CentOS9桌面版;Windows10。 2 安装配置XRDP sudo yum install epel-release sudo yum install xrdp sudo yum install tige…...
【Deepseek】解决Deepseek服务器繁忙的问题
随着Deepseek的爆火越来越多的人使用Deepseek,就导致很多情况下出现服务器繁忙的情况。本博客将讲述如何使用Deepseek不卡顿或者出现服务器繁忙的情况。 一.绕开官方服务器 现在无论是网页版还是app都是在访问【深度求索】的官方服务器,所以才会出现服务器繁忙的…...
【实战篇】室内设计师如何利用 DeepSeek 做设计:从灵感到落地的全方位指南
大家好!今天咱们来聊聊一个超级有趣的话题——室内设计师如何利用 DeepSeek 做设计。如果你是一名室内设计师,或者对室内设计感兴趣,那你一定知道,设计不仅仅是画画图、选选颜色那么简单。它涉及到灵感搜集、空间规划、材料选择、预算控制、客户沟通等一系列复杂的过程。而…...
从 ClickHouse 到 Apache Doris:在网易云音乐日增万亿日志数据场景下的落地
导读:日志数据已成为企业洞察系统状态、监控网络安全及分析业务动态的宝贵资源。网易云音乐引入 Apache Doris 作为日志库新方案,替换了 ClickHouse。解决了 ClickHouse 运维复杂、不支持倒排索引的问题。目前已经稳定运行 3 个季度,规模达到…...
Linux执行一条命令并自动重试直到成功,自动化脚本
编辑filename.sh文件 sudo vim filename.shi 插入模式,编辑文件 # 定义函数来执行并重试每个命令 execute_with_retry() {local cmd"$1"while true; do# 执行命令,并将返回状态存储在STATUS变量中eval $cmdSTATUS$?# 检查命令是否成功&…...
洛谷 acwing刷题 有关图的存储形式和djstra算法的例题
在以往的408学习中,我们 往往采用邻接表和邻接矩阵解决图的存储问题, 但是经过刷题过程发现也有一种新的存储形式值得我们学习,废话不多说,直接上代码 讲解 初始的数组 int e[N], w[N], ne[N], h[H], idx; 算法过程 void add…...
SQL 大厂面试题目(由浅入深)
今天给大家带来一份大厂SQL面试覆盖:基础语法 → 复杂查询 → 性能优化 → 架构设计,大家需深入理解执行原理并熟悉实际业务场景的解决方案。 1. 基础查询与过滤 题目:查询 employees 表中所有薪资(salary)大于 10000…...
用 Python 实现 DeepSeek R1 本地化部署
DeepSeek R1 以其出色的表现脱颖而出,不少朋友想将其本地化部署,网上基于 ollama 的部署方式有很多,但今天我要带你领略一种全新的方法 —— 使用 Python 实现 DeepSeek R1 本地化部署,让你轻松掌握,打造属于自己的 AI…...
ToDesk远程打印详细设置步骤教学
很多小伙伴常有打印、远程打印的需求,特别是对于电商人、跨境电商、教师、产品经理、实验人员等群体来说掌握这项技能可谓是能够在很多场景下带来便捷,大幅提升做事效率!那么是否有方法可以随时随地实现这样需求呐?答案是肯定的&a…...
spring 学习 (注解)
目录 前言 常用的注解 须知 1 Conponent注解 demo(案例) 2 ControllerServiceRepository demo(案例) 3 ScopeLazyPostConstructPreDestroy demo(案例) 4 ValueAutowiredQualifierResource demo(案例) 5 Co…...
【学术投稿-第四届智能电网和绿色能源国际学术会议(ICSGGE 2025)】CSS基本选择器详解:掌握基础,轻松布局网页
可线上 官网:www.icsgge.org 时间:2025年2月28-3月2日 目录 前言 一、基本选择器简介 1. 元素选择器(Type Selector) 基本语法 示例 注意事项 2. 类选择器(Class Selector) 基本语法 示例 注意…...
5种解决方式来应对deepseek暂时无法回答
在工作中,你是否常常遇到deepseek回复“暂时无法回答”的情况?根据某权威机构的调研数据显示,约73%的用户在使用此类工具时遇到过类似问题,这严重影响了工作效率和体验。本文将为你提供5种实测有效的解决方法,帮助你快…...
【C/C++算法】从浅到深学习--- 二分查找(图文兼备 + 源码详解)
绪论:冲击蓝桥杯一起加油!! 每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论: 本章是算法篇章的第三章二分算法,本章主要是通过题目的形式来进行学习&…...