自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 任务并行(Task Parallelism)和数据并行(Data Parallelism)的概念

选择:少量任务用 std::async;高频任务用线程池。同步:始终注意数据竞争,使用 std::mutex 或原子变量。性能:并行化有开销(线程切换 ~100ns),只在任务足够大时使用。测试时用 std::chrono 测量时间。编译:用 g++ -std=c++11 -pthread 编译。进阶:结合 OpenMP(数据并行友好)或 CUDA(GPU 数据并行)。

2025-08-11 15:06:24 324

原创 auto 是一种类型推导关键字

auto 是C++11及以后版本中强大的类型推导工具,简化了代码编写,尤其在容器遍历、模板编程和 lambda 表达式中。通过结合引用(&)、常量(const)和 C++14/17 的增强功能,auto 提供了灵活性和性能优化。合理使用 auto 可以让代码更简洁、易维护,但需注意避免滥用以保持代码清晰。如果你有具体的代码或场景需要分析(如调试 auto 推导问题或优化代码),可以提供更多细节,我会进一步帮你解答!

2025-08-11 10:00:51 453

原创 范围for循环

范围for循环是C++中一种优雅的遍历方式,适合快速迭代容器或数组的场景。它简化了代码,提高了可读性,但不适合需要索引或复杂迭代逻辑的场景。通过合理使用 auto、const 和引用,可以进一步优化性能和代码清晰度。如果需要更高级的范围操作,C++20 的 std::ranges 提供了更多灵活性。如果你有具体的代码或场景想进一步探讨,可以提供更多细节,我会帮你分析!

2025-08-11 09:47:25 176

原创 ros2 bag接口解析

【代码】ros2 bag接口解析。

2025-08-11 09:23:09 80

原创 性能解析案例

是内核fd与应用程序直接的关系。1.检测io是否就绪。

2025-08-10 16:42:50 104

原创 Git pro 学习

git 配置:

2025-08-03 18:57:32 76

原创 Fastdds中消息大小与payload的关系

在 FastDDS 中,“消息”通常指的是 RTPS(Real-Time Publish Subscribe)协议中的数据包,而是指消息中实际承载的用户数据部分(即应用程序发送的实际内容)。因此,,而是消息中用户数据的部分。消息的总大小包括:textCopy。

2025-08-03 18:57:16 653

原创 Zombie Process

在 Ubuntu 系统中,僵尸进程(Zombie Process)是指已经终止但尚未被其父进程回收的进程。这些进程会占用系统资源(如进程 ID),虽然通常影响较小,但大量僵尸进程可能导致系统资源耗尽。以下是详细指导,教你如何查找、分析和处理 Ubuntu 系统中的僵尸进程。

2025-07-31 11:15:47 590

原创 Fastdds中的端口号计算

这些默认值遵循 OMG RTPS 规范,确保不同域和参与者之间的端口分配通常不会冲突。源代码路径在端口参数的头文件 PortParameters.h。

2025-07-23 14:04:46 292

原创 RTPS协议

History 类是 Fast DDS 中用于管理 RTPS 数据样本的核心容器,负责存储、查找、删除和遍历 CacheChange_t 对象。它支持 DDS 的关键 QoS 策略(如历史、可靠性和资源限制),在发送端(RTPSWriter)和接收端(RTPSReader)中广泛使用。通过序列号、GUID 和键值管理样本,History 确保数据传输的顺序性、可靠性和实例隔离,是 DDS 通信系统的关键基础设施。

2025-07-23 13:57:21 850

原创 Fast dds同步和异步发布模式

eProsima Fast DDS 支持同步和异步两种数据发布方式。在 eProsima Fast DDS(一种基于 DDS - Data Distribution Service 数据分发服务的中间件)中,同步和异步发布模式指的是数据发布者(Publisher)向订阅者(Subscriber)发送数据的方式。

2025-07-21 13:47:30 413

原创 SampleLostStatus,用于记录数据样本丢失的情况。

