自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 大小端字节序详解

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

2025-07-31 18:48:53 139

原创 学习Redis源码路径

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

2025-07-31 10:30:35 714

原创 Redis安装

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

2025-07-30 20:27:58 191

原创 Redis实现数据传输简介

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

2025-07-30 20:14:33 301

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

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

2025-07-30 20:10:15 119

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

在 STM32 集成 USB 时出现。

2025-07-29 11:01:54 670

原创 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 193

原创 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 285

原创 SystemClock_Config 函数解析

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

2025-07-28 20:50:57 602

原创 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 820

原创 快速梳理遗留项目

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

2025-07-23 22:17:39 1163

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

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

2025-07-22 16:06:28 879

原创 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 343

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

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

2025-07-21 21:14:58 431

原创 ADC和DMA简述

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

2025-07-20 21:09:59 161

原创 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 357

原创 STM32 DMA通信详解

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

2025-07-17 11:45:11 482

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

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

2025-07-16 19:10:34 773

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

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

2025-07-16 11:44:25 767

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

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

2025-07-15 22:29:08 550

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

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

2025-07-15 09:53:04 368

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

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

2025-07-15 09:50:41 284

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

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

2025-07-13 17:10:15 530

原创 C++ 单例模式实现

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

2025-07-13 11:45:04 798

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

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

2025-07-13 11:31:53 867

原创 C++ Lambda 表达式详解

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

2025-07-10 23:11:19 955

原创 C++ 右值引用详解

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

2025-07-06 18:36:53 672

原创 cJSON 使用方法详解

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

2025-06-29 18:04:34 670

原创 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 848

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

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 815

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

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

2025-06-29 11:34:42 932

原创 make项目时libcurl报错

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

2025-06-29 11:33:35 949

原创 VSCode中创建和生成动态库项目

下面我将介绍如何在VSCode中创建一个动态库项目,并配置编译环境来生成动态库(.so或.dll文件)。

2025-06-27 18:52:43 736

原创 C++智能指针编程实例

/ 使用自定义删除器管理文件指针// 离开作用域时自动调用fileDeleter关闭文件。

2025-06-22 23:45:22 993

原创 GDB使用简述

通过以上步骤,可以系统地定位内存错误、逻辑错误和性能瓶颈。

2025-06-16 16:16:48 212

原创 macbook配置vscode连接腾讯云服务器

公钥流向:MacBook的公钥 → Ubuntu服务器的。私钥保密:MacBook的私钥()仅保存在本地,不可泄露。主机验证:服务器公钥会自动缓存在MacBook的,无需手动操作。按照此流程配置后,VSCode即可通过SSH密钥无缝连接腾讯云Ubuntu服务器。

2025-06-15 22:54:03 404

原创 Keil中 L6406E: No space in execution regions with .ANY selector matching heap_4.o(.bss) 错误分析简述

当然,具体也可能由于以下原因,需要再分析。表明内存分配已超出预期范围,通常与。

2025-06-10 18:07:02 1235

原创 float负数浮点值强转uint16_t

在C++中,uint16_t是无符号类型(范围 0~65535),无法直接存储负数。

2025-06-10 17:55:19 301

原创 触发DMA传输错误中断问题排查

通过检查DMA配置一致性、分析中断优先级、验证缓冲区访问、调试错误标志,并进行最小化冲突测试,可以定位并解决集成BLE模块后触发的DMA传输错误。核心原则是确保DMA传输的独立性和数据处理的同步性,避免资源竞争和配置冲突。:在访问DMA缓冲区的代码段(如原有线程和BLE回调)中添加互斥锁。结构体),确认关键参数(传输方向、缓冲区地址、中断使能)未被修改。在STM32项目中,集成BLE模块后触发DMA传输错误中断(:若使用中断嵌套,确保DMA中断的抢占优先级足够高。)的优先级高于或等于BLE模块的中断。

2025-06-09 23:58:20 609

原创 定位触发DMA2_Stream1_IRQHandler中断的具体原因简述

通过检查DMA配置、在中断服务例程中添加日志、使用调试器检查寄存器、验证外设交互代码,并进行最小化测试,可以定位触发。核心原则是结合代码逻辑和硬件状态,逐步缩小问题范围,最终定位触发中断的源头。中断的具体原因,需结合代码分析、寄存器检查和调试工具。:确认在DMA初始化代码中是否启用了非预期的中断。在STM32项目中,若需定位触发。

2025-06-09 23:30:29 551

空空如也

空空如也

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

TA关注的人

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