自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(351)
  • 收藏
  • 关注

原创 编译错误:将当前用户的默认 Shell 切换为 bash

核心问题:当前用户默认 Shell 不是 bash,且 SHELL 环境变量未指向 /bin/bash;关键操作:用切换默认 Shell,用配置环境变量;验证要点:重新登录终端后,需输出/bin/bash才算配置完成。

2026-02-09 11:17:22 238

原创 = delete和= default

语法核心作用通俗理解= default显式要求编译器生成默认版本的特殊成员函数(如默认构造、拷贝构造)“编译器,按你的默认规则帮我生成这个函数”= delete显式禁用某个函数(让编译器拒绝生成/禁用调用)“编译器,这个函数我不用,禁止任何人调用”= default:显式要求编译器生成默认版本的特殊成员函数,解决“自定义构造后丢失默认函数”的问题,且更高效;= delete:显式禁用函数,核心用于单例模式禁用拷贝、禁止特定函数调用,是C++11后替代“私有不实现”的最佳方式;

2026-01-30 14:48:25 751

原创 指针不是指向首地址,就可以输出字符串,为什么要分配内存char[len + 1]?

指针指向首地址能输出,只是“借用”了别人的内存,而非“拥有”——实际开发中会有内存越界、野指针、内容被篡改等致命问题;的核心目的:为类对象申请专属的堆内存+1是为了容纳字符串结束符'\0',保证cout能正确识别字符串结尾;分配内存后,字符串的生命周期由MyString对象自己管理,析构时可安全释放,这是C++管理动态字符串的标准做法。简单说:“指向首地址能输出”只是临时的、不安全的,而“分配内存拷贝字符串”才是可控的、符合工程规范的写法。

2026-01-27 09:42:05 313

原创 C++面试题

虚函数是用。

2026-01-26 16:19:39 572

原创 (十一)C++的Lambda 表达式

适合「逻辑简单、只需要执行一次」的场景,写完直接加(参数)即可,不用赋值给变量,极致简洁。// 定义lambda的同时,立即调用,执行逻辑b++;}();// 输出:11,21lambda的「捕获行为」是在定义lambda的那一刻完成的,不是在调用的时候!值捕获:定义时拷贝外部变量的「当前值」,后续外部变量修改,lambda内部的副本不变;引用捕获:定义时绑定外部变量的「地址」,后续调用时,拿到的是变量的最新值。匿名函数对象(仿函数),C++11及以上支持,无运行时开销;

2026-01-12 10:21:13 1054 2

原创 vscode出现中文乱码?

在出现的搜索框里输入:Files.autoGuessEncoding,按回车键确定。第一次用vscode打开代码会出现中文注释因识别不了而乱码的情况,类似这样。1.单击软件左下角设置(类似齿轮)的按钮。关闭vscode,然后重新打开即可。printf(“张三\n”);

2026-01-06 17:03:20 237

原创 弱上拉、强上拉、弱下拉、强下拉电阻?

上拉/下拉电阻的作用是将引脚电平稳定在高/低状态类型阻值范围驱动能力功耗典型应用场景弱上拉通常10kΩ~100kΩ弱(μA级拉电流)低低功耗场景、引脚默认高电平(如按键输入)强上拉通常1kΩ~4.7kΩ强(mA级拉电流)较高需要驱动小负载、强抗干扰的高电平输出弱下拉通常10kΩ~100kΩ弱(μA级灌电流)低引脚默认低电平、低功耗检测强下拉通常1kΩ~4.7kΩ强(mA级灌电流)较高需要强拉低电平、抗干扰的低电平输入。

2025-12-24 15:20:21 588

原创 高电平弱驱动、低电平强驱动是什么?

拉电流和灌电流是描述单片机GPIO引脚驱动能力的两个核心指标,本质是电流的流向不同,直接决定了引脚能驱动多大的外部负载。关键结论:灌电流驱动能力 > 拉电流驱动能力,因此实际开发中优先用灌电流驱动大负载(如LED、蜂鸣器)。已知:VCC=3.3VV_{CC}=3.3VVCC​=3.3V,LED压降VF=2VV_{F}=2VVF​=2V,引脚低电平VOL=0.2VV_{OL}=0.2VVOL​=0.2V,目标电流I=5mAI=5mAI=5mA求:限流电阻RRRR=VCC−VF−VOLI=3.3−2−0.2

2025-12-24 14:53:47 662

原创 代码如何在单片机中运行?

fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;编写C代码预处理:展开头文件/宏编译:C→汇编→机器指令(.o)链接:合并.o+分配地址(.elf)格式转换:生成.hex/.bin烧录到STM32 Flash芯片复位:内核加载栈顶+复位向量启动文件:初始化内存/时钟内核执行main函数(取指→译码→执行)内核通过总线操作外设寄存器。

