- 博客(272)
- 资源 (1)
- 收藏
- 关注
原创 主流APP开发软件对比
跨平台开发能实现“一套代码适配多平台”,大幅降低双平台开发的成本和周期,适合小团队、个人开发者,主流工具的性能已接近原生。原生开发能最大化适配对应系统,实现极致性能和完整原生功能。
2025-11-15 22:37:05
399
原创 从丝印判断ESP32-WROOM-32E模组Flash容量
ESP32-WROOM-32E模组的Flash容量可选,判断方式如下:4、8、1632、64、128。
2025-11-15 16:33:20
251
原创 墨水屏花屏问题
摘要: 花屏现象表现为部分或全屏显示异常,与驱动IC默认分辨率有关。主要原因包括:1)BUSY引脚电平设置错误,未正确判断忙状态导致花屏;2)硬件电路问题,如采样电阻值不匹配(0.47Ω换为2.2Ω后仍异常)。测试发现即使用对应型号配置仍出现花屏,最终判定为硬件故障问题。需注意不同型号墨水屏的BUSY状态电平可能相反。
2025-11-12 19:17:16
213
原创 Audio Extractor 视频提取音频工具
Pazera Software是一家个人开发者网站,提供免费音视频处理工具,包括Free MP4 Video Converter(视频转MP4)和Free Audio Extractor(视频音频提取)。Free Audio Extractor操作简单:添加视频文件后设置输出参数(可默认),点击转换即可生成MP3等音频文件。界面直观,适合快速提取音频需求。(98字)
2025-10-24 17:20:56
402
原创 【VSCode中git管理工具】无法初始化仓库
在VSCode中创建仓库时若显示"Open Repository"而非"Initialize Repository",通常是因为项目中含有残留的.git文件。通过PowerShell命令Get-ChildItem -Recurse -Filter ".git"可查找.git文件,使用Remove-Item -Recurse -Force删除这些文件后,重新打开项目即可恢复"Initialize Repository"功能,正常创
2025-10-21 17:22:50
241
原创 ESP32启动过程
ESP32启动过程分为四个阶段:1)硬件复位与上电初始化,包括时钟启动和电源管理;2)ROM中的第一阶段Bootloader检测启动模式并初始化硬件;3)第二阶段Bootloader从Flash加载应用程序镜像,解析分区表并进行硬件配置;4)应用程序启动后执行初始化并进入主循环。整个过程涉及多级引导和严格校验,确保系统可靠启动。
2025-10-20 19:43:08
982
原创 混音器、均衡器
混音器和均衡器是音频处理的核心工具。混音器用于混合多个音频信号源,可调节音量、声道分布等参数,广泛应用于音乐制作和广播领域。均衡器则通过调整不同频段的增益来改变音色和音质,能增强低频或消除啸叫,使各乐器声音更清晰分离。两者都提供直观的操作界面,如推子、旋钮和滑块,支持精确的音效调节。
2025-10-17 10:38:59
215
原创 DLL与PLL时钟区别
DLL(延迟锁定环)和PLL(锁相环)是两种常用的时钟同步技术。DLL通过调整时钟信号的延迟和相位来实现同步,但不改变频率,适用于芯片内模块间的时钟对齐。PLL则能将输入时钟频率变换为整数或分数倍输出,同时保持相位同步,可为不同频率需求的电路模块提供适配时钟。两者分别在时钟同步和频率转换领域发挥着重要作用。
2025-10-16 11:04:02
180
原创 .elf 文件
elf文件是的缩写,是一种跨平台、跨架构的标准二进制文件格式,广泛用于嵌入式系统(如 ESP32/ESP32-S3)、Linux 等系统中,核心作用是。
2025-10-13 09:34:17
513
原创 VSCode中新建esp32项目报错:Cannot read properties of undefined (reading ‘fsPath‘)
摘要: 在未打开任何路径时,点击New project创建工程会报错Cannot read properties of undefined (reading 'fsPath')(如图)。解决方法为:先点击Open Folder随意打开一个目录(该目录并非项目路径),再创建工程即可。实际项目路径由主界面的Project directory指定。
2025-10-08 14:27:01
228
原创 ESP32 按键唤醒:从原理到实战配置
本文介绍了ESP32深度睡眠模式下通过RTC GPIO实现按键唤醒的完整方案。ESP32深度睡眠时仅RTC GPIO能检测外部信号,支持低至微安级的功耗。关键点包括:1)仅部分GPIO支持RTC功能,部分需外接上拉电阻;2)硬件接线需将按键连接RTC GPIO和GND;3)软件需配置引脚模式、上拉/下拉及唤醒触发条件。实现流程为初始化RTC GPIO→配置EXT0唤醒源→进入深度睡眠→唤醒后执行任务→重新睡眠。该方案适用于需要极低功耗的物联网设备场景。
2025-09-30 17:54:23
408
原创 TP4054和TP4056对比
TP4054与TP4056是两款单节锂电池充电管理IC,主要差异在于充电电流、散热和功能。TP4054最大充电电流600mA,采用小型SOT-23-5封装,适合蓝牙耳机等小容量设备;TP4056支持1A充电,带散热焊盘,具有双灯指示和温度保护,更适合移动电源等中大容量应用。选择时需根据设备功耗和散热需求决定。
2025-09-19 18:36:11
285
原创 SOP-8与ESOP-8的区别
SOP-8和ESOP-8是两种8引脚表面贴装封装,外观尺寸和引脚布局基本相同。关键区别在于ESOP-8底部增加了外露金属散热焊盘(EP),可直连PCB铜箔,散热性能显著提升。这使得ESOP-8更适合1W以上功率或大电流芯片应用,而普通SOP-8无此散热设计。从正面看两者外观一致,但ESOP-8背面可见突出的散热焊盘结构。
2025-09-16 18:36:26
598
原创 浏览器是如何加载HTML页面的?
请求资源:DNS 解析 → 建立 TCP 连接 → 发送 HTTP 请求 → 接收 HTML/CSS/JS 等资源。解析结构:HTML 解析为 DOM 树 → CSS 解析为 CSSOM 树。计算样式与位置:DOM + CSSOM 生成渲染树 → 布局计算元素位置宽高。渲染呈现:绘制图层 → 合成图层 → 显示到屏幕。这个流程中,任何一步的效率(如资源加载速度、CSS 复杂度)都会影响页面的“首屏加载时间”,也是前端性能优化的核心关注点。
2025-08-18 14:22:34
412
原创 谷歌开源免费可商用字体
可变字体版本,它通过一个文件实现不同粗细(权重),现代系统支持好。Sans-serif = “干净利落”的现代字体(更简洁),黑体。筛选简体中文字体(Chinese Simplified)Serif = 有“装饰尾巴”的字体(更正式),宋体。文件,固定粗细的传统字体文件,适合几乎所有平台。我想要笔画简洁清晰的黑体,所以选择。
2025-07-25 16:12:29
397
原创 C++查找:std::find_if
文章摘要: 本文针对已掌握STL基础的C++开发者,重点讲解<algorithm>中的find_if算法。该算法通过“区间+判断函数”组合,查找首个符合条件的元素。核心要点包括: 基本用法:Lambda作为谓词,返回迭代器或end(); 典型场景:结构体字段查找(如年龄≥18)、map值查询(非键); 进阶技巧:忽略大小写、捕获外部变量、反向迭代器、find_if_not取反逻辑; 注意事项:必须检查返回值是否为end()以避免未定义行为。适用于C++11及以上,C++17/20可结合结构化绑定
2025-06-22 11:06:34
701
原创 FreeRTOS事件组(Event Group)
FreeRTOS事件组是一种高效的多任务同步机制,支持AND/OR逻辑等待条件。其核心是一个32位标志字,其中0-23位为用户自定义事件位。关键API包括创建/删除、设置/清除位、等待位变化和同步屏障等操作。事件组适用于多任务对同一事件作出反应或需等待多种条件同时满足的场景,比轮询或多个信号量更简洁高效。使用时需注意仅使用0-23位,中断中只能调用FromISR版本,并合理管理标志位清除时机。相比POSIX标准,事件组可对应pthread_cond+mutex或pthread_barrier的功能。
2025-06-21 16:20:27
360
原创 C++11 范围-for 循环:range-based for loop
范围-for循环是C++11引入的简洁遍历语法,支持任何具有begin()/end()迭代器的容器(如vector、list、数组等)。其核心写法为for(declaration : container),编译器会自动生成迭代器循环。常见声明方式包括:auto elem(按值拷贝)、auto& elem(按引用可修改)和const auto& elem(按常量引用只读)。相比传统迭代器写法,范围-for具有简洁(无需手动操作迭代器)、安全(自动边界检查)和通用(统一语法支持各类容器)三大优势
2025-06-20 16:26:28
309
原创 C++互斥锁:std::mutex
C++ std::mutex 简介 std::mutex 是 C++11 标准库提供的互斥锁,用于防止多线程数据竞争。通过头文件 <mutex> 引入,封装了底层操作系统的互斥机制。基本用法是在访问共享资源前调用 lock(),访问后 unlock()。推荐使用 std::lock_guard 自动管理锁生命周期,它在构造时加锁,析构时解锁,利用 RAII 模式避免因异常或提前返回导致的死锁问题,比手动管理更安全可靠。
2025-06-15 15:18:02
511
原创 C++11函数封装器 std::function
C++11的std::function是一个通用函数封装器,可以包装各种可调用对象(普通函数、lambda、成员函数等)。其语法为std::function<返回类型(参数列表)>变量名,具有类型安全、可赋值、可为空等特点,能统一不同可调用对象的接口。示例展示了如何用std::function封装普通函数、lambda表达式和仿函数。该工具提供了存储和调用函数的灵活方式,是C++回调机制的重要组件。
2025-06-15 14:26:56
268
原创 C++泛型编程:模板
C++模板是一种泛型编程机制,允许编写支持多种数据类型的通用代码。分为函数模板和类模板两种形式:函数模板通过template<typename T>声明类型参数,可创建类型无关的函数;类模板同样使用类型参数定义泛型类。使用时可以显式指定类型或让编译器自动推导。模板代码必须放在头文件中,因为其实例化发生在编译期间。典型应用包括STL容器和算法。
2025-06-15 10:02:49
270
原创 嵌入式常见 CPU 架构
本文对比了8种主流嵌入式处理器架构,涵盖PIC、8051、MIPS等传统架构和ARM、RISC-V等现代架构。传统架构中,PIC适合低功耗控制,8051以低成本著称,MIPS常用于网络设备。现代架构方面,ARM Cortex-M系列占据中高端MCU市场,Cortex-A支持复杂系统;Xtensa以可定制性见长;开源RISC-V正快速崛起。各架构在指令集、功耗、性能及生态支持方面各有特点,适用于从简单控制到AI边缘计算等不同场景。新型架构正推动嵌入式系统向高性能、低功耗和开源化方向发展。
2025-06-04 18:24:35
555
原创 HTML 中 class 属性介绍、用法
HTML 的 class 属性用法总结 class 是 HTML 元素的核心属性,主要作用包括: 🎨 连接 CSS 样式 ⚙️ 绑定 JavaScript 行为 🧩 表达语义结构 在原生 CSS 中,通过定义类样式并应用: 提交 Tailwind CSS 采用原子类组合: Alpine.js 通过:class动态绑定类名: 三元表达式适合二选一状态 对象语法适合多条件控制 注意:使用的类名需预先定义样式。
2025-06-02 11:33:46
1796
原创 Jinja2 模板继承机制
Jinja2模板继承机制解析 本文介绍了Python常用模板引擎Jinja2的模板继承功能。模板继承可以避免代码重复,实现统一的网页布局,提高开发效率。关键语法包括extends声明继承关系和block定义可替换区域。文中提供了父模板和子模板的代码示例,展示了如何继承基础模板结构并替换特定内容区域。通过super()方法可以保留父模板原有内容。这种机制特别适用于多页面网站开发,能够有效减少重复代码和维护成本。
2025-05-31 22:32:56
387
原创 Linux 实用排查指南:如何快速查出谁在吃内存
Linux服务器内存占用排查指南 当服务器变慢或内存报警时,需要快速定位内存占用高的进程。本文介绍两种常用方法: ps命令:ps aux --sort=-%mem | head -n 15可静态列出内存占用前15的进程,包含PID、%MEM等关键信息,适合快速筛查。 top命令:动态监控系统资源,按Shift+M可排序内存占用,E切换单位为MB。适合实时观察进程变化。 找到高内存进程后,需判断是否为必要服务,决定是否关闭或优化。
2025-05-28 20:53:25
1147
原创 内存不够?用 Swap 顶一顶:Linux 虚拟内存实战指南
本文介绍了Linux系统中的Swap(交换空间)功能及其配置方法。Swap是在内存不足时将不活跃数据临时存储到硬盘的机制,可防止系统因内存不足崩溃。文章详细讲解了使用swap文件的配置步骤:创建swap文件、设置权限、格式化、启用并设置开机自动挂载,推荐将swappiness值设为10以减少swap使用。同时提供了删除swap的方法和便捷的一键配置脚本。Swap适合小内存服务器使用,但过度依赖会影响性能,需权衡利弊。
2025-05-28 18:48:55
562
原创 tmux 入门实用指南(面向远程 Linux 开发者)
tmux:远程终端会话管理利器 tmux是一款终端复用工具,支持多窗口/面板操作,保持任务在SSH断开后持续运行。 核心功能: 安装:apt/yum install tmux 会话管理:new -s创建、attach -t恢复、Ctrl+B D脱离 窗口操作:Ctrl+B C/N/P新建/切换窗口,%/"分屏 持久化运行:后台执行命令tmux new -s build 'cmd' 适用场景:长时间编译、模型训练、云服务器任务等。通过tmux实现断网不中断,大幅提升远程工作效率。 一句话:"
2025-05-27 09:23:04
566
原创 MySQL权限管理:层级化作用域、权限分类、操作命令
MySQL权限体系基于层级化作用域设计,分为全局级、数据库级、表级、列级和例程级5个层级。权限分为管理权限(用户管理和服务器管理)和数据库权限(数据操作、对象定义和例程级权限)。使用SHOW GRANTS可查看用户权限,GRANT命令用于分配权限,支持全局、数据库、表、列和存储过程等多级作用域。权限分配时可指定用户、主机、密码及是否允许转授权,ALL PRIVILEGES表示当前作用域下的所有权限。
2025-05-25 15:42:41
1194
原创 解析 Flask 上下文机制:请求上下文、应用上下文
Flask框架通过请求上下文和应用上下文实现环境隔离机制。请求上下文(request/session)处理单个HTTP请求的专属数据,在请求开始和结束时自动创建销毁;应用上下文(current_app/g)管理应用级资源,支持非请求场景访问。二者依赖LocalStack实现线程安全隔离,保证多线程并发下的数据安全。这种机制使开发者无需显式传参即可全局访问环境数据,是Flask处理请求逻辑和扩展开发的核心基础。理解上下文机制对掌握Flask数据库会话、模板渲染等功能至关重要。
2025-05-24 11:05:47
1442
原创 Flask 会话管理:从原理到实战,深度解析 session 机制
Flask 的 session 机制通过客户端 Cookie 实现会话管理,解决了 HTTP 协议无状态的问题。服务器在用户登录时生成签名并将会话数据存储在 Cookie 中,客户端在后续请求中自动携带该 Cookie。服务器通过验证签名确保数据完整性,防止篡改。Flask session 的优势在于轻量和分布式友好,但存在数据大小限制和明文存储的风险。使用时需设置 secret_key 并配置安全标志(如 Secure、HttpOnly、SameSite)以防御 XSS 和 CSRF 攻击。此外,可通过
2025-05-23 17:13:37
1083
原创 Flask-SQLAlchemy数据库查询:query
在 Flask 中使用 SQLAlchemy ORM 时,继承自 db.Model 的模型类会自动获得 query 属性,这是 db.session.query(模型类) 的快捷方式,简化了数据库查询操作。通过 query 属性,可以方便地进行各种查询操作,如按主键查询 (get)、等值过滤 (filter_by)、复杂条件过滤 (filter)、排序 (order_by)、字段选择 (with_entities) 等。查询结果可以通过 first()、all()、one() 等方法获取,还可以使用 cou
2025-05-23 10:55:48
1695
原创 Flask 路由跳转机制:url_for生成动态URL、redirect页面重定向
在 Flask 开发中,url_for() 和 redirect() 是实现路由跳转的关键工具。url_for() 用于根据视图函数名动态生成 URL,支持静态路径、动态参数、查询参数、绝对路径和锚点等功能,避免硬编码,提高代码维护性。redirect() 则用于生成重定向响应,引导客户端跳转到指定 URL,支持多种 HTTP 状态码(如 302、301、303、307),适用于不同场景。两者结合使用,可以优雅地实现页面跳转逻辑,确保代码的灵活性和可维护性。例如,在用户登录后,通过 redirect(url
2025-05-22 11:32:22
1102
原创 Flask 路由装饰器:从 URL 到视图函数的优雅映射
Flask 的路由装饰器 @app.route 是 Flask 框架中用于将 URL 路径与视图函数绑定的核心工具。它通过 app.add_url_rule() 方法将 URL 规则注册到 url_map 中,并在请求处理阶段通过 url_map 匹配 URL 并执行相应的视图函数。路由装饰器支持静态路径、动态参数捕获、多种 HTTP 方法以及通过蓝图(Blueprints)实现模块化路由管理。这些功能使得 Flask 能够优雅地处理复杂的 URL 映射,适用于从简单页面到大型项目的各种场景。
2025-05-21 21:15:15
1351
原创 Python 装饰器:从“语法糖”到“代码神器”的深度解析
Python装饰器是一种高阶函数,通过@语法糖在不修改原函数代码的情况下为其添加额外功能。其核心机制是高阶函数+闭包,典型应用包括日志记录、性能监控和权限校验等。装饰器可实现三层嵌套以接收参数,或通过类装饰器管理状态。使用时需注意保留原函数的元信息,推荐使用functools.wraps。装饰器能有效解耦非核心功能,提升代码复用性和可维护性。<|end▁of▁sentence|>
2025-05-21 17:47:25
919
原创 深入理解 Python 的with语法:资源管理的优雅解决方案
with语法在Python中用于自动管理资源,如文件、数据库连接和线程锁,通过上下文管理器协议(__enter__和__exit__方法)确保资源的正确释放。相比传统的try-finally,with更简洁且安全,避免资源泄漏。常见应用场景包括文件操作、数据库连接和线程锁管理。此外,开发者可以通过自定义类或使用contextlib模块创建上下文管理器,灵活应对各种资源管理需求。使用with时需注意避免滥用,确保其仅用于需要显式释放的资源,并遵循单一职责原则。
2025-05-21 16:21:20
898
原创 Flask-SQLAlchemy核心概念:模型类与数据库表、类属性与表字段、外键与关系映射
本文介绍了如何在 Flask 应用中使用 Flask-SQLAlchemy 进行数据库操作,重点讲解了模型类与数据库表的映射关系、类属性与表字段的对应关系,以及外键与关系映射的实现。通过代码示例,展示了如何定义模型类、配置数据库连接,并使用 db.create_all() 创建数据库表。文章还详细解释了 db.Column 的用法,包括字段类型
2025-05-21 10:11:15
1192
原创 Python 中的类属性与实例属性详解
在 Python 面向对象编程中,类属性和实例属性是两个关键概念,分别用于描述类本身的状态和对象特有的状态。类属性定义在类体中,所有实例共享,通常用于存储通用信息,如类型或计数器。实例属性则在 __init__ 方法中通过 self 定义,每个实例独立拥有,用于描述对象自身的状态。类属性通过类名或实例访问,而实例属性必须通过对象访问。需要注意的是,实例属性可以覆盖同名的类属性,形成实例独有的副本。正确理解和使用这两种属性,有助于编写清晰、健壮的代码。
2025-05-20 18:10:47
720
原创 深入理解 Python 中的几种方法:实例方法、类方法、静态方法与特殊方法
Python 中的方法主要分为四类:实例方法、类方法、静态方法和特殊方法。实例方法是最常见的类型,通过 self 访问和修改实例属性,适用于对象特有的行为。类方法使用 @classmethod 装饰器,通过 cls 访问类属性,常用于工厂方法。静态方法使用 @staticmethod 装饰器,不依赖类或实例状态,适合作为工具函数。特殊方法(魔术方法)以双下划线开头和结尾,用于实现对象的内置行为,如运算符重载和容器协议。合理使用这些方法可以提高代码的封装性和可读性。
2025-05-20 17:54:12
1702
STM32F10x大中小容量启动文件.zip
2020-08-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