- 博客(37)
- 问答 (1)
- 收藏
- 关注
原创 彻底搞懂 Socket、TCP、MQTT 通信:三者不是一回事!
本文澄清了物联网开发中Socket、TCP、MQTT三者的区别与联系。Socket是操作系统提供的网络编程接口,属于底层工具;TCP是基于Socket实现的传输层协议,确保可靠有序的数据传输;MQTT则是基于TCP的应用层协议,专为物联网设计的消息通信机制。三者呈"工具→传输→应用"的分层关系:Socket提供基础通信能力,TCP保证传输可靠性,MQTT实现物联网设备间的消息订阅/发布。实际开发中,需根据场景选择TCP(原始数据传输)或MQTT(设备联动控制),而Socket作为底层接口
2025-11-23 13:15:23
670
原创 (学习记录)基于 RT-Thread 的 ATDevice 组件实现以太网式传输
本文探讨了物联网项目中4G模组通信方案的选择问题。通过对比模组自带HTTP/MQTT功能与AT Socket方案的优劣,作者选择了后者结合RT-Thread ATDevice组件的实现方式。该方案将4G模组视为"无线网卡",由MCU通过Socket编程实现数据传输,解决了模组自带协议灵活性不足、可控性差的问题。文章重点分析了AT Socket的工作原理,并详细介绍了RT-Thread ATDevice组件在统一接口、屏蔽模组差异方面的核心作用。这种以太网式通信方案既保持了4G联网能力,又
2025-11-23 12:48:15
592
原创 (学习记录)一文搞懂:为什么 Ymodem OTA 被称为“本地 OTA”?
摘要: Ymodem OTA被称为“本地OTA”是因为其依赖本地物理链路(如串口)传输固件,无需网络参与。与远程OTA(如HTTP/MQTT)不同,Ymodem通过串口直连实现设备固件升级,适用于开发调试、无网络环境等场景。其核心特点是稳定、操作简单,是嵌入式开发中本地升级的重要方案。
2025-11-22 13:48:20
532
原创 嵌入式 OTA 升级 + 全场景存储:FAL 分区表实战配置详解(含 W25Q128+STM32F407)
本文针对STM32F407+W25Q128硬件平台,提出了一套完整的Flash分区设计方案。基于RT-Thread FAL组件,将1MB片内Flash和16MB片外Flash划分为多个功能分区:896KB的app分区运行主程序,片外Flash包含1MB下载区、1MB出厂备份区、1MB环境变量区、4MB文件系统区和9MB日志区。该设计实现了OTA固件升级、配置存储、文件管理和日志记录等功能,各分区大小合理且无重叠,满足嵌入式设备的核心需求。方案详细说明了每个分区的定位、大小和实现逻辑,并给出了OTA升级和数据
2025-11-21 15:43:28
1694
原创 (学习记录)嵌入式存储三剑客:SFUD、FAL、EasyFlash 核心作用+关联逻辑(永久记住版)
摘要: 在嵌入式开发中,SFUD、FAL和EasyFlash是管理Flash存储的三个关键组件,各司其职: SFUD(底层驱动):作为“翻译官”,封装SPI通信和Flash操作指令(如读写擦除),适配主流串行Flash芯片(如W25Q128)。 FAL(分区管理):作为“物业管理员”,统一管理片内/片外Flash,划分功能分区(如app、download),提供抽象访问接口。 EasyFlash(配置存储):作为“保险箱管家”,专注小数据存储(如设备参数),实现磨损均衡和数据校验。 三者协同工作:上层业务→
2025-11-21 15:26:03
889
原创 (学习记录)用于OTA升级的FAL(Flash Abstraction Layer,闪存抽象层)
FAL(闪存抽象层)通过统一API接口屏蔽不同Flash芯片的硬件差异,实现上层组件复用。它支持灵活的分区管理,将物理Flash划分为多个逻辑分区,并简化了文件系统、OTA等组件的开发流程。FAL还提供调试工具和裸机适配能力,显著提升嵌入式项目中多Flash设备兼容性和开发效率,成为复杂存储场景的优选方案。
2025-11-21 14:14:18
381
原创 (学习记录)嵌入式程序存储段-存储内容-介质映射表
摘要: 本文介绍了嵌入式系统中常见的程序段存储结构及其特性。主要包括:.text段存储可执行代码(ROM介质,只读);.data段存储已初始化全局变量(RAM介质);.bss段存储未初始化全局变量(RAM介质,启动时清零);.stack段存储临时数据(RAM介质,动态分配);以及ARM架构特有的异常索引表.ARM.exidx(ROM介质)。各段根据特性分别映射到ROM(掉电不丢失)或RAM(掉电丢失)存储介质,共同构成嵌入式程序的存储体系。
2025-11-20 16:11:06
247
原创 学习记录:RT-Thread 初始化机制
RT-Thread通过优先级宏定义实现有序初始化,解决系统启动依赖问题。其核心机制采用INIT_EXPORT(fn,"优先级")封装,数字越小执行越早,严格遵循硬件→软件→驱动→组件→环境→应用的启动流程。系统提供6个关键初始化宏(如INIT_BOARD_EXPORT(1)、INIT_APP_EXPORT(6)等),分别对应不同阶段的初始化需求。使用时需注意:1)优先级不可修改,2)直接宏包裹函数即可导出,3)避免跨阶段调用,4)同优先级按代码顺序执行。该设计有效保障了系统各模块的正确初
2025-11-17 21:13:36
439
原创 LVGL 工程文件结构详解:从自定义到自动生成的组件分工
本文解析了LVGL嵌入式GUI项目的典型工程结构。核心包含四个目录:Custom目录存放用户自定义业务逻辑代码;Generated目录由GUI工具自动生成界面实现和基础事件绑定;LVGL Simulator目录提供图形库底层配置和驱动适配;Project目录存储工程配置和界面设计数据。这种结构实现了可视化工具自动化和开发者自定义的协作,其中Generated目录负责界面实现,Custom目录扩展业务逻辑,LVGL Simulator保障底层适配,形成高效的项目开发模式。(148字)
2025-11-17 20:45:46
303
原创 RT-Thread日志头文件#include顺序坑:为什么必须先定义DBG_TAG再包含rtdbg.h?
摘要:RT-Thread嵌入式开发中,日志输出不显示通常是因头文件包含顺序错误导致。正确做法应先定义DBG_TAG和DBG_LVL宏,再包含<rtdbg.h>。这是由于日志系统基于编译期宏替换实现,顺序错误会使宏定义无法被捕获。文章详细解析了日志系统原理,提供了正确代码结构,并解释了不同日志级别的作用机制。掌握这一顺序原则可避免类似调试问题。
2025-10-29 19:55:26
690
原创 C盘清理技巧分享
本文介绍了多种Windows系统清理优化方法:1)使用工具清理重复文件;2)配置存储感知功能;3)清理系统日志和错误报告;4)管理字体和语言包;5)重建搜索索引;6)处理缩略图缓存;7)清理DirectX着色器缓存;8)优化应用数据存储;9)删除旧系统备份;10)禁用预读功能。重点包括合理配置自动清理规则、选择性删除非必要文件以及平衡系统性能与存储空间。操作时需注意保留关键系统文件,部分优化可能影响系统性能。
2025-10-24 15:12:40
275
原创 深入解析 FSMC 地址线与 LCD RS 引脚的连接控制逻辑
本文深入解析了嵌入式系统中FSMC与LCD的RS引脚连接控制逻辑。核心要点包括:1) FSMC地址线通过电平控制LCD的RS引脚,区分命令/数据写入;2) 16位数据传输导致地址自动右移1位,需调整逻辑地址;3) 通过实例对比不同RS连接方式下的控制逻辑,如RS接A6时A7为控制位;4) 总结出数据宽度决定地址步长和偏移的规律,并给出常见问题解决方案。文章以清晰的表格对比和实例拆解,帮助开发者掌握FSMC-LCD地址配置的关键技术。
2025-10-24 12:32:24
982
1
原创 一文搞定STM32CubeMX配置SPI
本文详细解析了STM32CubeMX中SPI接口的配置选项,通过表格对比方式阐明各参数功能。主要内容包括:工作模式选择(主从设备/全双工/半双工)、硬件NSS信号配置、基本参数(帧格式/数据位数)、时钟参数(波特率/极性/相位)以及高级参数(CRC/DMA)。文章特别对比了4种SPI模式(CPOL+CPHA组合)的特性,并给出配置步骤建议。配置时需严格匹配外设手册要求,确保通信稳定性和效率。
2025-10-23 11:21:08
580
原创 一文搞懂 I2C:为什么它要分硬件和软件实现?
I2C总线在嵌入式开发中广泛应用,但存在硬件I2C和软件I2C两种实现方式。硬件I2C由芯片内置控制器自动生成时序,具有高速、低CPU占用率和高稳定性特点,但引脚固定;软件I2C通过代码模拟时序,引脚灵活但速度慢、CPU占用率高。实际选型需权衡需求:硬件I2C适合高速多任务场景,软件I2C适用于引脚资源紧张或低速应用。两者都遵循I2C协议规则,选择取决于具体项目需求而非性能优劣。
2025-10-23 09:31:09
301
原创 Debug大作战:奇葩报错诊疗所
本文分享了五种典型代码报错案例及其解决思路:语法正确但逻辑错误、环境依赖问题、第三方库兼容性、多线程异步问题及缓存失效。针对这些"奇葩报错",作者提出了静态分析、环境标准化、版本锁定、线程安全优化等解决方案,并推荐了日志系统、APM工具等调试工具链。文章强调调试能力是开发者核心技能,建议采用假设驱动法,通过CodeReview、自动化测试等预防措施,系统性提升问题诊断与解决能力。
2025-10-22 12:27:13
132
原创 为什么使用空闲中断必须使能全局中断?从原理到实践的解析
嵌入式开发中,空闲中断依赖全局中断才能正常工作。微控制器的中断系统采用"全局使能→外设中断使能"的双层结构,外设中断必须通过全局中断这个"总开关"才能触发响应。在串口通信、485总线等应用中,开发者常因仅配置外设中断而忽略全局中断导致中断失效。实际应用中需同时配置外设中断使能和全局中断使能(如ARM Cortex-M的__enable_irq()),并注意中断服务函数的正确实现。检查时应依次确认外设中断位、NVIC配置和全局中断状态。
2025-10-22 12:23:06
1055
1
原创 详解 GPIO 模式、上下拉电阻与外部触发配置
在嵌入式开发里,GPIO(General - Purpose Input/Output,通用输入/输出)是连接微控制器与外部硬件的核心接口。GPIO 模式、上下拉电阻的设置,以及外部中断和事件的触发方式,都对微控制器与外部设备的交互效果起着关键作用。
2025-10-20 13:34:51
1054
原创 GPIO 核心概念解析:上拉、下拉、推挽、开漏
GPIO配置解析:输入模式使用上拉/下拉电阻解决悬空问题,上拉默认高电平,下拉默认低电平。输出模式分为推挽(可主动输出高低电平,驱动能力强)和开漏(仅能主动拉低,需外接上拉电阻,支持"线与"功能)。推挽适用于直接驱动外设,开漏用于I2C总线等共享线路。不同配置根据应用场景选择,如按键输入常用上拉,传感器常用下拉,LED驱动用推挽,通信总线用开漏。
2025-10-20 12:51:57
462
原创 技术文章大纲:Debug大作战:奇葩报错诊疗所
本文总结了程序员开发中常见的奇葩报错现象及解决方案。主要报错类型包括语法正确但逻辑错误的"幽灵报错"、依赖版本冲突、环境差异问题等。文章提供了系统化的排查方法论:日志分析、最小化复现、二分法调试和环境比对,并通过空指针异常、依赖冲突及时区问题等实战案例说明具体解决过程。同时推荐了VS Code、Sentry等实用调试工具,提出编写单元测试、代码审查等预防措施。最后强调调试能力的重要性,建议开发者保持耐心,积累经验。全文为开发者提供了应对复杂问题的系统性思路和实用工具推荐。
2025-10-16 21:45:24
304
原创 FreeRTOS 配置参数详解:打造专属实时操作系统
本文详细解析了FreeRTOS实时操作系统的关键配置参数,包括API版本、MPU/FPU设置、内核调度、内存管理、钩子函数等核心选项。重点介绍了抢占式调度、任务优先级、堆栈大小、内存分配方案等影响系统性能的关键参数,以及中断处理、低功耗模式等高级功能配置。通过合理调整这些参数,开发者可以根据项目需求(如实时性、资源限制)定制专属的FreeRTOS系统,平衡功能与性能。文章为嵌入式开发者提供了系统调优的实用参考指南。
2025-10-16 20:14:56
1057
原创 记录使用STM32CubeMx配置窗口看门狗
摘要:STM32窗口看门狗(WWDG)通过上下限设定构建有效喂狗窗口。上限由用户配置(W[6:0]),下限固定为0x40,只有当计数器值在此区间内时喂狗有效。这种设计既防止过早喂狗,又确保明确截止时间。当计数器降至0x40时触发早唤醒中断(EWI),为系统提供最后补救机会。该机制通过硬件约束和用户配置相结合,实现了可靠的程序运行监控功能。(146字)
2025-09-26 18:40:09
127
原创 记录使用Stm32CubeMx(基于hel库)创建工程后各文件目录的作用
该STM32 LED工程采用分层架构设计,包含应用层和驱动层。应用层(Application)存放用户业务逻辑代码,如main.c用于LED控制逻辑,gpio.c处理GPIO初始化,以及中断服务程序等。驱动层(Drivers)包含ST官方提供的HAL库和ARM的CMSIS标准接口,封装了底层硬件操作。工程采用三层架构:最底层CMSIS提供寄存器级访问,中间层HALDriver封装硬件API,最上层Application实现业务逻辑。这种分层设计提高了开发效率,便于代码移植,更换芯片时只需替换底层驱动即可复用
2025-09-24 10:37:31
1241
原创 解决SMT32CUBEMX 登录无法连接网络问题
《STM32CubeMX-6.14.1登录问题解决方案》摘要:针对STM32CubeMX首次创建工程时无法登录的问题,本文提供有效解决方法。首先确认已在st.com官网成功注册账户,然后在软件登录页面选择"UseSystemProxyParameters"并检查连接。关键步骤是选择"myST"入口,加载后输入官网账号即可完成登录。该方案绕过常见的防火墙和软件问题,通过系统代理参数设置实现稳定连接,适用于6.14.1版本登录异常情况。(98字)
2025-09-22 21:27:49
1264
原创 《IT疑难杂症诊疗室:常见问题排查与解决指南》
摘要:本文系统介绍IT问题的排查方法,涵盖硬件故障、软件冲突、网络问题和权限安全等典型场景。通过问题复现、日志分析、最小化测试和工具辅助四步诊断法,结合蓝屏和网络连接等实际案例解析处理流程。提供定期更新、监控部署等预防措施,并建议自动化脚本和团队协作等进阶方案。文章强调系统化排查的价值,附有工具推荐和学习资源,适合不同层级的IT人员参考。(150字)
2025-09-22 13:19:16
224
原创 解决在 Qt 中使用中文qDebug时调试信息乱码问题
解决Qt调试中文乱码问题,主要有两种方法:一是在.pro文件中添加"win32:QMAKE_CXXFLAGS+=/utf-8"并重新构建项目;二是在源文件开头添加预处理指令"#pragma execution_character_set("utf-8")"。两种方法都能使qDebug()正确输出中文,避免因GBK和UTF-8编码差异导致的乱码问题。
2025-09-19 20:38:48
459
原创 解决x64 Native Tools Command Prompt for VS 2019中配置QT静态编译时,使用nmake单线程编译速度过慢的问题
使用jom并行编译可显著提升Qt项目编译速度,相比nmake可缩短至半小时内。安装jom可通过Qt维护工具勾选相应组件,或在Qt安装目录直接调用jom.exe。执行命令时需添加-j8参数启用8线程编译,编译完成后同样路径+install即可完成安装。实测显示jom比nmake单线程编译快4倍以上。
2025-09-18 16:31:21
339
原创 QT Creator的mysql项目后打包后可执行文件(.exe)无法运行的解决办法
解决"Driver not loaded"报错的方法:1.确认使用MSVC2019构建套件;2.进入QT安装路径下的MSVC2019_64/bin目录,复制libmysql.dll文件;3.将复制的dll文件粘贴到程序目录中;4.完成上述操作后程序即可正常运行。该方法通过补充缺失的MySQL驱动文件解决了驱动程序加载失败的问题。
2025-09-17 22:48:03
179
原创 Qt设计界面画出的界面远远大于运行程序的界面
在QT中解决UI设计与运行时界面大小不一致的问题,可按以下步骤操作:创建QWidget项目时,在构建套件选择界面点击确定,然后重启QT即可保持设计界面与运行界面大小一致。
2025-09-11 22:44:58
192
原创 Ubuntu中各个目录的作用
存放系统管理员使用的管理程序,与 /bin 目录不同,/sbin 目录中的命令通常需要超级用户权限才能执行。tmp基本都是临时文件,srv是系统运行产生的文件,var是用于存储各种变量数据和log日志文件。一个虚拟文件系统,用于提供对内核和硬件设备的详细信息和控制接口,例如控制外设。一种跨平台打包和部署系统,为用户提供了方便、安全、隔离的应用程序管理方式。管理员权限才能打开,防止用户删除Ubuntu系统文件,导致系统损坏。存放用户的个人文件,如图片,小电影,文本等等。将整个内存变成文件存放。
2025-04-24 11:50:34
440
原创 Makefile.win recipe for target ‘C:/Users/acer/Desktop/xxx.o‘ failed
Makefile.win recipe for target 'C:/Users/acer/Desktop/xxx.o' failed错误解决办法
2023-03-07 22:00:02
969
原创 (指针方法)10.将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一函数实现之。用main函数调用。
(指针方法)10.将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一函数实现之。用main函数调用。
2022-04-01 15:43:30
2170
原创 有n个整数,使前面各数顺序向后移m个位置,最后m各数变成最前面m各数,见8.43.写一函数实现以上功能,在主函数中输入n个整数和输出调整后的n个数。
有n个整数,使前面各数顺序向后移m个位置,最后m各数变成最前面m各数,见8.43.写一函数实现以上功能,在主函数中输入n个整数和输出调整后的n个数。
2022-03-31 10:53:11
303
原创 输入10个整数将其中最小的数与第一个数对换,把最大的数与最后一个数对换(指针法)
输入10个整数将其中最小的数与第一个数对换,把最大的数与最后一个数对换(指针法)
2022-03-29 10:51:12
5584
空空如也
我写的完数代码到底有啥问题,求各位指正
2022-01-03
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