SampleLostStatus 是一个用于监控数据样本丢失的机制,具体行为取决于所配置的可靠性 QoS(服务质量)。在尽力而为模式下,丢失判断基于序列号;在可靠模式下,丢失判断基于 RTPS 协议的显式通知。这些信息帮助开发者了解数据传输的完整性,特别是在分布式实时系统中非常关键。4.2.3. 使用历史记录发送和接收数据在 RTPS 协议中,Reader 和 Writer 将有关某个主题的数据保存在它们关联的历史记录(History)中。

2025-07-21 09:39:23 824

原创 路由协议原理

geatway是下一跳地址。

2025-07-06 21:04:49 107

原创 可重入性函数

一个函数正在执行中,再次执行本函数,但结果还是不变就是可重入性的。分层:让每一层的目标足够简单。ISO/OSI 七层模型。下层:实现功能,提供接口。上层:使用接口,使用功能。

2025-07-06 20:44:07 172

原创 网络数据的流动

udp ‘’发短信”主机内的不同进程 端口号 16bit 0~65535。os内核实现: 传输层 tcp "打电话"在全球因特网 主机 ip地址 32bit。物理地址 mac地址 48 bit。pops/smtp 电子邮件。0~1023 知名协议端口号。rtmp协议,音视频直播。局域网中有很多物理设备。

2025-07-06 15:34:31 155

原创 发送与接收

在Fast DDS中,消息的发送与接收确实会经过RTPS层、DDS层,最终到达应用层。这一流程体现了Fast DDS作为DDS(Data Distribution Service)标准实现的核心架构设计。

2025-06-22 19:40:13 728

原创 flow_controllers

