自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 template<typename R = void> 意义

中非常有用,特别是需要处理“可能无返回值”的情况。

2025-08-03 20:58:14 239

原创 C++ <type_traits> 应用详解

它广泛应用于模板元编程(Template Metaprogramming)、SFINAE(Substitution Failure Is Not An Error)、类型推导优化等场景。SFINAE(Substitution Failure Is Not An Error)是一种。是 C++ 标准库中的一个头文件,提供了。可以写出更高效、更灵活的模板代码!

2025-08-03 19:12:07 328

原创 /usr/bin/ld: 找不到 -lev

是一个高性能的事件循环库,常用于网络编程(如。并正确指定路径后,重新编译即可解决问题。如果编译成功但运行时提示。安装在非标准路径(如。

2025-08-03 12:13:59 188

原创 fatal error: gdal_priv.h: 没有那个文件或目录

GDAL 是一个用于处理地理空间数据的开源库,常用于 GIS(地理信息系统)相关项目。某些项目可能需要特定版本的 GDAL。或者(如果 GDAL 安装在。这个错误表明你的系统缺少。

2025-08-03 11:52:12 174

原创 fatal error: libaio.h: 没有那个文件或目录 #include <libaio.h>

是 Linux 异步 I/O(AIO)的库,某些高性能 I/O 操作(如 Redis、数据库等)可能会依赖它。如果安装后仍然报错,可能是编译器找不到。如果头文件在非标准路径(如。如果存在,重新编译项目即可。这个错误表明你的系统缺少。头文件),导致编译失败。),可以在编译时添加。

2025-08-03 11:45:37 262

原创 C++ 设计模式综合实例

下面是一个综合使用工厂模式、适配器、装饰器、代理和外观模式的完整C++示例。适配器模式使不兼容的LegacyGraphics类能够与系统一起工作。// 创建并添加一个装饰后的复杂形状。外观模式提供简化的接口来管理复杂的图形系统。装饰器模式动态地为形状添加颜色和边框。// 使用工厂创建基本形状。工厂模式用于创建不同类型的形状对象。// 第三方图形类(不兼容接口)// 使用外观的便捷方法。// 具体装饰器 - 添加颜色。// 具体装饰器 - 添加边框。// 代理 - 延迟加载。代理模式实现延迟加载。

2025-08-03 10:36:16 798

原创 微波辐射计(Microwave Radiometer)

微波辐射计是一种被动式微波遥感仪器,通过接收地物自然发射的微波辐射能量来获取目标特征信息。工作频段通常为1-300GHz(波长30cm-1mm),属于非接触式遥感设备。

2025-08-02 09:54:48 595

原创 星载遥感领域知识

星载遥感是指利用安装在卫星平台上的传感器对地球表面及大气进行远距离探测的技术。其主要特点包括:大范围覆盖能力周期性重复观测不受地面条件限制多光谱/多时相数据获取。

2025-08-02 09:42:36 245

原创 大小端字节序详解

/ 小端存储的 0x1234。不同硬件(如 x86 是小端,网络协议通常用大端)可能导致数据解析错误。文件、网络数据流可能采用小端/大端存储,需按约定解析。小端字节序(Little-Endian)是一种。:处理二进制数据、网络协议、跨平台数据交换。是一个指向小端存储的 2 字节数组(如。),方法类似,但需调整移位位数(如。如果需要处理更长的数据类型(如。:高字节左移 + 低字节合并。:低字节在前,高字节在后。

2025-07-31 18:48:53 355

原创 学习Redis源码路径

学习 Redis 源码并剖析其技术栈是一个深入理解分布式系统、高性能网络编程和内存管理的绝佳途径。Redis 虽然代码量不大(约 10 万行 C 代码),但设计精妙,涵盖了事件驱动、内存管理、数据结构、持久化、集群协议等多个核心系统技术。

2025-07-31 10:30:35 995

原创 Redis安装

brew services start redis # 后台运行。在 WSL 中按上述 Linux 步骤安装。(注意:非官方最新版,仅用于开发测试)。,说明 Redis 正常运行。允许远程访问(需谨慎):修改。

2025-07-30 20:27:58 288

原创 Redis实现数据传输简介

Redis 可以通过其内置的数据结构和消息机制实现高效的数据传输,尤其适合跨进程、跨服务的实时通信。以下是详细的使用方法和示例,涵盖。根据业务需求选择合适的模式,并结合错误处理和性能优化,即可高效使用 Redis 进行数据传输!需要轮询,实际项目中建议使用异步库(如。三种主要模式,并附上。

2025-07-30 20:14:33 356

原创 Linux 中,命令查看系统版本和内核信息

cat /etc/centos-release # CentOS 专用。arch # 显示系统架构(如 x86_64、arm64)cat /proc/cpuinfo # CPU 详情。uname -r # 只显示内核版本。free -h # 内存。

2025-07-30 20:10:15 231

原创 STM32 集成 USB 时出现 HAL_StatusTypeDef 未定义 的错误

在 STM32 集成 USB 时出现。

2025-07-29 11:01:54 709

原创 Keil_v5\ARM\PACK\Keil\MDK-Middleware\7.10.0\USB\Include\usbd_config_def_0.h(4202): error: #35:

被多次分配给了不同的功能或接口,导致冲突。这个错误表明在 USB 配置中,如果问题仍然存在,可以提供您的。),我可以进一步帮您分析!

2025-07-29 09:24:02 234

原创 Stm32中USB 对时钟的要求

/ 倍频系数(最终输出 48MHz)// 使用 HSE(外部晶振) + PLL 生成 48MHz 供 USB 使用。如果 USB 只需要 48MHz,而 CPU 不需要高频运行,可以直接用。如果 USB 通信不稳定(如枚举失败、数据传输错误),可能需要改用。(锁相环,例如从 HSI/HSE 倍频得到 48MHz),精度(通常 ±1%~2%)比外部晶振(±0.1%)差。(HSE + PLL 分频/倍频)

2025-07-28 20:58:51 334 1

原创 SystemClock_Config 函数解析

这个配置将系统设置为:使用内部HSI时钟作为系统时钟源所有总线时钟都不分频工作在低电压模式(Scale3)不使用PLL,因此系统时钟频率就是HSI的原始频率(通常是16MHz或更低,取决于具体芯片)这是一个相对低功耗的基本时钟配置。

2025-07-28 20:50:57 613

原创 STM32中集成USB驱动

确认STM32型号支持USB(如STM32F103、STM32F4、STM32H7等)。// 回传数据到PC。// 初始化USB设备。如果使用HSE(外部晶振)→ 配置PLL输出48MHz。// 数据接收回调(PC → STM32)// 处理接收到的数据(例如回传)// 发送数据(STM32 → PC)(适用于STM32F4/F7/H7)。

2025-07-28 19:03:49 863

原创 快速梳理遗留项目

确认语言(Python/Java/Go等)、框架(Spring/Django/React等)、数据库(MySQL/MongoDB等)。背景调研 → 结构分析 → 依赖安装 → 入口跟踪 → 调试运行 → 测试验证 → 记录总结。:与产品经理或前任开发者沟通,明确项目用途(如电商系统、数据分析工具等)。├── package.json/pom.xml # 依赖管理。├── src/ # 主要代码。├── docs/ # 文档。

2025-07-23 22:17:39 1233

原创 /usr/bin/ld:找不到 -lssl

某些自定义安装的 OpenSSL 可能不在标准路径,需手动指定。某些系统可能同时存在多个 OpenSSL 版本(如。说明库已安装,但可能需要调整链接方式(见下一步)。:指定 OpenSSL 头文件路径(如果仍有。安装开发库并正确指定路径后,问题应该解决!# 查看当前链接的 openssl 版本。:如果系统是 64 位,但编译选项用了。虽然 OpenSSL 可能已安装()可能未安装,或者库路径未正确配置。:链接 OpenSSL 库。,需安装 32 位库(如。能运行),但开发库(:指定库文件路径(如。

2025-07-22 16:06:28 891

原创 find / -name “ssl.h“ 2>/dev/null

ls /usr/local/opt/openssl/include/openssl/ssl.h # macOS Homebrew 路径。ls /usr/include/openssl/ssl.h # 常见系统路径。,并过滤掉错误信息,只显示有效结果。如果无输出,说明未找到文件(可能未安装开发包)。全盘搜索可能较慢,可以限定范围(如只搜。的实用方法,常用于排查开发环境配置问题。是一个黑洞设备,丢弃所有写入它的内容。如果普通用户权限不足,部分目录(如。按文件名搜索,区分大小写。等错误(避免刷屏)。

2025-07-22 15:56:35 346

原创 一个月掌握数据结构与算法:高效学习计划

掌握数据结构与算法是成为优秀程序员的关键一步。虽然一个月时间紧凑,但通过高效学习完全可以掌握核心内容。

2025-07-21 21:14:58 437

原创 ADC和DMA简述

ADC:属于模拟信号采集的外设,但需依赖其他接口(如GPIO)与外部连接。DMA:是数据传输的加速模块,服务于外设,非接口本身。外设接口:需明确区分具体的通信协议(如I2C、SPI等)。若问题中的“外设接口”指广义的外设相关功能模块,可以认为它们属于外设系统的一部分;若严格指通信接口协议,则不属于。

2025-07-20 21:09:59 167

原创 1个月学习C++网络编程

通过这个路径,你可以在1个月内建立从底层Socket到分布式数据分发的完整知识链,并产出可展示的项目代码。数据序列化:JSON(RapidJSON)、Protocol Buffers(选学)视频:TheCherno的C++网络编程系列(YouTube/B站)库选型:直接使用原生Socket API 或 Asio(1天基础)选择开发环境:Linux(推荐)或Windows + WSL2。:避免陷入协议细节(如手写HTTP解析),先用现成库。负载均衡:轮询/一致性哈希(理论+简单实现)

2025-07-17 11:49:37 362

原创 STM32 DMA通信详解

STM32的DMA功能为高效数据搬运提供了强大支持,合理使用DMA可以:显著降低CPU负载,提高系统整体性能实现更高带宽的数据传输改善实时性,使CPU能更专注于关键任务降低功耗,特别适合电池供电设备通过STM32CubeMX工具和HAL库,开发者可以快速实现各种DMA应用场景,从简单的内存拷贝到复杂的外设数据流处理。

2025-07-17 11:45:11 519

原创 轻量级消息总线实现 (C++)

消息总线是一种用于组件间通信的架构模式,它允许系统中的不同部分通过发布/订阅机制进行松耦合的交互。下面是一个轻量级的C++消息总线实现。:对于频繁创建销毁的消息对象,可以使用对象池减少内存分配开销。// 订阅AnotherMessage。// ... 其他成员函数同上 ...// ... 其他成员变量同上 ...:在高并发场景下,考虑使用无锁队列替代互斥锁。// 删除拷贝构造函数和赋值运算符。// ... 其他成员变量 ...// 订阅TestMessage。线程安全的发布/订阅机制。

2025-07-16 19:10:34 783

原创 模板类继承工厂模板基类

/ 输出: Derived2 processing: 100。// 输出: Derived1 processing: 42。// 输出: Derived1 processing。// 输出: Derived2 processing。// 输出: Derived1 processing。// 输出: Derived2 processing。// 基类模板(CRTP 风格)如果不需要运行时多态,可以用。仍然支持运行时多态(虚函数)// 基类模板(工厂接口)通过虚函数实现运行时多态。可以是模板类或非模板类。

2025-07-16 11:44:25 768

原创 C++ 中两个类之间的通信方式

/ 可以访问 ClassB 的私有成员。// 声明 ClassA 为友元。// 调用 ClassB 的方法。在 C++ 中,两个类之间可以通过多种方式进行通信。// ClassA 包含 ClassB 对象。每种方法都有其适用场景,应根据具体需求选择最合适的通信方式。对于复杂通信或解耦需求,考虑观察者或中介者模式。需要访问私有成员时考虑友元(但应谨慎使用)避免过度使用友元,因为它会破坏封装性。对于简单关系,使用组合或参数传递。

2025-07-15 22:29:08 557

原创 C++11 std::async使用

头文件中,它是 C++11 引入的并发编程工具,用于异步执行任务并获取结果。#include <future> // 必须包含 <future>// 使用 std::async 异步执行 compute()// 获取异步任务的结果(如果未完成,会阻塞等待)),由实现决定是立即启动还是延迟执行。:立即在新线程中执行(默认)。,用于获取异步任务的结果(:延迟执行,直到调用。:如果任务抛出异常,

2025-07-15 09:53:04 370

原创 C++ try-catch 用法详解

public:private:try {throw MyException("自定义异常");

2025-07-15 09:50:41 296

原创 “找到一个或多个多重定义的符号“(LNK2005 或 LNK1169)

/ ❌ 错误(应仅在头文件声明,在 .cpp 定义)// 声明// 定义。

2025-07-13 17:10:15 550

原创 C++ 单例模式实现

在现代C++中,推荐使用局部静态变量的实现方式,它简洁且线程安全(C++11保证局部静态变量的初始化是线程安全的)。违反单一职责原则(既管理实例又包含业务逻辑)// 删除拷贝构造函数和赋值运算符。// 私有构造函数防止外部实例化。避免频繁创建和销毁对象,节省系统资源。// 在程序开始前就初始化。在多线程环境下需要特殊处理。需要频繁创建和销毁的对象。创建对象耗时或资源消耗大。确保一个类只有一个实例。访问数据库或文件的对象。// 初始化静态成员。可能导致代码耦合度高。

2025-07-13 11:45:04 801

原创 C++ 右值引用和移动语义的应用场景

/ 传统方式 - 拷贝构造// 调用拷贝构造函数// 移动语义方式 - 更高效// 调用移动构造函数// 注意:此后 name2 处于有效但未定义状态。

2025-07-13 11:31:53 870

原创 C++ Lambda 表达式详解

Lambda 表达式是 C++11 引入的一项重要特性,它允许在代码中内联定义匿名函数对象。Lambda 极大地简化了代码编写,特别是在使用 STL 算法时。

2025-07-10 23:11:19 960

原创 C++ 右值引用详解

/ s1现在为空或有效但内容未定义。

2025-07-06 18:36:53 675

原创 cJSON 使用方法详解

c// 自定义malloc/free函数free(ptr);// 设置自定义内存管理函数// 现在cJSON会使用自定义的内存管理。

2025-06-29 18:04:34 685

原创 CMakeLists修改生成两个动态库

{CMAKE_CURRENT_SOURCE_DIR}/include/subsystemlib # 假设头文件在 include/subsystemlib。│ │ └── my_lib.h # 第一个库的头文件。│ └── SubSystem.h # 第二个库的头文件。│ ├── my_lib.cpp # 第一个库的源文件。│ └── SubSystem.cpp # 第二个库的源文件。# 设置第一个库的头文件路径。

2025-06-29 14:24:57 858

原创 编译生成动态库,函数未定义错误排查

include_directories(${PROJECT_SOURCE_DIR}/include) # 替换为实际路径。grep "simInit" /path/to/project/include/sim_api.h # 查看声明是否匹配。find /path/to/project -name "sim_api.h" # 查找头文件位置。#include "sim_api.h" // 或实际声明 simInit 的头文件。// 示例:检查头文件中的声明是否如下。// 在头文件中声明为导出函数。

2025-06-29 13:33:01 819

原创 C++子类继承父类方式总结

/ ✅ 可以访问(因为是 public 继承)// 输出 "Derived::show"virtual void show() { // virtual 允许子类覆盖。// 输出 "Base::show"// privateFunc();// ❌ 编译错误,无法访问。Derived() : Base(42) { // 显式调用父类构造函数。// ✅ 调用子类方法。void show() override { // 明确表示覆盖。// 显式调用父类方法。

2025-06-29 11:34:42 955

原创 make项目时libcurl报错

具体如下所示:这个警告信息表明在运行时需要特定版本的库,但当前系统中的缺少版本信息,导致兼容性警告。

2025-06-29 11:33:35 953

空空如也

空空如也

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

TA关注的人

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