
性能优化、功能优化
文章平均质量分 90
性能优化、功能优化
橘色的喵
需要联系发邮件: [email protected]
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
使用轻量级行为树优化嵌入式应用并行复杂逻辑
在嵌入式系统中,有限状态机(FSM/HSM)和行为树(Behavior Tree,BT)各自擅长不同职责:HSM 适用于单模块的阶段化控制(上电->自检->运行->故障),状态与转换清晰可验证;BT 擅长多模块并行、分支回退和动态策略组合(主控决策、任务编排),结构直观易扩展。原创 2025-08-16 15:13:34 · 468 阅读 · 0 评论 -
嵌入式C语言编程:策略模式、状态模式和状态机的应用
在没有面向对象语法的C语言中,策略(Strategy)模式和状态(State)模式都通过“上下文 + 接口”组合来模拟多态。它们在代码结构上几乎一致,但设计意图和应用场景却差异很大。原创 2025-08-07 13:22:03 · 796 阅读 · 0 评论 -
QPC QActive 在 RT-Thread 上的实现原理详述
QP/C 的 QActive 模式是一种先进的并发编程模型,它将**事件驱动 (Event-Driven)**、**层次化状态机 (HSM)** 和 **Run-to-Completion (RTC)** 三大核心理念融为一体。本文将详述其实现原理:- **核心概念与架构**:解析 QActive 主动对象模型,及其与 RT-Thread 内核原语(线程、调度)的精确映射关系。- **生命周期与执行流程**:从 QActive 的构造、启动到其内部事件循环的完整执行流程。- **核心通信机制**:详原创 2025-07-24 14:46:48 · 830 阅读 · 0 评论 -
使用状态机减少多线程锁竞争
在嵌入式或 Linux 应用中,多个线程同时调用 `uart_send()`,传统使用 `pthread_mutex_t` 保护临界区,虽能保证安全,却会引入阻塞、优先级反转和调度抖动。本文以“多线程并发发送 UART 数据”为例,讲解如何:- 从基于 `pthread_mutex_t` 的锁保护演进到无业务锁的事件驱动+状态机模型 - 介绍 `state_machine` 框架与 POSIX 线程安全机制 - 对比资源开销与扩展性,并给出性能验证思路原创 2025-07-20 09:02:19 · 1401 阅读 · 0 评论 -
QPC QActive零拷贝 & 无锁数据传输解析
QP/C的QActive AO模型采用线程隔离和事件驱动机制,实现高效无锁通信。每个AO线程独占私有数据,通过SPSC环形缓冲传递事件指针,避免数据拷贝。中断仅投递事件,队列操作与业务数据隔离。对于大数据场景,采用外部分配缓冲+指针传递方式,确保零拷贝操作。该模型通过动态事件池分配和发布/订阅机制,实现高效的线程间通信,同时保证无锁安全性。原创 2025-07-16 00:40:25 · 372 阅读 · 0 评论 -
QPC 层次状态机(HSM)设计与优势分析
层次化状态机(HSM)是 QP/C 的核心机制之一。它将系统的各种运行状态组织成**树状结构**,并通过异步事件驱动状态转换。与传统平面状态机相比,HSM 预期收益1. **跨模块复用**:父状态封装公共逻辑,子状态聚焦业务,代码量减少。2. **实时性可控**:O(depth) 派发、零动态分配、缓存友好,在压力场景下能保持低延迟。原创 2025-07-15 16:50:48 · 877 阅读 · 0 评论 -
QPC框架中状态机的设计优势和特殊之处
QPC框架的状态机设计相比传统状态机具有显著优势。其核心创新在于实现了层次状态机(HSM),解决了传统事件驱动编程中代码难以维护、状态转换逻辑分散等问题。QPC提供两种实现方式:QHsm适合手工编码,具有良好可读性;QMsm针对代码生成优化,运行速度最快且内存占用最少。层次状态机支持状态继承和行为复用,通过Q_SUPER宏可委托事件给父状态处理。QPC还实现了UML状态图的完整语义,包括进入/退出动作、初始转换等特性,使复杂行为建模更加直观高效。性能测试表明QMsm比传统实现减少70%栈使用,特别适合资源受原创 2025-07-11 00:02:33 · 662 阅读 · 0 评论 -
嵌入式通用 C 语言状态机框架解析
`state_machine` 框架通过数据驱动、层级嵌套和多平台适配,为 C 语言开发者提供了强大且灵活的状态机解决方案。不论嵌入式还是 Linux 应用,都能轻松实现复杂的状态管理与事件驱动逻辑。原创 2025-07-07 01:23:19 · 770 阅读 · 0 评论 -
软件版本FCCU(故障采集与控制单元)设计
我的FCCU其实是软件版本的FCCU,主要作用是:- 统一收集全系统(软硬件)故障- 对故障分类、队列缓存、状态维护、持久化- 根据故障属性自动采取不同的后处理措施(如紧急处理、复位、输出安全信号)- 支持用户自定义后处理钩子- 提供系统级/业务级“故障快照”与“诊断信息”查询接口原创 2025-07-05 23:36:48 · 1213 阅读 · 0 评论 -
基于 QP/C 框架的高效事件驱动与任务调度
本文介绍了 QP/C框架及其在 MCU 中的应用,重点阐述QPC 可以高效传递事件数据,以及如何避免低优先级任务“饿死”现象。原创 2025-07-03 11:05:11 · 1311 阅读 · 0 评论 -
高性能传感器数据处理 Pipeline 技术方案
本方案借鉴 QCom CamX/CHI 架构理念,结合多核 MCU、DSP 等异构硬件,提出高效的激光雷达等高吞吐传感器数据处理 Pipeline。重点包括零拷贝内存流转、DAG 并行、QPC 事件驱动状态机、内存池、插件化算法集成、以及系统级调试监控与故障恢复。原创 2025-07-01 11:31:43 · 1247 阅读 · 0 评论 -
RT-Thread Bootloader高波特率串口通信优化(协议栈)
本文将介绍RT-Thread Bootloader高波特率串口通信优化方案。该方案基于RT-Thread实时操作系统,针对921600及以上高波特率场景进行系统优化,采用分层架构设计。原创 2025-07-01 00:43:55 · 722 阅读 · 0 评论 -
QP/C商业版与 RT-Thread state_machine 对比分析
本文对比了QP/C商业版与RT-Thread state_machine两种状态机方案。QP/C提供专业调试工具和完备文档,但需商业授权且学习成本高;state_machine采用MIT许可,代码轻量易修改,但需自行开发调试工具。QP/C更适合需要完整ASPICE支持的项目,而state_machine在商业友好度和迁移成本上更具优势。两者各有侧重,选择需权衡授权、合规性、工具链和项目需求。改进版state_machine已实现,可满足基本状态机需求。原创 2025-06-30 08:44:52 · 929 阅读 · 0 评论 -
RT-Thread平台下RTE框架的实现代码
摘要:RT-Thread平台上实现RTE框架,采用静态内核对象与内存池优化启动流程。提供统一接口rte_service_create_and_start,支持静态和动态对象混合使用,消息体全部采用静态内存池管理,避免堆碎片。服务启动采用分阶段策略,高优先级服务先启动以降低系统瞬时调度压力。框架包含服务注册、消息传递(同步/异步)等核心功能,适用于实时嵌入式系统开发。原创 2025-06-29 16:52:09 · 1095 阅读 · 0 评论 -
一个轻量级、可移植、支持层级状态的 C 语言状态机框架,适用于嵌入式和Linux应用
一个轻量级、可移植、支持层级状态的 C 语言状态机框架,适用于嵌入式和Linux应用。本框架采用数据驱动方式,支持父子状态、入口/出口动作、守卫条件、外部/内部转换、未处理事件钩子等特性。原创 2025-06-16 18:13:31 · 706 阅读 · 0 评论 -
串口协议解析方案对比:缓冲区滑窗与分层状态机
串口协议解析方案对比分析 本文对比了两种串口协议解析方法:基于滑动缓冲区的扫描法和基于分层状态机(HSM)的事件驱动法。滑动缓冲区法通过主循环扫描环形缓冲实现,适合简单协议但扩展性差;HSM法则采用QP-nano框架,以状态机分层处理各协议字段,具有更好的健壮性和扩展性,但学习曲线较高。原创 2025-06-12 09:24:15 · 645 阅读 · 0 评论 -
嵌入式系统中串口通信粘包问题的解决方案(C语言)
在嵌入式系统中,串口通信常见但易出现粘包问题难。本文分析了粘包的原因,并通过代码示例介绍了在数据包中添加头部标识符、数据长度、消息类型和校验码的方法,来有效解决串口粘包问题原创 2024-06-24 22:58:59 · 3100 阅读 · 0 评论 -
C++编程:ZeroMQ 的并行计算与自定义序列化的应用
本文将介绍在 C++ 中使用 ZeroMQ 实现并行计算,并结合自定义的序列化机制,以矩阵乘法作为示例,详细解析相关实现细节。原创 2024-11-26 23:31:03 · 1005 阅读 · 0 评论 -
C++编程:使用std::string仿写c++17的std::string_view
在性能敏感的应用中(如网络库、系统编程等),频繁的字符串拷贝会带来性能开销。 C++17 字符串string_view可以减少拷贝。本文介绍一个基于 C++11 实现的的 `StringView` 类,设计理念是避免不必要的内存分配和字符串拷贝,同时提供类似标准字符串的操作接口。原创 2024-11-22 11:36:53 · 638 阅读 · 0 评论 -
pipe2 或 pipe在Linux编程中的作用
如果需要通过线程或进程通知主线程某些事件,或将不同类型的事件(如网络连接、新任务、信号处理等)统一集成到事件循环中,管道是一个有效的解决方案。原创 2024-11-22 00:39:06 · 673 阅读 · 0 评论 -
C++编程:通过多线程与协程优化阻塞型任务的调度性能
我们知道:- **多线程**:适用于处理计算密集型任务或IO操作较少的场景,但会因为线程切换和创建销毁的开销而影响性能。- **协程**:适用于处理需要大量并发且具有等待或阻塞的任务。在阻塞型任务中,协程通过上下文切换以提高资源利用率,减少开销。本文将探讨如何通过 **多线程** 和 **协程** 来优化 **阻塞型任务**(例如矩阵乘法)调度性能。使用的协程库来自:[state-threads](https://github.com/ossrs/state-threads)[state-thr原创 2024-11-19 16:57:57 · 830 阅读 · 0 评论 -
C++多线程管理:线程封装与守护监控线程实现
本文将介绍如何通过**二次封装**来管理线程,以及如何利用**守护线程**机制监控多个线程的状态,确保程序的稳定性和高可用性。原创 2024-11-19 11:10:48 · 1443 阅读 · 0 评论 -
优化C++设计模式:用模板代替虚函数与多态机制
MISRA C++ 标准对类型转换和虚函数使用做出严格规定,尤其在嵌入式系统中,以确保代码的可预测性和高效性。传统设计模式中虚函数和多态性引入会增加运行时开销,增加系统负担。然而,模板编程通过编译时决策代替运行时动态绑定,可以提升性能并降低内存消耗。本文将尝试使用C++11改进常用的几个设计模式。原创 2024-11-15 18:26:06 · 1233 阅读 · 0 评论 -
C++编程:实现一个简单的消息总线
本文将介绍如何使用 C++ 编写一个改进的消息总线系统,其中包括以下功能:- **消息发布**:发布消息给所有订阅该消息的订阅者。- **消息订阅**:允许订阅者订阅感兴趣的消息,并注册回调函数以便处理接收到的消息。- **定时任务调度**:支持周期性的任务调度,例如定时检查超时的订阅。- **超时管理**:每个订阅可以设置超时回调,如果在指定时间内未收到消息,将执行该回调。原创 2024-11-15 08:47:20 · 1170 阅读 · 0 评论 -
Linux编程:基于 Unix Domain Socket 的进程/线程间通信实时性优化
基于 Unix Domain Socket 的线程间通信实时性优化,能够处理多个客户端的连接,并异步地读取和写入数据。原创 2024-11-13 12:23:12 · 1478 阅读 · 0 评论 -
Linux I/O编程:I/O多路复用与异步 I/O对比
本文将简要介绍 Linux 中的多路复用 I/O 和异步 I/O 模型,并编写示例代码简述。对于网络 I/O,特别是 UDP 和 TCP,多路复用 I/O(如 `select`、`epoll()`)通常是更好的选择。而异步 I/O(如 `libaio`)只建议用在文件和块设备的 I/O 操作。原创 2024-11-11 11:20:49 · 1127 阅读 · 0 评论 -
Linux编程:使用 perf lock 分析锁竞争
本文将介绍如何使用 `perf lock` 诊断锁竞争,并通过示例代码和分析。原创 2024-11-10 19:56:07 · 1938 阅读 · 0 评论 -
C++编程:嵌入式Linux-ARM与外设中断交互的程序设计
本文介绍在 Linux-ARM 系统中利用中断与外设(如 DSP、DAC、扫描仪等)交互的模块,实现了低延迟的中断响应。外设通过 UIO 驱动暴露 `/dev/uio` 设备节点,用户空间程序可以通过这些节点来处理中断。原创 2024-11-09 23:02:11 · 1922 阅读 · 0 评论 -
C++编程:LRU缓存的简单实现
实现了LRU缓存,结合了`unordered_map`和`list`数据结构,确保在插入、访问和淘汰元素时保持最近最少使用策略。原创 2022-07-02 22:55:38 · 395 阅读 · 0 评论 -
Linux编程:使用 select高效的 UART 通信
本文介绍如何在树莓派上使用 `select` 函数优化 UART 通信,确保在接收数据时及时响应,同时避免过度占用 CPU 资源。原创 2024-07-21 01:25:43 · 743 阅读 · 0 评论 -
Linux编程:嵌入式ARM平台Linux网络实时性能优化
本文将通过优化时钟周期、网络中断处理、协议栈配置、CPU 调度等配置来提升网络吞吐量,尤其是 UDP 数据包的处理效率。同时也将分析这些优化措施可能带来的副作用和对系统资源的影响。原创 2024-11-08 23:56:56 · 1324 阅读 · 0 评论 -
C++编程:避免因编译优化引发的多线程死锁问题
在多线程编程中,嵌套锁通常不会导致问题,但在某些情况下(例如使用高级编译优化 `-O3` 或代码执行多次时),编译器优化可能会改变原本稳定的执行顺序,从而引发死锁。实际上,死锁的根本原因通常是程序中 **锁获取顺序的不一致** 和 **内存操作顺序问题**,而并非优化本身所导致的。本文将探讨如何通过编译器优化(如 `-O3`)导致的内存顺序变化,引发死锁的潜在风险,并提供相应的解决方案。原创 2024-11-08 19:08:42 · 906 阅读 · 0 评论 -
C++编程:警惕线程优先级反转
在多线程编程中,线程之间的资源同步如果处理不当,会出现**线程优先级反转(Priority Inversion)**的情况,这可能导致系统性能下降,甚至引发崩溃。本文将通过 C++ 示例代码解释优先级反转的概念,并提出避免这一问题的方法。原创 2024-11-08 01:05:45 · 1365 阅读 · 0 评论 -
Linux 编程:高实时性场景下的内核线程调度与网络包发送优化
CFS 调度器是 Linux 默认的调度策略,适用于大多数通用应用,但在实时性要求较高的场景中可能需要使用 SCHED_FIFO 或 SCHED_RR 等实时调度策略。PREEMPT-RT 补丁 可以优化系统的实时性,减少内核的调度延迟,尤其适用于需要低延迟和高实时性的嵌入式系统和自动驾驶等应用。对于需要处理实时数据的系统,使用 SCHED_FIFO 配置网络和中断处理线程,可以最大程度地减少延迟和丢包,提高系统性能和稳定性。原创 2024-11-06 01:57:14 · 1705 阅读 · 0 评论 -
Linux编程:使用DMA优化UDP 数据传输吞吐量并降低延迟
UDP 网络传输常面临高 CPU 占用、传输延迟和丢包等挑战。本文将介绍 DMA 如何优化 UDP 数据包的发送,以提高吞吐量、减少延迟并降低 CPU 占用。原创 2024-11-06 02:59:07 · 1885 阅读 · 0 评论 -
使用 C++ 进行高效序列化和反序列化的实现(优化版本)
之前的文章 二进制序列化与反序列化:支持C++基础类与STL容器已介绍了serialize.hpp,本文将给一个支持C++14以上版本的优化版本。原创 2024-11-02 23:53:01 · 1243 阅读 · 0 评论 -
Iceoryx2:高性能进程间通信框架(中间件)
Iceoryx2 是一个基于 Rust 实现的开源中间件,专为实现超低延迟和高可靠性的零拷贝进程间通信而设计。相比其前身Iceoryx,Iceoryx2 在多个关键领域进行了显著改进,包括内存安全、并发处理、模块化设计以及多平台支持。原创 2024-11-02 12:03:25 · 2128 阅读 · 0 评论 -
使用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 · 1429 阅读 · 0 评论 -
C++编程:利用ARM硬件加速CRC32计算
本文将介绍如何在ARM架构上通过硬件加速实现高性能的CRC32计算,并与传统的软件实现进行性能对比。原创 2024-10-11 20:53:12 · 1654 阅读 · 0 评论 -
C++编程:实现一个基于原始指针的环形缓冲区(RingBuffer)缓存串口数据
本文将介绍一个解析串口数据的环形缓冲区,使用'$'或者'#'分割串口消息。选用内存块数组,而不是选用一整块的内存+读写指针的方式,以减少读写数据时的资源竞争。原创 2024-10-17 10:03:10 · 1853 阅读 · 0 评论