2025-12-24 11:32:24 848

原创 单片机的总线和时钟系统是什么?

在单片机 / MCU 中,内核(Core) 是整个芯片的运算和控制核心,相当于嵌入式系统的 “大脑”,所有指令执行、数据处理、外设调度都由内核主导。以你关注的 STM32 系列为例,其内核基于 ARM Cortex-M 架构(如 STM32F1 用 Cortex-M3,STM32F4 用 Cortex-M4),下面从内核的核心功能、架构特点、与外设的交互逻辑三方面详细说明:内核的核心功能。

2025-12-24 11:27:46 688

原创 单片机的寄存器是什么?

寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。寄存器的存储电路是由锁存器或触发器构成的,因为一个锁存器或触发器能存储1位二进制数,所以由N个锁存器或触发器可以构成N位寄存器。寄存器是有限存储容量的高速存储部件,它们可用来暂存指令、数据和位址。通用寄存器:用于存储数据和中间计算结果,例如x86架构中的AX、BX等。地址寄存器:用于存储内存地址,以便访问内存中的数据。程序计数器:用于存储下一条将要执行的指令地址。状态寄存器:用于存储CPU当前的状态和条件码。

2025-12-24 10:33:22 171

原创 (十九)FreeRTOS之内存池

核心本质:内存池是“预分配、定大小、整取整放”的内存管理方式,解决动态堆分配的效率、碎片、确定性问题;使用关键:根据实际数据大小设定块大小,创建时检查返回值,释放时确保归池正确;深度突破:理解“空闲链表”的操作逻辑(分配取表头、释放挂表头),能通过监控空闲块数排查内存问题。如果想进一步,我可以帮你梳理FreeRTOS内存池源码的阅读路线(从初始化到分配/释放的核心函数),或者针对“内存池+消息队列”的组合使用(嵌入式常用架构)给出示例,需要吗?

2025-12-23 18:13:38 602

原创 (二十二)ESP32-S3之OTA升级

2025-12-22 17:23:22 140

原创 使用 Git LFS 管理大文件

核心问题是文件大小超过GitHub 100MB限制,需用Git LFS管理大文件。解决步骤:安装Git LFS → 追踪大文件 → 提交.gitattributes → 重新添加并推送文件。注意Git LFS的存储空间限制,或考虑使用云存储托管大文件。

2025-12-22 17:10:23 413

原创 Nor Flash与Flash?

概念层级:Flash 是闪存统称,包含 Nor Flash 和 NAND Flash 两大分支,你 ESP32-S3 用的 16MB SPI Nor Flash 是 Nor 分支的主流类型;核心差异:Nor Flash 小容量、随机读取快、支持 XIP,适配嵌入式设备;NAND Flash 大容量、顺序读写快,适配消费级存储;ESP32-S3 选型逻辑:SPI Nor Flash 接口简单、支持 XIP、容量匹配,是物联网小设备的最优解,无需用复杂的 NAND Flash。

2025-12-22 15:19:22 689

原创 (十四)Qt数据库

Qt SQL 模块提供关于数据库编程的支持,它支持多种常见的数据库,如 MySQL、Oracle、MS SQL Server、SQLite、Access 等。Qt SQL 模块包含一系列的类,可以实现数据库的连接、SQL语句运行、数据获取、数据显示与编辑等操作功能。本章介绍 Qt SQL 模块中一些主要类的使用方法,并以 SQLite 数据库为例介绍数据库的数据查询、显示、编辑修改等常见编程功能的实现。要在 Qt 项目中进行数据库编程,就需要使用 Qt SQL 模块。

2025-12-16 13:55:37 290

原创 (十三)Qt多线程

这种情况我们一般是创建一个单独的线程来执行这个比较耗时的操作。比如我们使用摄像头拍照保存照片。恩,很多朋友问,这个不算耗时吧。对的在电脑上使用 Qt 拍照,处理起来非常快。根本也不需要开启一个线程来做这种事。但是我们是否考虑在嵌入式的 CPU 上做这种事情呢?嵌入式的 CPU 大多数都没有电脑里的 CPU 主频(几 GHz)那么高,处理速度也不快。此时我们就需要考虑开多一个线程来拍照了。拍完照再与主线程(主线程即程序原来的线程)处理好照片的数据,就完成了一个多线程的应用程序了。

2025-12-16 13:55:13 896

原创 (十二)Qt绘图与图表

绘图与图表在嵌入式里有的比较多,尤其是图表,我们常在股票里看到的“图表折线/曲线图/饼状图等”都可以用 Qt 的图表来实现。绘图和图表的内容本章主要介绍绘图和图表的基本操作,以简单的例子呈现绘图与图表的用法,目的就是快速入门绘图与图表,关于绘图与图表详解最好是看 Qt 官方的帮助文档。

