- 博客(129)
- 收藏
- 关注
原创 STM32F407IGH6学习笔记
Cortex-M4 内核(NVIC)理论上能够支持最多 256 个中断,其中包含 16 个系统中断(内核中断)和 240 个外部中断。然而,在实际的产品设计中,芯片厂商通常不会完全利用Cortex-M4 内核提供的所有中断资源。以这款微控制器为例,它虽然基于 Cortex-M4 内核,但只使用了92个中断,其中有10个不可屏蔽中断,82个可屏蔽中断。如下图文及代码/***/具有 16 级可编程中断优先级,82 个可屏蔽中断的打开与关闭、挂起等,都是被寄存器控制。/*!
2025-09-18 22:09:49
409
原创 C++ 编译方法对比:分步编译 vs 一步到位
两种方法各有优势,一步到位适合实际开发,分步编译适合学习和深度调试。在实际项目中,通常使用构建工具(如CMake、Make)来自动化管理这些过程,既保证了效率又提供了灵活性。
2026-01-19 17:47:35
396
原创 STM32F03C8T6通过AT指令获取天气API-下篇
必须修改原因cJSON需要动态内存分配网络数据需要缓冲区函数调用需要栈空间注意事项STM32F103C8T6只有20KB RAM修改后总共使用12KB,还有8KB给全局变量实际使用中监控堆栈使用情况如果还不够用优化代码,减少栈使用使用静态分配代替动态分配减少递归深度优化网络缓冲区大小这样修改后,您的JSON解析和网络通信应该就能正常工作了。
2026-01-18 20:32:45
736
原创 STM32F03C8T6通过AT指令获取天气API-上篇
JSON 解析失败数据被截断cJSON_Parse 返回错误过度复杂化,使用了不适合嵌入式环境的方案(cJSON + 复杂解析逻辑)回归简单,参考成功示例,使用基础的字符串查找函数在嵌入式开发中,简单、可靠、易维护比功能强大更重要!
2026-01-16 22:56:12
612
原创 解决 Windows 11 安装时提示 “不支持 TPM 2.0” 和 “不支持安全启动” 的问题
操作 BIOS 时需谨慎,错误设置可能导致系统无法启动。建议先查阅主板说明书或品牌官网指南(如联想、戴尔等品牌有详细教程)。完成后,重新运行 Windows 11 安装程序即可通过系统要求检测。,若提示“找不到 TPM”,说明未开启或不支持;要解决 Windows 11 安装时提示。(若为 Legacy 则需切换)。,查看“BIOS 模式”是否为。
2026-01-13 12:34:41
1166
原创 解决PlatformIO初始化程序失败、卡在0%等问题
遇到的是 PlatformIO 下载 esp32s3 对应的xtensa-esp32s3工具链包时,多次出现连接中断、下载内容不完整的错误,最终导致包安装失败。这个问题的核心原因是工具链包体积大(约 130MB+),默认国外镜像源网络不稳定,下载过程中连接断开,数据读取不完整。
2026-01-08 11:33:53
416
原创 FreeRTOS 深度研究与实践手册
在嵌入式实时系统中,Cortex-M 处理器的硬件机制(运行模式、特权级、MSP/PSP 双堆栈)是 FreeRTOS 实现“高效调度”“安全隔离”“实时响应”的基础;而 FreeRTOS 则通过软件层的“任务管理”“中断控制”“优先级配置”,将硬件能力转化为工程可用的实时功能。硬件层:提供“模式隔离”“堆栈隔离”“中断仲裁”的底层能力;软件层:通过 API 规则、优先级宏、调度机制,定义硬件能力的使用边界。理解这一协同关系,是掌握 FreeRTOS 底层原理的关键。堆栈指针用途强制使用场景。
2025-11-04 11:03:05
997
原创 STM32位带操作理论实践
用于计算位带别名区地址。:区分SRAM位带区(0x20000000开头)或外设位带区(0x40000000开头)。:计算位带别名区基地址(SRAM别名区基地址为0x22000000,外设为0x42000000:获取位带区内字节偏移量,左移5位(乘以32)。:位编号左移2位(乘以4)。:将地址转换为类型,用于直接访问内存(或寄存器),保证操作的原子性与实时性。
2025-11-01 23:19:12
986
原创 学习STM32F03C8T6遇到的问题及解决方法
Erase Full Chip 会擦除芯片 Flash 中的全部内容,包括用于读写保护的配置信息,从而解除锁定状态,恢复正常烧录功能。只清除保护位,不删除用户程序(仅适用于读保护)当 Keil 中无法正常解锁时使用。
2025-11-01 17:40:27
779
原创 高效清理 C 盘文件的 9 种安全方法
日常维护:开启【存储感知】+ 定期运行【磁盘清理】大空间释放:重点清理休眠文件虚拟内存长期优化:修改软件默认路径 + 扩展 C 盘分区⚠️重要提醒切勿手动删除等系统目录下的未知文件!使用官方工具或上述方法,确保系统稳定安全。
2025-10-29 09:36:57
1437
原创 基于stm32f407开发板的FreeRTOS移植(CubeMX版本)
从官方源码(下图位置)的文件夹中复制FreeRTOSConfig.h,复制到你项目的 FreeRTOS/include 文件夹下并修改 FreeRTOSConfig.h 文件为以下内容(用于解决 SystemCoreClock is undefined、以及各个hook回调未实现的报错)注释掉以下函数。
2025-10-28 16:15:13
221
原创 AI大模型-深度学习相关概念
你提的问题很关键,这些概念是理解大模型数据流转和计算逻辑的基础。简单说,它们是不同维度的“数值容器”,在大模型中分别承担着存储单个参数、单个特征、批量特征和高维复杂特征的角色。张量是对标量、向量、矩阵的“维度扩展”,只要维度≥3,都可以称为张量,维度用“阶数”描述(3维=3阶张量)。向量是“排成一列(或一行)的数值”,有方向和大小,属于1维数据,维度等于数值的个数。矩阵是“排成多行多列的数值表格”,属于2维数据,维度用“行数×列数”表示。标量是最简单的“数值容器”,只有大小,没有方向,属于0维数据。
2025-10-28 14:31:26
1010
1
原创 通过 useEventBus 和 useEventCallBack 实现与原生 Android、鸿蒙、iOS 的事件交互
as const;目标实现方式H5 → 原生调用原生方法原生 → H5原生执行 JS 触发统一事件管理使用枚举定义事件名防止耦合封装成 Hook,便于复用和测试。
2025-10-28 09:28:30
507
原创 ARM Cortex-M 向量表详解
向量表是一个存储在代码存储器(通常是 Flash)起始区域的字对齐数组。其中的每一个字(32位数据)都代表一个特定的地址,称为“向量”。当处理器发生异常(如复位、中断、系统调用)时,内核硬件会自动查询这个表,并根据异常类型跳转到对应的地址执行程序。这是 Cortex-M 处理器处理异常和启动的基石。向量表是地址表:它存的是函数指针,不是代码本身。前两个向量是硬性要求MSP初始值和复位向量是芯片能正常启动的绝对必要条件。地址是逻辑映射的0x00000000。
2025-10-25 20:03:29
868
原创 深入解析Cortex-M运行模式、MSP/PSP与FreeRTOS的协同机制、中断特性与优先级
默认堆栈指针,Handler模式强制使用MSP,用于处理异常/中断的上下文保存、内核关键操作(如FreeRTOS的中断处理)。:专为“用户任务”设计的堆栈指针,线程模式可选择使用PSP,每个任务可拥有独立的堆栈空间,实现多任务的“堆栈隔离”。Cortex-M的运行模式/特权级MSP/PSP双堆栈与FreeRTOS的中断优先级配置任务调度机制硬件层通过模式隔离、堆栈隔离保障系统的安全性与实时性。软件层通过FreeRTOS的优先级宏、API权限控制,实现对硬件机制的精准利用。
2025-10-24 11:14:33
767
原创 中断控制(开关中断)全场景梳理:FreeRTOS、裸机、HAL库
FreeRTOS 的中断控制 API 经过内核封装,需配合优先级配置宏使用,核心是“平衡中断响应与内核安全”,避免中断破坏内核数据结构。15<<45<<4。
2025-10-23 11:59:58
1102
原创 FSMC-灵活的静态存储控制器
在FSMC的Bank 1(NOR/PSRAM控制器)中,为了支持同时连接多个并行的NOR闪存或PSRAM设备,内部划分了4个独立的Subbank(子存储体)。拥有独立的地址空间(每个Subbank占用64MB地址范围);拥有独立的片选信号控制,可单独选中或 deselected 对应的外部设备;可独立配置时序参数(如读写时序、数据宽度等),适应不同规格的NOR/PSRAM设备。FSMC Bank1 NOR/PSRAM 1(即Subbank 1);
2025-10-22 20:54:40
1034
原创 UART、RS232、RS485、I2C 的区别及工程应用场景
定义:用负电压表示逻辑“1”,正电压表示逻辑“0”(与人类直觉相反,故称“负逻辑”)。标准范围-3V ~ -15V(典型值 -12V);+3V ~ +15V(典型值 +12V)。设计目的:通过宽幅电压提升抗干扰能力,适合中距离传输(如工业设备间通信)。TTL 是芯片级短距离通信的正逻辑电平标准,而 RS232 是设备级中距离通信的负逻辑电平标准。两者的核心差异在于电平范围、逻辑极性和传输距离,工程中需通过电平转换芯片(如 MAX232)实现兼容。
2025-10-22 20:54:20
932
原创 FreeRTOS主要寄存器说明及面试题
Cortex-M 内核为什么设计两个栈指针(MSP 和 PSP)?考点: 理解设计哲学和根本目的。参考答案安全性与隔离性: 将操作系统内核(或异常处理程序)使用的栈与用户任务使用的栈分离开。即使某个用户任务栈(PSP)发生溢出或损坏,也不会影响内核和中断处理程序(MSP)的稳定运行。支持多任务操作系统(RTOS): 每个任务都可以拥有自己独立的栈空间(通过不同的 PSP 值实现)。任务切换时,只需切换 PSP 的指向,即可实现任务上下文的隔离,这是现代 RTOS 实现多任务的基础。可靠性。
2025-10-22 18:10:12
876
原创 FreeRTOS学习笔记
终结方式触发条件资源回收者合法性适用场景自然返回(无while/Delete)任务执行到函数末尾无❌ 非法永远不应发生自我终结(任务主动调用空闲任务✅ 合法一次性任务(初始化、临时处理)外部终结(其他任务通过句柄调用空闲任务✅ 合法动态任务管理(如按需终止服务)权限与堆栈:MSP管特权(启动、中断),PSP管用户任务,SVC/PendSV实现安全切换;任务原则:永不自然返回,需while(1)或,空闲任务负责资源回收;中断优先级。
2025-10-22 18:02:07
699
原创 STM32f407IGH6的位运算详解
操作后,的第 12-15 位变为1010PB6(13:12 位)=10→ 复用功能模式。PB7(15:14 位)=10→ 复用功能模式。这两行代码组合实现了对 PB6 和 PB7 引脚模式的精确配置,先清除旧配置,再设置新模式,避免干扰其他位。
2025-10-11 10:33:54
458
原创 半导体学习笔记
由于磷元素的加入,带来了更多的自由电子使半导体中负电荷载流子的数量大幅增加,因此这种半寻体被称为N型(Negative)半导体。N型半导体的自由电子被吸引至P区导致N型半导体PN结中间区域带正电,P型半导体带负电,从而形成内建电场。指在本征半导体中,由于外部的热能、光能、电场等激励下在材料内部形成自由电子+空穴对的现象。硅晶体在高温下,能从绝缘体变成导体,是其材料的天然物理特性,是不需要掺杂任何其他的成分。,硼原子会努力的和周围的硅原子形成共价键, 并且会因为缺1个电子,形成"向硅晶体中掺杂适量的磷原子,
2025-09-11 17:11:55
1060
原创 数据结构与算法-线性表
在您提供的栈实现中,弹出的元素确实不再属于栈的逻辑部分,但其占用的内存仍然被保留在栈的存储空间中,不会被立即释放或销毁。只有在栈缩容或销毁时,这些内存才会被真正释放。如果需要立即释放内存,需要考虑不同的数据结构设计。
2025-09-03 20:47:41
188
原创 通过指针动态为数组分配内存引发sizeof无法计算实际数组元素个数的问题
这段C语言代码演示了动态数组的创建和使用。首先分配5个整型元素的内存空间,然后初始化数组值为1-5。通过指针运算实现sumArray函数计算数组元素总和,并打印数组元素和总和。最后释放分配的内存。注意代码中提到的sizeof运算符对动态数组的限制,需要手动维护数组大小。
2025-09-01 16:12:03
155
原创 指针数组与数组指针的区别
创建了一个指向数组第一个元素的指针,适用于大多数数组操作创建了一个指向整个数组的指针,主要用于处理多维数组两种指针的值相同(指向同一地址),但类型不同,导致指针算术运算的行为不同理解这一区别有助于编写更准确和高效的C代码,特别是在处理多维数组时。
2025-09-01 15:11:01
251
原创 结构体成员大小及内存对齐练习
本文介绍了两种初始化结构体的方法:动态内存分配(使用malloc)和静态分配(栈上变量)。两种方法都演示了如何正确初始化结构体成员,包括整型、字符串、数组等类型。动态分配方式需要手动释放内存,而静态分配由系统自动回收。代码示例展示了结构体的大小计算(32字节)和指针操作,并验证了内存地址变化。两种方式都能有效实现结构体初始化,开发者可根据实际需求选择合适的内存分配策略。
2025-09-01 11:07:14
233
原创 为什么计算机使用补码存储整数:补码的本质
摘要:计算机中,两个绝对值相同的有符号整数(相反数)的和在补码运算下会归零。以8位整数+5(00000101)和-5(11111011)为例,相加得到100000000,舍弃最高位进位后剩00000000(即0)。补码设计使相反数相加产生全0+进位1,固定位数运算舍弃进位后结果必为0。这解释了计算机如何通过补码将减法转化为加法运算。
2025-08-31 21:41:27
603
原创 Kafka存储机制核心优势剖析
相同7200转HDD,Kafka顺序写吞吐可达600MB/s,而随机写仅约100KB/s ——Kafka将内存管理权交给OS内核,规避JVM GC开销,同时通过。Kafka跳过JVM堆,直写Page Cache,从根源消除冗余。,这正是其成为大数据管道核心的基石。最大化磁盘IOPS(机械盘可达600MB/s,SSD更高)⚠️ 性能下降约50%,仅用于金融级场景。稳定小于内存10%时,系统处于健康状态。,是Kafka碾压传统MQ性能的关键。Producer写入。Broker接收数据。Consumer读取。
2025-06-05 10:35:18
1261
原创 Kafka深度解析与原理剖析
当Leader切换时,新Leader会将其HW设置为当前LEO,Follower比较自身HW与Leader的HW,将本地日志截断到HW位置,确保数据一致。:可直接在服务器上观察(如Broker进程、/tmp/kafka-logs下的Segment文件):新集群优先采用KRaft模式,Kafka 3.0+已支持生产可用。:无直接物理映射,通过Broker协调实现逻辑功能。(如Partition)实现水平扩展与并行处理,启用压缩,Broker保持压缩状态存储。(如Broker)提供实际服务能力,
2025-06-05 10:31:06
1408
原创 Nginx实现用户维度路由到特定网关的方法(二)
通过Nginx的用户ID哈希路由和本地限流高效用户维度治理:减少分布式存储依赖,提升限流性能。会话粘性:确保同一用户请求集中,简化限流状态管理。多层防护:接入层(Nginx)过滤高频请求,网关层(Spring Cloud Gateway)细化服务级限流,形成完整流量治理体系。适用场景高并发用户场景(如电商秒杀、社交API),需对用户请求频率严格控制。网关集群部署,通过流量分片提升限流效率和缓存利用率(如同一用户的请求在网关本地缓存命中)。配置建议优先使用进行用户分片,增强网关集群的扩展性。
2025-05-26 11:22:59
902
原创 Nginx 限流机制:请求速率与连接数限制深度解析(一)
请求速率限制:适用于高频短连接场景(如 REST API),通过漏桶算法平滑流量,burst和nodelay灵活处理突发。连接数限制:适用于长连接或批量连接场景(如 WebSocket、爬虫),直接限制资源占用。最佳实践对静态资源(如图片、CSS)优先限制连接数(减少无效连接),动态接口限制请求速率。结合fail2ban等工具,对频繁触发限流的 IP 进行封禁,增强安全防护。与应用层限流(如 Sentinel)协同,形成从接入层到服务层的多层限流体系。
2025-05-26 11:18:43
1251
原创 Spring Cloud Gateway 限流实践:基于 Redis 令牌桶算法的网关层流量治理
在微服务架构中,API 网关作为流量枢纽,需对进入系统的请求进行精细化限流,以保护下游服务免受流量冲击。Spring Cloud Gateway 结合 Redis 实现的令牌桶算法,为网关层限流提供了高效、分布式的解决方案。本文将深入解析其原理、配置及实践优化。2. Redis 连接配置()3. 定义限流维度()4. 网关路由与限流配置()5. 自定义限流响应(全局异常处理)四、高级特性与优化1. 动态限流参数通过配置中心(如 Nacos)动态更新限流参数,实现热更新:2. 多维度组
2025-05-26 11:08:09
1345
原创 系统架构中的限流算法(一)
经过上述的描述,好像漏桶、令牌桶比时间窗口类算法好多了,那么时间窗口类算法是不是就没啥用了呢?其实并不是,虽然漏桶、令牌桶对比时间窗口类算法对流量的整形效果更好,但是它们也有各自的缺点,例如令牌桶,假如系统上线时没有预热,那么可能会出现由于此时桶中还没有令牌,而导致请求被误杀的情况;而漏桶中由于请求是暂存在桶中的,所以请求什么时候能被处理,则是有延时的,这并不符合互联网业务低延时的要求。所以令牌桶、漏桶算法更适合阻塞式限流的场景,即后台任务类的限流。
2025-05-26 09:33:03
1207
原创 系统架构中的限流实践:构建多层防护体系(二)
在系统架构中,限流可以从多个层面实施,不同层面的限流策略互补,形成多层防护体系。通过多层防护,可有效应对流量突发、恶意攻击或系统过载等场景,提升架构稳定性。:从资源层面限制应用的CPU、内存、网络带宽等,防止单个服务占用过多资源。:在分布式系统中统一控制全局流量,解决单体应用限流的一致性问题。:在离用户最近的边缘节点拦截恶意流量或高频请求,减轻源站压力。:针对具体服务或接口的细粒度流量控制,保护应用逻辑和资源。:保护数据库、缓存等底层存储,避免被高频请求压垮。:在请求发起端控制频率,减少无效请求到达后端。
2025-05-26 09:28:00
1125
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