- 博客(122)
- 资源 (10)
- 收藏
- 关注
原创 Iceoryx请求/响应通信
除了设置队列的容量和定义是否应连接客户端以及创建时是否提供服务器外,还可以定义慢速客户端和服务器的行为。与客户端端口类似,服务器端口具有ServerPortData,该数据位于共享内存中,仅包含数据,但不包含访问它们的方法。ServerPortUser是提供用户访问方法的类,ServerPortRouDi提供RouDi所需的接口,以便在服务器提供服务后将客户端连接到服务器,并清理端口资源。根据客户端和服务器选项,请求可能会被丢弃,或者服务器可能有一个工作池,导致以与接收请求不同的顺序发送响应。
2024-09-18 15:56:30
942
原创 iceoryx共享内存通信
当POSIX系统中的进程启动时,它会被赋予自己的虚拟地址空间。虚拟地址空间跨越的范围对于不同的进程可能是相同的,但是在特定地址可访问的数据对于每个进程可能是不同的。在进程的虚拟地址空间内,有许多“内存区域”用于加载或映射数据。这些内存区域通常是进程虚拟地址空间中不相交的范围,比如:1、正在运行程序的执行指令(即程序的代码段)2、静态变量声明(即程序数据段)3、运行程序使用的共享库的执行指令(libraries.text段)4、进程堆栈5、进程的堆6、共享内存段。
2024-09-14 10:48:52
460
转载 SOME/IP-SD 深入浅出
到这里,SOME/IP算介绍完了。换言之,我们完全可以基于vsomeip开发SOME/IP应用程序,不用关心报文长什么样,也不用关心服务发现和事件订阅的细节,拿到手已经是Payload了,如果再用上GENIVI的CommonAPI,IDL一写,一条命令下去,代码自动生成了,Payload都用不着解析了,这样就实现了真正的RPC,是不是有点感兴趣了呢,那就继续关注我吧。当服务不可用时,会主动发送StopOfferService报文,用以告知组播内其他节点,该服务目前不可用,停止发送请求,并取消订阅。
2023-07-24 16:52:28
555
转载 SOME/IP 协议介绍
Payload,也叫有效载荷,是消息内容,通常它的长度是可变的。消息类型和通信机制之间的映射关系,如下图所示(灵魂画手,将就看吧),不难发现,Field结合了Method和Event,这也就理解了Message ID中为什么只有Method ID和Event ID,没有Field ID。这里插播一点个人理解,在SOA中,每个服务就好像我们每一个人在社会中扮演的角色,在对别人提供着服务的同时,同时也享受着别人提供出来的服务,人与人之间,既是彼此独立的,又是需要互相通讯的。关于SOA,以后再扯,记得关注哦~
2023-07-24 16:41:38
426
转载 QNX资源管理器
资源管理器顾名思义就是管理“资源”的服务器,这里问题是,到底什么是“资源”呢?在QNX上,“资源”可以是一个硬件(硬件资源管理器其实就是我们常说的硬件驱动),“资源”也可以是一种服务,比如TCPIP网络服务,或者ntfs文件系统服务;“资源”甚至可以是一个文件(或者目录)。如果你还记得,Unix的基本思想,就是“把驱动当成文件”,那资源管理器就非常有用了。所以/dev/ser1是一个管理串口的资源管理器,而/dev/random则是一个提供随机数的资源管理器。
2023-07-22 17:48:27
1071
转载 QNX的路径名空间与搜索
综上,这里解释了QNX路径名搜索的概念,以及一些细节。也许你会问,知道这些有什么用呢?知道了路径名是怎么搜索的,就可以在系统设计时尽量避免一些可能降低系统性能的设计。比如,尽量不要交叉注册路径名,由一个资源管理器注册/media/db;另一个注册/media/control;会使得路径名搜索时简单明了;而如果一个资源管理器注册/media,另一个注册/media/player的话,以后每次对 /media/player下进行读写时,都有可能引起不必要的消息传递。
2023-07-22 17:35:09
376
转载 从API开始理解QNX – 系统脉冲
首先这是一个脉冲,所以希望收到这个脉冲的进程必须首先建立一个频道(对,即使你是一个“客户端”进程,通常只连接别人的频道,为了接收脉冲,也要自建频道)。当一个客户端与一个服务器端建立起连接以后,如果服务器端突然退出了,内核会向客户端发送这个_PULSE_CODE_COIDDEATH脉冲,以通知客户端它所连接的服务器出了问题。当然,与上一个线程死亡的脉冲相似,客户端也必须准备好一个特殊的频道(在建立频道时设_NTO_CHF_COID_DISCONNECT标志位),同时这样的频道也在一个进程中也只能有一个。
2023-07-22 17:05:19
358
转载 关于 MsgDeliverEvent()
对于 QNX 的 MsgDeliverEvent() 这个内核调用,后台有不少疑问,分出来细讲一下吧。这个函数的基本用法是这样的:如上所见,客户端是会需要阻塞等待事件发生的。但这个并不是绝对的,根据事件具体是什么而定。
2023-07-22 16:58:51
274
转载 从API开始理解QNX
在QNX里这是非常常见的情况,比如你去read()一个串口,串口驱动就是你的服务器,当没有数据进来时,串口驱动就不应答你,造成你的程序一直在 read() 里等着。虽然read()是从服务器取得数据,而write()是向服务器输出数据,但实质上,它们都是向服务器提出一个请求,由服务器来应答。一个常见的情形是这样的。需要再次指出的是,真正在QNX上写程序的时候,很少会直接用到这些API,而是利用更高层的API,不过,知道这些底层的API对于将来理解建立在这些API上的界面,应该会有帮助的。
2023-07-22 15:04:07
379
原创 Fast DDS 介绍
前面已经简要介绍过DDS协议规范了,接下来我们来看一个它的C++实现----Fast DDS。eProsima Fast-DDS是eprosima对于DDS的C++实现,这是一个免费开源软件,遵循Apache License 2.0。eProsima Fast DDS在性能,功能和对最新版本RTPS标准(RTPS 2.2)的遵守方面均处于领先地位。它最为被大家知道的可能是因为被ROS2设定为默认的消息中间件。Fast DDS由以下几部分组成:1.DDS API接口实现;
2023-04-12 14:38:31
2267
原创 DDS介绍
DDS是一种网络中间件,可以简化网络编程;它实现了一个超越基本发布-订阅模式的机制,用于在节点之间发送和接收数据、事件和命令。产生信息的节点(发布者)创建“主题”(例如,温度、位置、压力)并发布“样本”。DDS 将样本交付给声明对该主题感兴趣的订阅者。主要好处是使用 DDS 进行通信的应用程序是分离的,很少需要花费设计时间来处理它们的相互交互。特别是,应用程序永远不需要有关其他参与应用程序的信息,包括它们的存在或位置(支持去中心化);DDS 透明地处理消息传递,无需用户应用程序的干预。
2023-04-12 10:49:21
5032
1
原创 fastDDS之Subscriber
订阅由定义了DataReader与Subscriber的关联。为了接收发布的消息,应用程序需要再Subscriber创建一个新的DataReader。这个DataReader将被绑定到描述将要接收的数据类型的Topic上,然后就开始开始从与此Topic匹配的Publisher接收数据。当Subscriber接收到数据时,它通知应用程序有新数据可用。然后,应用程序通过DataReader来获取接收到的数据。
2023-04-09 15:30:06
1486
原创 fastDDS之Publisher
发布定义了DataWriter和Publisher的关联。要开始发布数据实例的值,应用程序在Publisher中创建一个新的DataWriter。此DataWriter将绑定到描述正在传输的数据类型的Topic上。与此Topic匹配的远程订阅将能够从DataWriter接收数据值更新。
2023-04-06 19:18:34
995
原创 fastDDS之Domain
一个domain代表了一个独立的通信平面。它在共享公共通信基础结构的实体之间创建了逻辑分离。从概念上讲,它可以被视为一个虚拟网络,将运行在同一个域中的所有应用程序连接起来,并将它们与运行在不同域中的应用程序隔离开来。通过这种方式,几个独立的分布式应用程序可以在同一个物理网络中共存,而不会相互干扰,甚至可以相互感知。每个域都有一个唯一的标识符,称为domainId,实现为uint32值。共享系统domainId的应用程序属于同一个域,相互之间能够进行通信。
2023-04-06 15:57:18
1361
原创 程序参数解析C/C++库 The Lean Mean C++ Option Parser
如果你有意思完全相反的选项(例如–enable foo和–disable foo),你也应该给它们相同的索引,但通过不同的类型值来区分它们。如果您不想使用固定大小的数组(可能会变得太小,导致命令行参数被丢弃),可以使用Stats来确定正确的大小。16.第一个不以“-”开头并且不属于前面的选项的参数将终止选项列表,并且是第一个非选项参数。5.最后一个带参数的短可选项可以和其他的组合,比如: -ABCXfoo -ABCX foo (foo 是-X 可选项的参数);它用于检查选项是否可以接受潜在的参数。
2023-03-27 15:24:47
949
转载 深入浅出-网络OSI七层模型和TCP/IP四层模型
OSI 模型(Open System Interconnection model)是一个由国际标准化组织提出的概念模型,试图提供一个使各种不同的计算机和网络在世界范围内实现互联的标准框架。它将计算机网络体系结构划分为七层,每层都可以提供抽象良好的接口。了解 OSI 模型有助于理解实际上互联网络的工业标准——TCP/IP 协议。OSI 模型各层间关系和通讯时的数据流向如图所示:七层模型介绍 物理层: 物理层负责最后将信息编码成电流脉冲或其它信号用于网上传输;eg:RJ45等将数据转化.
2021-03-07 18:30:12
2055
转载 图解:原来这就是网络
你是一台电脑,你的名字叫 A很久很久之前,你不与任何其他电脑相连接,孤苦伶仃。直到有一天,你希望与另一台电脑 B 建立通信,于是你们各开了一个网口,用一根网线连接了起来。用一根网线连接起来怎么就能"通信"了呢?我可以给你讲 IO、讲中断、讲缓冲区,但这不是研究网络时该关心的问题。如果你纠结,要么去研究一下操作系统是如何处理网络 IO 的,要么去研究一下包是如何被网卡转换成电信号发送出去的,要么就仅仅把它当做电脑里有个小人在开枪吧~反正,你们就是连起来了,并且可以通信。...
2021-03-06 17:28:08
368
原创 安卓截屏初体验
工作需要,需要后台服务去定时截取前台显示app的画面。百度一下,网上很多例程,以为很简单,然并卵,一路踩坑。。。踩坑一:使用View.getDrawingCache()方法View dView = getWindow().getDecorView();dView.setDrawingCacheEnabled(true);dView.buildDrawingCache();Bitmap bitmap = Bitmap.createBitmap(dView.getDrawingCache());if
2020-12-29 19:40:19
853
转载 车载以太网之 DHCP协议
车载以太网与传统以太网的主要区别在于二者的物理层,前者的物理层采用一对双绞线的100BASE-T1,而后者的物理层采用两对双绞线的方式,比如100BASE-TX。而二层以上的协议栈,车载网络则基本借鉴传统网络,区别并不大。下图是基于车载以太网的车载网络所使用的各种通信协议,在这篇文章中我将简要介绍一下位于7层上的DHCP协议。车载以太网涉包含的各种协议DHCP的全称是Dynamic Host Configuration Protocol,翻译作动态主机配置协议。它的用途是为网络节点自动配置I
2020-12-01 11:20:06
1388
转载 XCP协议介绍
标定贯穿整车开发的整个过程,是整车开发中的重要环节,从部件单体的台架软件参数的标定,到整车环境下的夏季标定、高原标定、冬季标定。XCP全称Universal Calibration Protocol,是由ASAM (Association for Standardization of Automation and Measuring Systems,简称 ASAM)组织在2003年提出的可在不同的通信总线上进行标定的新型标定协议,这里的X代表不同的传输层上传输(CAN、Ethernet、FlexRay、
2020-11-30 19:53:05
3240
1
转载 DoIP技术(二)
本文继DoIP技术(一)一文之后继续分享与DoIP技术相关的一些内容。首先来介绍一下支持ethernet及DoIP的车载网络架构。带ethernet节点的车载网络架构示意图上面这张图简要描述了带ethernet节点的车载网络和外部网络中的测试设备之间的关联。在车载网络中,必须有且只有一个DoIP edge node gateway,它作为汽车对外部诊断设备的唯一接口。此外,还可能存在以下几种类型的节点:支持DoIP,同时作为gateway,在它背后还有子网络 不支持DoIP,但是支持eth
2020-11-30 18:31:24
667
转载 DoIP技术(一)
DoIP是Diagnostic communication over Internet Protocol 的简称,顾名思义,就是通过网络协议进行诊断通信。这里的网络协议,指的就是OSI七层模型中,通用计算机网络所使用的从层4到层1这四层协议。DoIP由ISO13400 系列标准定义,作为实现基于Ethernet的诊断通信的方案。本标准的各部分内容如下:— Part 1: General information and use case defnition— Part 2: Transport p
2020-11-30 18:29:12
849
转载 SOME/IP协议介绍
SOME/IP全称Scalableservice-Oriented Middleware over IP,基于IP的可扩展面向服务的中间件。中间件的概念在汽车电子比较陌生,个人理解类似于手写代码的链接层,更确切的理解借用知乎一大佬的解答,如下所示。SOME/IP协议于2011年由BMW集团的Lars Völker设计,并于2013年纳入AUTOSAR 4.1规范,其在规范里定义如图1所示。在车载以太网的协议架构中,SOME/IP位于应用层(如图2所示),提供面向服务的通信接口。其通信方式为AUTOS
2020-11-30 18:12:44
14802
转载 wireshark怎么抓包、wireshark抓包详细图文教程
wireshark是非常流行的网络封包分析软件,功能十分强大。可以截取各种网络封包,显示网络封包的详细信息。使用wireshark的人必须了解网络协议,否则就看不懂wireshark了。为了安全考虑,wireshark只能查看封包,而不能修改封包的内容,或者发送封包。wireshark能获取HTTP,也能获取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的内容,总结,如果是处理HTTP,HTTPS 还是用Fiddler, 其他协议比如TCP,UDP 就用wireshark.
2020-11-25 11:21:13
618
转载 Android源码编译生成文件夹(out)详解
Android编译生成的所有文件都是和源码分离的,所有中间文件和结果都放在out文件夹中。out文件夹结构如下:|-- host/ # 构建源码需要的工具和库文件|-- target/product/generic/ # 生成最后产品的目录 |-- data # 这个目录是用来生成<数据文件系统镜像>(data file system image)userdata.i
2020-11-09 09:18:39
3413
转载 --start-group和--end-group
ld链接器,正常情况,链接的时候库文件只会按它们出现在命令行的顺序搜索一遍,如果包里有未定义的引用标号,而且该包还被放在命令行的后面,这样链接器就无法解决该标号的引用问题。通过给包分组,这些包可以被循环搜索直到所有的引用都可以解决为止。使用该选项将降低性能。只有在无法避免多个包之间互相引用的情况下才使用。...
2020-10-19 14:29:31
2023
原创 矩阵旋转、欧拉角旋转、四元数旋转的优缺点
表示旋转的方法有很多种,如矩阵、欧拉角、四元数,他们在不同的场合各有优缺点,下面是他们的优缺点对比:一、矩阵旋转:优点:旋转轴可以是任意向量缺点:旋转其实只需要知道一个向量+一个角度(共4个信息值),但矩阵却用了16个元素(矩阵法消耗时间和内存)二、欧拉角旋转优点:容易理解,形象直观;表示更方便,只需要三个值(分别对应x、y、z轴的旋转角度)缺点:欧拉角这种方法是要按照一个固定的坐标轴的顺序旋转的,因此不同的顺序会造成不同结果;欧拉角旋转会造成万向锁现象,这种现象的发生就是由于上述固定的坐标轴旋
2020-09-14 11:26:33
4499
原创 sscanf 解析字符串
之前一直以为C++引入正则表达式之前,不能实现类似功能,最近发现sscanf就可以实现一些简单的字符串解析功能,记录下。int scanf( const char *format [,argument]… ); char buf[100]; //1、常用用法 sscanf("123456abcdeABCDE", "%s", buf); printf("1 、buf = %s\n", buf); //2、限制读取字符长度 sscanf("123456abcdeABCDE", "%5s", buf
2020-09-04 16:17:42
1841
原创 sizeof()、strlen()区别
1、sizeofsizeof是运算符,其值在编译时已计算好,参数可以是数组、指针、类型、对象、函数等。功能是获得保证能容纳实现所建立的最大对象的字节大小。由于在编译时计算,故不能用来返回动态分配的内存空间大小。2、strlenstrlen是函数,运行时计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。功能是返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该换书实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符’\0’,返回
2020-08-20 16:27:54
219
转载 sizeof用法详解
一、sizeof是什么sizeof是C语言的一种单目操作符,如C语言的其他操作符++、–等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。二、sizeof的使用方法1、用于数据类型 sizeof使用形式:sizeof(type) 数据类型必须用括号括住。如sizeof(int)。2、用于变量sizeof使用形式:sizeof(var_name)或sizeof var_name变量名可
2020-08-20 15:56:45
72559
3
原创 Linux下getopt()函数的简单使用
在linux下,写一些小demo,需要配合参数的使用更灵活,参数的检测使用getopt()函数就非常方便。函数:int getopt(int argc,char * const argv[ ],const char * optstring)头文件:unistd.h参数说明:optstring:检索选项配置字符串。规则:一个冒号表示该选项后面必须带有参数(没有参数会报错),参数可以和选项连在一起写,也可以用空格隔开;两个冒号表示该选项的参数是可选的,可以有参数,也可以无参数,但是需要注意,参数和选项
2020-08-17 18:07:46
422
转载 H264帧格式解析
H264帧基础知识一组图像 GOP所谓GOP就是1组图像Group of Picture,在这一组图像中有且只有1个I帧,多个P帧或B帧,两个I帧之间的帧数,就是一个GOP。GOP一般设置为编码器每秒输出的帧数,即每秒帧率,一般为25或30,当然也可设置为其他值。在一个GOP中,P、B帧是由I帧预测得到的,当I帧的图像质量比较差时,会影响到一个GOP中后续P、B帧的图像质量,直到下一个GOP 开始才有可能得以恢复,所以GOP值也不宜设置过大。由于P、B帧的复杂度大于I帧,所以过多的P、B帧会影响
2020-07-21 10:31:32
1349
原创 YUV格式详解
之前工作中有接触到YUV格式,懒得去了解。最近做一些音视频的处理,该来的还是会来的,逃不掉的,总结下,便于后续自己查阅。YUV,是一种颜色编码方法,常使用在各个影像处理组件中。Y”表示明亮度(Luminance、Luma),“U”和“V”则是色度、浓度(Chrominance、Chroma)。相对我们都比较熟悉的编码格式RGB,RGB诉求于人眼对色彩的感应,YUV则着重于视觉对于亮度的敏感程度。 YUV在对照片或影片编码时,考虑到人类的感知能力,允许降低色度的带宽。换句话说,也就是编码的时候允许Y的量比U
2020-07-02 17:57:34
797
原创 HxD - Freeware Hex Editor and Disk Editor
推荐一款免费的软件HxD - Freeware Hex Editor and Disk Editor用于查看编码很方便官网:https://mh-nexus.de/en/hxd/里面有简体中文版
2020-07-02 16:32:00
2262
原创 Google Protocol Buffer
protocol buffer是google的一个开源项目,它是用于结构化数据串行化的灵活、高效、自动的方法。相对XML、JSON,它更简单高效。官方帮助文档链接:https://developers.google.cn/protocol-buffers/docs/reference/overviewGitHub地址:https://github.com/protocolbuffers/protobuf/tree/3.1.x接下来我们来配置下windows下环境:1、由CMake 生成VS工程:
2020-07-02 16:04:55
537
原创 如何在VS中查看C/C++预处理后的文件
1、右键工程(例子中是myproject),选择【Properties】,在弹出的对话框中,选择【Configuration Properties】–>【C/C++】–>【Preprocessor】,将【Preprocess to a file】该为【Yes】,应用,确认。2、右键工程,选择【build】,等待预处理完成,选择【Open Folder In Fle Explorer】。在debug目录下,就会发现以.i结束的文件,这就是预处理之后的文件。3、将第一步修改改回,才可以编译调试
2020-07-01 09:55:28
2425
2
转载 libcurl 使用方法简介
最近项目中需要使用http实现文件的上传功能,使用到了libcurl,转载了一篇博客记录下,便于后续的查看。简介libcurl是一个跨平台的开源网络协议库,支持http, https, rtsp等多种协议 。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。所以,使用libcur...
2020-05-06 15:28:55
2827
原创 git 修改回滚
使用git管理代码避免不了代码的回滚,先介绍一下git reset的使用,然后介绍下各种场景如何回滚一、git reset 【<mode>】 【<commit>】重置当前分支的HEAD 到【<commit>】提交的版本,并且根据【<mode>】决定是否修改暂存区和工作去的内容。【<mode>】模式默认是--mixed 。下面是各个...
2020-04-15 18:50:15
884
转载 查询磁盘空间 statfs函数
因为要读取SD卡的大小和使用情况,所以用到statfs这个函数,功能类似于df命令。需要的头文件:#include <sys/vfs.h>int statfs(const char *path, structstatfs*buf);struct statfs {long f_type; /* 文件系统类型 */long f_bsize; /* 经过优化的传输块大...
2020-04-15 12:24:54
1333
i.MX_6_EGL-OES_Extension_Support.pdf
2019-11-26
i.MX_6_Graphics_User's_Guide.pdf
2019-11-26
跟我一起写Makefile.pdf
2019-06-14
Python_2.7.2_debug.rar
2019-05-30
canoe和vehical spy比较
2019-02-28
QNX下的PPS使用
2019-02-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人