2025-12-16 13:54:58 882

原创 (十一)Qt文件系统操作和和文件读写

文件读写是很多应用程序具有的功能,有些软件就是围绕着某一种格式文件的处理而开发的。Qt 提供了很多类,能进行文件系统操作和文件读写,例如获取文件信息、复制或重命名文件、读写文本文件和二进制文件、读写 XML 文件和 JSON 文件。熟悉这些文件操作和文件读写相关类的用法后,就可以根据某种文件的格式编写相应的文件读写程序,也可以自己设计特定格式的文件。Qt 中进行文件读写的基本的类是 QFile,在前面的一些示例中,我们就使用了 QFile 来读取文本文件的内容。

2025-12-16 13:54:36 540

原创 git 问题,远程仓库的 `main` 分支有你本地仓库没有的更新

这个错误的核心原因是main(比如其他人推送了代码,或你在另一台设备提交过),Git 拒绝直接推送避免覆盖远程内容。

2025-12-10 13:56:02 972

原创 (二十七)Linux的M.2 硬盘驱动

M.2 接口是一种物理接口标准,它可以支持多种不同的通信协议,包括 PCIe(Peripheral Component Interconnect Express)、SATA(Serial Advanced Technology Attachment)、USB(Universal Serial Bus)等。因此,M.2 接口的速度和性能取决于所使用的通信协议和硬件实现。M.2 接口可以支持 PCIe 3.0,这是一种高速的数据传输协议,通常用于连接图形卡、固态硬盘(SSD)以及其他需要高带宽的设备。

2025-12-03 10:03:55 693

原创 malloc申请没释放会怎么样?

虽然程序结束时操作系统会回收内存,但在程序运行期间,不释放。

2025-11-27 11:27:47 393

原创 (七)yocto之Poky 参考发行版

Poky 作为 Yocto 项目的参考发行版,其核心价值在于为用户提供一个可靠的基础环境,用于学习和构建嵌入式 Linux 系统示例。Poky 的开发历程与特性紧密相关,它在 Yocto 项目中既是重要的工具,又是探索嵌入式系统开发的理想起点。要理解 Poky 的作用,首先需要明确“发行版”(distribution)的概念。发行版可以定义为“将软件、功能或内容打包为一个独立实体,即可用于分发的集合”。简而言之,发行版是一个经过预配置的软件集合,用户可以直接使用,无须从零开始配置和安装各个组。

2025-11-25 18:29:09 101

原创 (六)yocto之BitBake工具

BitBake 作为一个通用的任务执行引擎,广泛应用于嵌入式 Linux 系统的开发中。其模块化设计不仅支持任务调度、数据管理和资源获取,还为复杂构建流程提供了高效的支持。为了满足不同的开发需求,用户可以通过多种方法获取 BitBake 工具。根据使用场景和需求的不同,主要有以下四种获取方法。使用 Git 克隆 BitBake 源代码库是获取 BitBake 的推荐方式。这种方式能够便捷地获取最新的错误修复,同时访问稳定分支和开发中的主分支。

2025-11-25 18:28:52 154

原创 (五)yocto之元数据层(layer)

层进一步提供了模块化管理元数据的机制。通过层,可以将元数据按照硬件支持、功能模块或系统配置等进行分类和隔离,使构建系统更具灵活性和可扩展性。层的引入不仅提升了元数据的可维护性,还为复杂项目中的协作与复用提供了有力支持。

2025-11-25 18:28:36 206

原创 (四)yocto之元数据菜谱(bb文件)

菜谱的版本定义遵循 Debian 的版本定义规则,格式为:-,并通过。

2025-11-25 18:28:13 203

原创 (三)yocto之BitBake元数据语法

构建系统的元数据与其他类型的语言不同,变量没有固定类型。BitBake 构建引擎在解析变量时,将所有赋值内容视为字符串,并以键值对(Key-Value Pair)的形式存储在 BitBake内部数据字典(BitBake datastore)中。变量名作为键(Key)唯一地标识变量,变量内容作为值(Value)与键关联。这种机制不仅便于快速查找变量,还支持通过操作符灵活定义、追加、前置和移除变量值。变量的命名规则在构建系统中,变量名(也称为键,Key)通常由大写字母和下画线“_”组成,并以大写字母开头。

2025-11-25 18:27:54 43

原创 (二)yocto之BitBake元数据架构

元数据(Metadata)是“描述数据的数据”,用于定义数据的内容和属性,其词源“meta-”来自希腊语,意为“超越”。在计算机领域中,元数据被广泛用于优化数据管理和自动化流程,具有结构化和抽象化的特性。

