- 博客(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
原创 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
原创 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
原创 “找到一个或多个多重定义的符号“(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
原创 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
原创 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
原创 触发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关注的人