- 博客(405)
- 资源 (65)
- 收藏
- 关注
原创 DMA 中的 /dev/mem:FPGA 写物理内存,用户态直接读
FPGA 采集到的数据由 DMA 写进 DDR,用户态程序用 /dev/mem 映射同一块物理内存把它读出来。这条通路上没有数据拷贝,双方能对上靠的是事先约定的物理地址。无锁则来自另一处设计:环形队列把读写状态拆成两个各自单向递增的计数器,锁就没有存在的必要。
2026-10-06 01:26:47
213
原创 RTOS 周期任务服务的并发三件套:RMW、RTC 与 AOP
在「一个工作线程 + 多个命令入口 + 共享状态」的 MCU 服务里,偶发缺陷大多来自三处:读改写被别的线程插进来、派发过程被重入、锁散落在各个分支里。本文给出三个低成本的收敛办法,并用两种写法的代码指标做对照。
2026-09-22 13:56:13
349
原创 C++零堆零拷贝:事件只构造一次,全程只传指针不复制
事件在固定池中只构造一次,提交、排队、派发和回收阶段仅传递指针,并以引用计数、固定容量和所有权转移约束生命周期。
2026-09-10 11:12:41
559
原创 在 Nginx 里做 WebRTC 低延迟直播:从方案到落地
不引入独立 RTC 服务,在 nginx 框架内直接完成 RTMP 到 WebRTC 的转换,延迟从 RTMP/HLS 的 1 到 10 秒降到 0.5 秒以内。端到端实测首包约 560 ms,HTTP-FLV 分发保留作为兜底。
2026-09-10 00:34:59
594
原创 C++编程:使用std::string仿写c++17的std::string_view
在性能敏感的应用中(如网络库、系统编程等),频繁的字符串拷贝会带来性能开销。 C++17 字符串string_view可以减少拷贝。本文介绍一个基于 C++11 实现的的 `StringView` 类,设计理念是避免不必要的内存分配和字符串拷贝,同时提供类似标准字符串的操作接口。
2024-11-22 11:36:53
839
原创 C++ 阻塞任务的等待调度:线程与协程的分工
我们知道:- **多线程**:适用于处理计算密集型任务或IO操作较少的场景,但会因为线程切换和创建销毁的开销而影响性能。- **协程**:适用于处理需要大量并发且具有等待或阻塞的任务。在阻塞型任务中,协程通过上下文切换以提高资源利用率,减少开销。本文将探讨如何通过 **多线程** 和 **协程** 来优化 **阻塞型任务**(例如矩阵乘法)调度性能。使用的协程库来自:[state-threads](https://github.com/ossrs/state-threads)[state-thr
2024-11-19 16:57:57
1202
原创 C++多线程管理:线程封装与守护监控线程实现
本文将介绍如何通过**二次封装**来管理线程,以及如何利用**守护线程**机制监控多个线程的状态,确保程序的稳定性和高可用性。
2024-11-19 11:10:48
1758
原创 优化C++设计模式:用模板代替虚函数与多态机制
MISRA C++ 标准对类型转换和虚函数使用做出严格规定,尤其在嵌入式系统中,以确保代码的可预测性和高效性。传统设计模式中虚函数和多态性引入会增加运行时开销,增加系统负担。然而,模板编程通过编译时决策代替运行时动态绑定,可以提升性能并降低内存消耗。本文将尝试使用C++11改进常用的几个设计模式。
2024-11-15 18:26:06
1581
原创 C++编程:实现一个简单的消息总线
本文将介绍如何使用 C++ 编写一个改进的消息总线系统,其中包括以下功能:- **消息发布**:发布消息给所有订阅该消息的订阅者。- **消息订阅**:允许订阅者订阅感兴趣的消息,并注册回调函数以便处理接收到的消息。- **定时任务调度**:支持周期性的任务调度,例如定时检查超时的订阅。- **超时管理**:每个订阅可以设置超时回调,如果在指定时间内未收到消息,将执行该回调。
2024-11-15 08:47:20
1458
原创 Linux编程:基于 Unix Domain Socket 的进程/线程间通信实时性优化
基于 Unix Domain Socket 的线程间通信实时性优化,能够处理多个客户端的连接,并异步地读取和写入数据。
2024-11-13 12:23:12
1731
原创 C++编程:嵌入式Linux-ARM与外设中断交互的程序设计
本文介绍在 Linux-ARM 系统中利用中断与外设(如 DSP、DAC、扫描仪等)交互的模块,实现了低延迟的中断响应。外设通过 UIO 驱动暴露 `/dev/uio` 设备节点,用户空间程序可以通过这些节点来处理中断。
2024-11-09 23:02:11
2140
原创 Linux编程:嵌入式ARM平台Linux网络实时性能优化
网络实时性能首先取决于应用怎么收包、怎么排队、怎么分配内存,然后才是内核参数。对同一路传感器数据流,即使 SoC 有多个核,也应把收包、组包和发送固定在一个 CPU 核;多核用于不同数据流或不同职责。推荐顺序是:单一收包线程 + 阻塞 `recvmmsg`(多 fd 用 `poll`,fd 少且编号受控可用 `select`) → 批量收发 → 有界队列与队列满处理 → 内存池/零拷贝 → IRQ/NAPI/包分发 → CPU 隔离与实时调度 → 定时器。**
2024-11-08 23:56:56
1709
原创 C++编程:避免因编译优化引发的多线程死锁问题
在多线程编程中,嵌套锁通常不会导致问题,但在某些情况下(例如使用高级编译优化 `-O3` 或代码执行多次时),编译器优化可能会改变原本稳定的执行顺序,从而引发死锁。实际上,死锁的根本原因通常是程序中 **锁获取顺序的不一致** 和 **内存操作顺序问题**,而并非优化本身所导致的。本文将探讨如何通过编译器优化(如 `-O3`)导致的内存顺序变化,引发死锁的潜在风险,并提供相应的解决方案。
2024-11-08 19:08:42
1059
原创 C++编程:警惕线程优先级反转
在多线程编程中,线程之间的资源同步如果处理不当,会出现**线程优先级反转(Priority Inversion)**的情况,这可能导致系统性能下降,甚至引发崩溃。本文将通过 C++ 示例代码解释优先级反转的概念,并提出避免这一问题的方法。
2024-11-08 01:05:45
1579
原创 Linux编程:使用DMA优化UDP 数据传输吞吐量并降低延迟
UDP 网络传输常面临高 CPU 占用、传输延迟和丢包等挑战。本文将介绍 DMA 如何优化 UDP 数据包的发送,以提高吞吐量、减少延迟并降低 CPU 占用。
2024-11-06 02:59:07
2221
1
原创 Linux 编程:高实时性场景下的内核线程调度与网络包发送优化
CFS 调度器是 Linux 默认的调度策略,适用于大多数通用应用,但在实时性要求较高的场景中可能需要使用 SCHED_FIFO 或 SCHED_RR 等实时调度策略。PREEMPT-RT 补丁 可以优化系统的实时性,减少内核的调度延迟,尤其适用于需要低延迟和高实时性的嵌入式系统和自动驾驶等应用。对于需要处理实时数据的系统,使用 SCHED_FIFO 配置网络和中断处理线程,可以最大程度地减少延迟和丢包,提高系统性能和稳定性。
2024-11-06 01:57:14
2005
原创 使用 C++ 进行高效序列化和反序列化的实现(优化版本)
之前的文章 二进制序列化与反序列化:支持C++基础类与STL容器已介绍了serialize.hpp,本文将给一个支持C++14以上版本的优化版本。
2024-11-02 23:53:01
1501
原创 Iceoryx2:高性能进程间通信框架(中间件)
Iceoryx2 是一个基于 Rust 实现的开源中间件,专为实现超低延迟和高可靠性的零拷贝进程间通信而设计。相比其前身Iceoryx,Iceoryx2 在多个关键领域进行了显著改进,包括内存安全、并发处理、模块化设计以及多平台支持。
2024-11-02 12:03:25
3607
原创 基于现代 C++17 的模块化视频质量诊断处理流程优化设计
在整理视频质量诊断程序模块代码时发现,处理流程通常是固定的,各种检测功能以函数形式顺序调用。这种设计缺乏灵活性,不易于扩展和维护。本文将使用 C++17 的 std::function 和 std::any,重新设计视频质量诊断处理流程,实现模块化、可灵活扩展的处理管道。
2024-10-28 13:43:57
1874
原创 C++编程:实现一个基于原始指针的环形缓冲区(RingBuffer)缓存串口数据
本文将介绍一个解析串口数据的环形缓冲区,使用'$'或者'#'分割串口消息。选用内存块数组,而不是选用一整块的内存+读写指针的方式,以减少读写数据时的资源竞争。
2024-10-17 10:03:10
2168
原创 C++编程:利用ARM硬件加速CRC32计算
本文将介绍如何在ARM架构上通过硬件加速实现高性能的CRC32计算,并与传统的软件实现进行性能对比。
2024-10-11 20:53:12
2167
原创 使用C++实现高精度时间日志记录与时间跳变检测[多线程版本]
本文将介绍多线程版本高精度时间日志记录小程序,该程序具备以下功能:1. **自定义时间间隔和文件名**:通过命令行参数设置时间间隔和输出文件名,默认值为20毫秒和`timestamps.txt`。2. **高精度定时**:采用`std::chrono::steady_clock`和高精度睡眠函数`clock_nanosleep`确保时间间隔的准确性,避免`std::this_thread::sleep_for`带来的时间漂移。3. **线程安全队列**:使用线程安全的队列缓存时间戳,减少频繁的文件I
2024-10-10 16:35:54
1637
原创 基于C++和Python的进程线程CPU使用率监控工具
本文将介绍一个基于C++和Python实现的进程线程CPU使用率监控工具,用于监控指定进程及其所有线程的CPU使用情况。编写这个工具的初衷是源于部分嵌入式ARM系统的top工具不支持显示线程级别的CPU使用情况。
2024-10-01 13:27:50
1879
1
原创 C++编程:实现简单的高精度时间日志记录小程序(单线程)
为了检查是否存在系统时间跳变,本文使用C++实现了一个简单的高精度时间日志记录小程序。该程序能够每隔指定时间(默认40毫秒)记录一次系统时间到文件中。
2024-09-27 23:10:06
1742
原创 C++使用 tinyFSM 实现有限状态机:从状态图到代码实践
在软件开发中,有限状态机(Finite State Machine,FSM)是一种重要的设计模式,广泛应用于系统建模、控制流管理和事件驱动程序设计。本文将介绍如何使用轻量级的 C++ 状态机库 **tinyFSM** 来实现一个有限状态机,从状态图描述到代码实现的全过程。
2024-09-19 15:42:09
3883
原创 C++编程:多线程环境下std::vector内存越界导致的coredump问题分析
多线程访问共享数据时,必须使用同步机制来防止数据竞争和内存越界,这是避免coredump的关键。内存越界是C++中导致段错误和程序崩溃的常见原因,不能依赖时序问题来规避。建议严格使用同步工具如`std::mutex`,并进行定期代码审查和多线程测试,确保线程安全。
2024-09-18 20:36:46
1742
原创 C++编程:ZeroMQ进程间(订阅-发布)通信配置优化
ZeroMQ是适用于高性能的进程间通信(IPC)的中间件。本文将详细介绍几种优化ZeroMQ订阅-发布通信的方法,并通过代码示例展示如何在实际项目中应用。
2024-09-07 23:59:34
2270
原创 ZeroMQ 消息传递:多 Topic 共用与独立 IPC 的对比分析
在 ZeroMQ `PUB/SUB` 模型中,多个 `topic` 是共用一个 `IPC` 地址,还是为每个 `topic` 定义独立的 `IPC` 地址,是一个设计和性能的权衡问题。下面我将从**架构设计**、**性能影响**、**使用场景**等方面进行深入分析,并给出这两种方法的优劣对比。
2024-09-06 23:15:34
1471
原创 理解C++全局对象析构顺序与 IPC 资源管理:避免 coredump
在编写 C++ 程序时,使用全局或静态对象有时可能会导致不可预期的崩溃(如 `coredump`)。这类崩溃通常源于对象的析构顺序、资源的管理方式,以及底层资源(如 IPC 通道或共享内存)的释放机制。本篇博客将通过一个典型的例子,深入剖析导致段错误的根本原因,并提供合理的解决方案。
2024-09-06 23:00:47
1280
原创 C++编程:使用C++多线程和POSIX库模拟CPU密集型工作
本文利用C++与POSIX线程库(`pthread`)编写多线程程序,以模拟不同负载下的CPU资源占用情况。
2024-08-25 21:24:58
1256
原创 Linux编程: C++线程CPU使用率监控与分析工具
本文将介绍一个结合 C++ 和 Python 的高性能 CPU 使用率监控和分析工具。该工具通过读取 Linux 系统的 `/proc` 文件系统实时采集 CPU 使用数据,利用 UnQLite 数据库进行高效存储,并通过 Python 实现数据解析和可视化。本工具支持对多个进程同时进行分析。
2024-08-25 15:31:37
2128
原创 C++编程:生产者-消费者模型中条件变量的使用问题及优化方案
在多线程编程中,生产者-消费者模型是一种常见的并发模式。然而,不当的设计可能导致多种问题,如死锁、资源竞争或信号丢失等。本文将探讨这些问题,并提出相应的解决方案。
2024-08-17 13:04:26
1669
原创 C++编程:无锁环形队列 (LockFreeRingQueue)的简单实现、测试和分析
在现代多线程编程中,高效的并发数据结构对于提升系统性能至关重要,尤其是在处理高并发场景时。本文将详细介绍一种无锁环形队列 (`LockFreeRingQueue`) 的实现,并探讨其在实际应用中的优势与局限。
2024-08-16 22:31:36
2688
原创 [QNX] C++编程: 外部硬件加速器与SOC共享内存中使用NOCACHE的必要性与优化策略
在嵌入式Linux-ARM系统编程中,FPGA和SOC(System on Chip)经常需要共享内存进行数据交换。SOC通过共享内存读取FPGA处理的数据,而FPGA则直接写入内存。这种架构在性能和实时性上有着明显的优势,特别是在需要高速数据传输的场景中,如视频处理、网络通信等。然而,这种内存共享架构也带来了一些挑战。最主要的问题在于数据一致性:由于FPGA直接操作内存,而不经过CPU的控制,这导致CPU的缓存无法感知到内存中的数据变化。如果SOC继续使用缓存中的旧数据,将可能导致数据的不一致性,进而
2024-08-11 22:19:31
936
原创 ROS2阻塞和性能问题的排查和优化方案
在使用 ROS2 进行传感器驱动数据接收时,出现了明显的性能问题,导致数据偶然丢失。经过排查,发现问题源于传感器的 ClientSDK 的回调函数 `data_callback` 中执行了 `publish` 操作。由于 ROS2 的 `publish` 操作会阻塞 `data_callback` 函数所在的线程,进而引发该问题。这种现象在 ROS2 `galactic` 发行版中尤为明显,因为其默认中间件为 `rmw_cyclonedds_cpp`,而非 `rmw_fastrtps_cpp`。本文
2024-08-04 10:52:16
5505
原创 C++编程:使用cpp-ipc实现基于共享内存的进程间发布订阅
`mutouyun/cpp-ipc` 我们提供了一种高效、跨平台且无锁的进程间通信解决方案。本文将基于`cpp-ipc` 实现两个生产者和消费者实例,特别重点介绍可以传输大文件的示例代码。
2024-08-02 23:29:57
4146
1
原创 C++编程: 解读无锁队列(Lock-Free)的原理、实现和实例
本文将基于几篇无锁队列(Lock-Free)技术文章阐述无锁队列的原理并推荐开源无锁队列库
2024-08-01 10:58:57
3052
原创 PTPD 在 QNX 系统上的授时精度验证与误差排查
PTPD是一种时间同步的开源实现,然而在不同操作系统上的表现可能存在显著差异。本文通过在QNX系统上运行PTPD,针对其授时精度进行详细验证,并对出现的误差进行深入排查和分析,旨在提升QNX系统中的时间同步精度。
2024-07-28 01:30:03
1247
Visual_C++_6.0环境配置
2011-06-29
2440test 2440示例代码
2010-11-27
linux示例代码 example
2010-11-27
cpp_master_worker依赖第三方库地址
2022-07-21
cmake example with Support of Qt5
2022-07-17
利用剪贴板实现Exe程序间的数据交换
2011-09-08
费用管理系统 vc + access
2012-06-15
C# XML demo,C# XML入门,XmlHelper
2013-06-20
EFFECTIVE MINIDUMPS
2013-11-15
C#基础概念二十五问
2013-06-11
A Crash Course on the Depths of Win32 Structured Exception Handling
2013-11-15
About Exceptions and Exception Handling
2013-11-15
Effective Exception Handling in Visual C++
2013-11-15
一小时入门C#(中英文)
2013-06-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