2025-11-25 18:27:35 284

原创 (一)Yocto之BitBake入门学习

yocto工程的主要组成部分是bitbake工具与元数据。bitbake是一个通用任务执行引擎,元数据文件主要分为conf、bbclass、bb文件。bitbake与元数据的关系类似于gcc与c代码。一门新的语言的学习往往从编写 hello world 开始,BitBake也是如此。本教程介绍了如何创建一个yocto项目以及BitBake构建该项目所需的适用元数据文件。以下从一个新用户的角度来使用bitbake工具构建 hello world 程序。bitbake英文直译为烘培;

2025-11-25 18:27:15 98

原创 安卓app与Onenet的mqtt通信

AndroidManifest.xml导入mqtt库MainActivity.javaMyMQTTClient.javaactivity_main.xml

2025-11-25 18:25:56 79 5

原创 安卓APP与Onenet的http通信

响应: {“code”:10411,“data”:null,“msg”:“属性设置失败:设备响应超时”,“request_id”:“dba83919206642a8bc7058597e38d369”},这个需要发布响应。导入okhttp3库。

2025-11-25 18:24:51 49

原创 局部变量返回指针报错?加static修饰?

ack_buffer。

2025-11-25 17:53:34 329

原创 安卓常错问题

所有字段(identifier、name、value)都用dataObj.has(“key”)判断是否存在,避免 JSON 中缺失字段时抛出JSONException。优势:先写常量字符串,避免identifier为null时抛出空指针异常(null.equals(xxx)会崩溃,xxx.equals(null)返回false)。需在onCreate中通过findViewById初始化TextView,且必须在setContentView之后(否则找不到控件,返回null);5. 控件初始化(必须)

2025-11-20 16:22:52 284

原创 C语言之stat、fstat、lstat、fstatat函数

函数核心场景符号链接处理stat路径获取目标文件信息跟随fstat已打开文件的元数据(高效、线程安全)跟随lstat路径获取符号链接本身信息不跟随fstatat相对路径(基于目录 fd)、灵活控制链接可控制(默认跟随)若文件已打开:优先用fstat(避免路径解析开销)。若需获取符号链接信息:用lstat或。若需限制目录访问(如沙箱):用fstatat+ 目录 fd。普通路径获取目标文件信息:用stat。

2025-11-14 16:20:35 1120

原创 没使用git lfs install,直接git clone 会怎么样?

操作仓库含 LFS 追踪文件仓库不含 LFS 追踪文件未直接clone仅下载占位符,真实大文件缺失正常下载所有文件先再clone自动下载真实大文件(LFS 自动工作)正常下载所有文件。

2025-11-13 17:43:23 389

原创 C语言中,数字与字符串如何互相转换?

函数,因为它们提供了完整的错误检查和安全性。

2025-11-04 14:51:04 458

原创 RreeRTOS任务堆栈空间选择,应对栈空间溢出?

让我检查一下 wifi_ui.c 文件中创建任务时的栈大小设置: components\demos\WIFI_DEMO\wifi_ui.c 我找到了问题!在 wifi_ui.c 文件中,创建天气任务时栈大小设置得太小: c Apply xTaskCreatePinnedToCore(weather_init, “get_weather_task”, 2 * 1024, NULL, 3, NULL, 1);解决方案: 需要增加天气任务的栈大小。

2025-11-03 09:13:07 311

原创 json格式错误,多加逗号

【代码】json格式错误,多加逗号。

2025-10-29 11:58:03 106

原创 如何在ESP32-S3项目中使用FreeRTOS?

任务管理 (Task Management)任务并行化: 多个功能模块独立运行事件驱动: 通过事件组实现任务同步数据安全: 使用队列和互斥锁保护共享资源实时响应: 合理的优先级分配确保关键任务及时执行资源管理: 任务删除机制避免资源浪费这种设计使得手持设备能够同时处理用户界面、传感器数据、网络连接等多个功能,提供流畅的用户体验。

2025-10-27 19:34:01 366

原创 为什么用事件组而不用全局变量

1. 原子性保证事件位的设置、测试、清除操作是原子的消除了竞争条件和数据不一致问题2. 高效的阻塞等待任务可以在阻塞状态下等待事件发生不浪费CPU资源,响应及时3. 灵活的事件组合支持等待单个事件或多个事件的组合支持"与"和"或"逻辑4. 多任务同步一个事件可以唤醒多个等待的任务实现复杂的多任务协调逻辑5. 中断安全可以在中断服务程序中设置事件位提供中断与任务间的高效通信6. 资源轻量事件组本质上是32位整数,内存占用极小操作开销低,适合高频事件处理。

2025-10-27 19:17:01 886

空空如也

空空如也

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

TA关注的人

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