这些流控制器用于管理 DDS 中数据发布的同步性、异步性和调度策略,确保数据按需高效传输。此函数初始化流控制器工厂,创建三种默认流控制器实例(

2025-06-09 20:56:11 257

原创 解析XML函数调用

XMLProfileManager.cpp XMLP_ret XMLProfileManager::loadXMLFileXMLParser.cpp XMLP_ret XMLParser::loadXML()XMLProfileManager.cpp XMLP_ret XMLProfileManager::extractProfiles()XMLProfileManager.cpp XMLP_ret XMLProfileManager::extractPar

2025-04-30 15:43:14 148

原创 FastDDS 解析xml文件

TinyXML-2 是一个轻量级的 C++ XML 解析库,用于解析和操作 XML 数据。

2025-04-29 10:44:44 312

原创 RTI QOS继承关系

在RTI Connext中,QoS继承关系是指一个QoS Profile可以从另一个QoS Profile继承配置,从而简化配置过程并提高可重用性。通过继承,子Profile会首先初始化为父Profile的所有QoS设置,然后可以覆盖其中的部分设置。

2025-04-24 16:02:30 430

原创 QOS-Patiton 分区策略

分区是一种灵活且高效的机制,用于在域和主题的基础上进一步隔离和管理发布者与订阅者。通过动态更改分区成员资格和支持多分区成员资格,分区能够满足复杂的数据分离和通信需求,同时减少系统资源的消耗。分区与端点相关,而不是与数据更改相关。这意味着端点的历史记录不会受到分区更改的影响。例如,如果一个发布者切换了分区,之后需要重新发送某些旧的更改,它会将这些更改发送到新的分区集合中,而不考虑这些更改是在哪些分区定义时创建的。这意味着一个晚加入的订阅者可能会接收到在另一个分区集合活动期间创建的更改。

2025-04-23 16:48:15 740

原创 信号的概念

硬件 异步 ctrl +c 向硬件中断的处理程序发了一个信号。自己写好的函数作为参数让别人来调用。把函数当成 参数 函数指针。软件 异步 kill-9。软件 同步 abort。

2025-04-20 20:52:14 223

原创 使用共享内存步骤

size:共享内存段的大小。key: 区分共享内存。

2025-04-20 19:53:25 256

原创 rtps报文分析

在RTPS(实时发布订阅协议,Real-Time Publish-Subscribe)协议中,HEARTBEAT报文用于在发布者和订阅者之间进行心跳检测,确保通信链路的活性和数据传输的可靠性。通过这个字段,发送方(如发布者)可以了解接收方已经成功接收了哪些数据包,从而避免重复发送已接收的数据。它标识了发送方已传输的数据包的最大序列号。假设发布者已经发送了序列号1到100的数据包,而订阅者已经成功接收了序列号1到95的数据包。,这意味着接收方已经确认接收了所有发送方发送的数据包。

2025-04-18 10:08:55 318

原创 ROS中订阅(Subscribe)最新消息以及消息队列相关问题

Subscriber所订阅的消息的发布频率可能是很高的,而这些操作的运算速度肯定达不到消息发布的速度。所以,如果我们要是没有取舍的对于每个消息都调用一次回调函数,那么势必会导致计算越来越不实时,很有可能当下在处理的还是几十秒以前的数据。通过使用消息队列和多线程,可以有效地管理高频率发布的消息,确保只处理最新的消息,避免系统延迟和处理过时数据。以下是一个使用C++实现的示例代码,展示如何在ROS的Subscriber回调函数中只处理最新的消息。

2025-04-16 17:06:47 551

原创 CMake学习

如果使用其他编译器(如Microsoft Visual C),这些选项不会被添加,可能需要在不同的编译器上进行不同的配置。通过以上步骤,这段CMake代码确保了项目在使用g++或Clang编译器时会启用额外的警告选项,同时指定了项目所需的CMake最低版本和项目名称。,开发者可以更方便地配置ROS2项目的构建,而不需要手动处理复杂的CMake配置。通过这两行代码,项目的源文件被正确地收集和编译,形成了一个可以在其他部分引用的库。nm命令主要用于显示二进制文件中的符号信息,包括函数和变量的地址和类型。

2025-04-16 16:12:56 898

原创 RTPS数据包分析

特性DATA(r)DATA用途通知发布者关于订阅者的属性信息。传输实际的用户数据内容。内容订阅者的属性信息,如QoS设置、主题过滤条件等。用户应用层的具体数据内容。触发条件订阅者创建或修改属性时发送。每当有新的数据需要发布时发送。消息类型控制消息,用于建立和管理订阅关系。数据消息,用于实际数据传输。

2025-04-14 20:53:06 1010

原创 订阅不到topic排查方式

【代码】订阅不到topic排查方式。

2025-04-11 18:25:17 229

原创 内核态切换到用户态

是操作系统中 CPU 执行模式的一种切换过程,涉及从高权限的内核态(Kernel Mode)切换到低权限的用户态(User Mode)。通过这种切换机制,操作系统能够为应用程序提供安全、高效的运行环境,同时保护硬件资源不被滥用。,导致 CPU 从用户态切换到内核态。当用户态程序需要访问硬件资源或执行特权操作时,会触发。

2025-04-09 20:23:36 430

原创 POSIX线程库信号量线程同步

这段代码展示了如何使用信号量来控制线程之间的同步。sem_init用于初始化信号量,sem_wait用于等待信号量,sem_post用于释放信号量。通过这样的机制,可以确保线程之间的协调执行。

2025-04-08 10:39:39 245

原创 文件映射mmap与管道文件

简单来说,把磁盘里的数据与内存的用户态建立一一映射关系,让读写内存等价于读写磁盘,支持随机访问。named pipe /FIFO 命名管道:在文件系统中存在路径。在用户态申请内存,内存内容和磁盘内容建立一一映射。管道文件:进程间通信机制,不占用磁盘空间。创建管道 mkfifo 1.pipe。进程之间沟通可以通过磁盘文件沟通。管道需要两个进程通信才能使用。读写内存等价于读写磁盘。

2025-04-06 18:17:35 228

原创 vscode使用方式

一、常用快捷键与代码操作Ctrl + /;1。代码缩进:选中代码段后按Tab(右移)或(左移)1。Ctrl + P;Ctrl + G;12。(复制行);Alt + ↑/↓(移动行)1。Alt + 单击或(上下插入)1。或1。

2025-04-06 10:56:02 906

原创 主题(topic)中使用键(key)来区分同一主题下的多个数据实例

1. **主题(Topic)**:在DDS中,主题是数据的类型或类别。4. **数据区分**:在订阅时,订阅者可以根据键来指定感兴趣的数据实例。总结来说,在Fast DDS中,通过为同一主题下的不同数据实例分配唯一的键,可以实现对数据的精确区分和高效管理,确保数据在分布式系统中的准确传输和处理。3. **键(Key)**:键是用于唯一标识同一主题下的不同数据实例的标识符。5. **数据管理**:通过键,DDS系统可以高效地管理数据实例,包括数据的持久化、历史数据的维护以及数据一致性的保证。

2025-04-03 15:46:11 185

原创 二维数组按行读取和按列读取的效率比较

二维数组在内存中通常采用行主序(Row-Major Order)存储,即同一行的元素在内存中是连续存储的。这种存储方式使得按行读取元素能够更好地利用CPU缓存,提高读取效率。而按列读取则需要跳跃式访问内存,可能导致缓存未命中,性能较差。在大多数情况下,按行读取二维数组的效率会比按列读取快,这主要得益于行主序存储方式和CPU缓存的局部性原理。

2025-04-02 13:59:33 188

原创 如何发现死锁,在开发时怎么避免死锁

死锁是指在多线程或多进程环境中,由于资源分配不当,导致两个或多个进程/线程无限阻塞,永远无法继续执行的现象。常见的死锁例子包括数据库的事务死锁、线程间的资源竞争等,死锁往往在高并发或者复杂的业务场景下才会出现.。

2025-04-02 10:53:20 295

原创 怎么发现性能瓶颈

要发现性能瓶颈,通常需要结合工具和手动分析。使用 Profiler 获取整体的性能数据。找出消耗时间最多的函数或代码块。手动分析这些代码,判断是否有优化空间。验证优化效果。通过这些方法,你可以系统地定位并解决性能问题。

2025-04-02 10:34:40 305

原创 如何调试内存泄漏

检测和修复内存泄露至关重要,这有助于确保 C++ 程序的稳定性。通过了解泄露的原理、使用检测工具和遵循正确的修复步骤,我们可以防止此类缺陷并维护健壮的代码。这个函数修改了一个指针指向的值,但没有释放指针指向的内存。

2025-04-02 10:29:39 371

原创 大端排序小端排序

1.回顾下历史概念在计算机科学中,、**字(word)**是数据测量和表示的基本单位。

2025-03-24 14:36:34 342

原创 WireShark与rtps协议组合使用

https://community.rti.com/static/documentation/wireshark/2020-07/doc/understanding_rtps.html

2025-03-20 13:39:30 572

原创 Fast dds 内存调优

将 Writer 端的缓存大小从 100 调整为 10,可以显著优化内存占用、降低调度开销、减少网络带宽占用并提高实时性。然而,这需要根据具体的应用场景和需求进行权衡,确保调整后的配置不会影响系统的功能和可靠性。

2025-03-15 15:20:15 457

05-18 资料记录fastrtps

05-18 资料记录fastrtps

2025-05-18

源码分析-20250518

源码分析-20250518

2025-05-18

Git 资料 progit-zh-v2.1.1.pdf

Git 资料 progit-zh-v2.1.1.pdf

2025-04-20

移动语义与资源管理文档

移动语义与资源管理文档

2024-10-10

服务器相关知识框架介绍

服务器相关知识框架

2024-09-24

cppreference-zh-20211231.chm

C++手册

2024-09-23

运算符重载资料上传路径

运算符重载资料

2024-09-20

lambda表达式专题.pdf

lambda表达式专题.pdf

2024-08-26

c++ stl 学习资料汇总

c++ stl 学习资料汇总

2024-02-27

空空如也

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

TA关注的人

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