自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 248

原创 学习记录: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

原创 GPIO中上拉,下拉,推挽,开漏的相关理解

GPIO中上拉,下拉,推挽,开漏的相关理解

2025-10-11 15:29:55 127

原创 分分钟教你搞定STM32时钟树(学习记录)

超清晰STM32时钟树动画讲解。

2025-09-28 15:06:57 197

原创 记录使用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

原创 数据结构:顺序栈的建立、初始化、入栈、出栈、输出(C++语言)

数据结构:顺序栈的建立、初始化、入栈、出栈、输出(C++语言)

2022-09-14 19:32:56 898

原创 (指针方法)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-03-28 17:00:06 7332

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除