- 博客(487)
- 资源 (23)
- 收藏
- 关注
原创 [c++] --- 面试知识点
虚函数是在基类中声明的函数,可以在派生类中被重写。它们允许在运行时动态绑定函数调用,这意味着程序可以根据对象的实际类型来调用适当的函数。虚函数通过在函数声明前加上virtual关键字来定义。纯虚函数的定义: virtual 返回类型 函数名(形参) = 0含有纯虚函数的类叫抽象类抽象类的特点:不能用抽象类去实例化对象抽象类的作用:提供一个统一的接口,让子类去实现,子类实现之后才可以实例化对象这个问题从下面几个角度回答?1) C++中的多态有静态多态和动态多态两种形式。
2023-12-12 09:54:22 949
原创 [ROS2] --- 通信接口
通信并不是一个人自言自语,而是两个甚至更多个人,你来我往的交流,交流的内容是什么呢?为了让大家都好理解,我们可以给传递的数据定义一个标准的结构,这就是通信接口。ROS的通信系统,它的主要目的就是传输数据,那就得让大家高效的建立连接,并且准确包装和解析传输的数据内容,话题、服务等机制也就诞生了,他们传输的数据,都要符合通信接口的标准定义。
2023-12-09 12:42:42 391
原创 [ROS2] --- param
类似C++编程中的全局变量,可以便于在多个程序中共享某些数据,参数是ROS机器人系统中的全局字典,可以运行多个节点中共享数据。全局字典在ROS系统中,参数是以全局字典的形态存在的,什么叫字典?就像真实的字典一样,由名称和数值组成,也叫做键和值,合成键值。或者我们也可以理解为,就像编程中的参数一样,有一个参数名 ,然后跟一个等号,后边就是参数值了,在使用的时候,访问这个参数名即可。可动态监控。
2023-12-09 12:42:21 425
原创 [ROS2] --- action
延续上一讲[ROS2] — action,中创建的自定义接口功能包,在src目录下创建action/Concatenate.action文件------
2023-12-09 12:42:06 477
原创 [ROS2] --- service
和话题通信类似,服务通信的核心还是要传递数据,数据变成了两个部分,一个请求的数据,比如请求苹果位置的命令,还有一个反馈的数据,比如反馈苹果坐标位置的数据,这些数据和话题消息一样,在ROS中也是要标准定义的,话题使用.msg文件定义,服务使用的是.srv文件定义。
2023-12-09 12:41:37 459
原创 [ROS2] --- topic
Topic通信模型是一种发布订阅模型,ROS2使用了基于DDS的发布/订阅模型,数据传输过程如下图:话题数据传输的特性是从一个节点到另外一个节点,。
2023-12-08 10:14:15 625
原创 [ROS2] --- ROS2安装
如果“Hello World”字符串在两个终端中正常传输,说明通信系统没有问题。5 为了验证ROS2安装成功,我们可以通过以下示例进行测试。先来试试ROS2最为重要的底层通信系统DDS是否正常吧。至此,ROS2就已经在系统中安装好了。
2023-12-04 23:15:00 436
原创 [ROS2] --- ROS diff ROS2
从原来的只支持linux平台变成了支持windows、mac甚至是嵌入式RTOS平台。对于应用层来说ROS2也做了很大的改进,上面那张图没有体现出来。中间层ROS2到底相对于ROS做了哪些优化呢?可用Python编写的Launch文件。同一个进程支持多个节点、多机器人协同通信支持。支持节点生命周期管理。
2023-12-04 23:00:00 483
原创 [MICROSAR Adaptive] --- Diagnostic Management
本节要介绍的功能块是diagnostic management诊断管理。什么是诊断呢,在医院里我们可以看到为了查清患者的病因,医生需要向患者提出许多问题,而患者要根据自身情况回答这些问题。这是经典的client-server结构,医生是diagnosic client负责发出请求,患者是diagnostic server负责发送响应。对于汽车来说,汽车上的ECU是dignastic server,而外部的tester是diagnostic client。
2023-12-04 15:37:42 1377
原创 [cmake] ---- set_property
在开发过程碰到需要在上级目录中构建,而源代码又分别写在下级目录的情况,同时又要根据不同的情况选择性地添加不同的源代码进行编译,所以考虑将需要编译的源代码放到一个 cmake 列表中。但是set()对应生成的变量都是局部变量(即不同的目录下不共用),于是使用set_property()命令。
2023-11-29 23:45:00 1273
原创 [cmake] --- find_package
find_package指令有两种查找包的模式:模块模式(Module mode)和配置模式(Config mode)。模块模式(Module mode):在模块模式下,find_package会在指定的路径中查找名为 < package >-config.cmake的文件。如果找到了这个文件,那么它会将该文件所在的目录添加到包含目录中,并生成相应的变量,如< package>_INCLUDE_DIRS、< package>_LIBRARIES等。这样,你就可以在项目中使用这个包提供的头文件和库文件了。
2023-11-29 23:00:00 1246
原创 [MICROSAR Adaptive] --- Persistency
ara::per在设计上有什么特点呢?首先是数据的并行访问,ara::per认为一份持久化的数据一定是属于某个进程的local的数据,也就是说,一份持久化的数据不会在两个进程之间直接共享,之所以这样设计是因为我们不希望在ara::com之外再提供一个可能的进程间通信方式,如果进程a依赖于进程b的持久化数据,那么进程b应当利用ara::com向外提供一个服务,然后进程a利用进程b提供的服务,而不是直接去读取属于进程b的持久化数据。
2023-11-22 14:26:53 76
原创 [MICROSAR Adaptive] --- Communication Management
提到通信,我们知道在物联网/机器人等领域,已经有多种通信API了,如DDS等。为什么在autoser adaptive platform上我们又要制定一个通信API的规范呢?ara::com有什么特点吗?首先,在API的设计,ara::com与底层通信协议解耦,他对some-ip协议有很好的支持,同时也有使用其他协议的灵活性;其次,他对事件驱动和轮循这两种风格都有良好的支持;另外,ara::com支持静态的和动态的服务 实例选择。在ara::com的设计中还考虑到了端到端保护等安全方面的需求。
2023-11-22 09:12:00 89
原创 [MICROSAR Adaptive] --- Execution Management
操作系统内核启动完成后,整个系统还需要进行一些初始化才能开始工作,以unix system V为代表的操作系统有一套传统的被广泛采用的初始化机制,操作系统内核启动完成后,创建第一个进程,它被称为init进程。init 进程是整棵进程树的根,在autosar adaptive platform上execution management简称em,就可以起到init system的作用,在操作系统内和启动完成后,我们可以启动execution management守护进程,然后由他来管理其下的所有进程。
2023-11-08 13:46:26 90
原创 [MICROSAR Adaptive] --- 开发环境准备
Ubuntu 20.04/22.04版本默认的cmake版本不超过3.19,gcc/g++为9.x版本而ap开发要求cmake版本大于3.19,gcc/g++版本为gcc-7。
2023-11-07 17:02:38 101
原创 [MICROSAR Adaptive] --- Hello Adaptive World
Davinci Developer Adaptive简称达芬奇,就是vector为基础软件产品MICROSAR Adaptive提供的配套工具。如果您对Eclipse这款IDE比较熟悉,那么很容易看出 Davinci Developer Adaptive本质上就是Eclipse插件。我们也提供预先集成好的版本以不需要分别安装Eclipse和Davinci Developer Adaptive。在这款工具中,我们可以进行建模/验证/生成/编译/运行等各种工作。
2023-11-05 16:42:49 1144 1
原创 [MICROSAR Adaptive] --- autosar官方文档阅读建议
在下载页面可以看到每个文档的介绍,Adaptive AUTOSAR 文档主要分以下几类:文档下载列表中带有 GENERAL 的为 High-level 的一般性文档,应该优先阅读。一般性文档AUTOSAR_EXP_PlatformDesign:整体 Overview,建议从这份文档开始学习AUTOSAR_EXP_SWArchitecture:软件架构AUTOSAR_EXP_AdaptivePlatformInterfacesGuidelines:接口使用指引。
2023-11-05 16:01:40 245
原创 [UDS] --- TesterPresent 0x3E
sub-function定义注意上图为Bit 6 ~ 0的定义,Bit 7(supportPosRspMsgIndicationBit)未在这里定义。本服务不支持有数据参数的报文。诊断仪在线服务只有两个子功能,就是00/80,没有特定的含义。实际使用中一般使用80子功能,子功能参数的最高位就是诊断服务肯定响应抑制位SuppressPosRspMsgIndicationBit,ECU收到SPRMIB为1的服务时,不需要给出肯定响应。相反,当ECU收到SPRMIB为0的服务时,需要给出肯定响应。
2023-11-01 10:30:44 990
原创 [UDS] --- RoutineCommunicationControl 0x31
client端使用RoutineControl服务执行定义的步骤序列并获取任何相关结果。该服务具有很大的灵活性,典型的用法包括擦除内存,复位或学习自适应数据,运行自检,覆盖正常服务器控制策略以及控制服务器值随时间变化等功能。预定义的序列(例如:关闭的敞篷车顶)等等。通常,当用于控制输出时,此服务用于更复杂的类型控制,而inputOutputControlByIdentifier用于相对简单(例如:静态)的输出控制。
2023-10-30 20:05:59 399
原创 [UDS] --- CommunicationControl 0x28
根据ISO14119-1标准中所述,诊断服务28服务主要用于网络中的报文发送与接受,比如控制应用报文的发送与接收,又或是控制网络管理报文的发送与接收,以便满足一定场景下的应用需求。
2023-10-30 19:08:54 223
原创 [UDS] --- ECUReset 0x11
根据ISO14119-1标准中所述,诊断服务11主要用于Client向Server(ECU)请求重启行为。该重启行为将会导致Server复位回归到特定的初始状态,具体是什么初始状态取决于Client的请求行为。
2023-10-30 18:10:23 96
原创 [UDS] --- WriteDataByIdentifier 0x2E
根据ISO14119-1标准中所述,诊断服务2E主要用于Client向Server(ECU)通过DID的方式写入相关的数据。
2023-10-27 11:11:27 164
原创 [UDS] --- ReadDataByIdentifier 0x22
根据ISO14119-1标准中所述,诊断服务22主要用于Client向Server(ECU)通过DID的方式读取相关的数据。这些数据可以输入输出的数字信号,模拟信号,内部数据以及其他的系统状态信息。
2023-10-27 10:54:58 127
原创 [UDS] --- SecurityAccess 0x27 service
为什么需要安全访问?因为在下载/上传的诊断服务例行程序或数据进入服务器并从服务器读取特定的内存位置的情况是可能需要安全访问。不正确的例程或数据下载到服务器中可能损坏电子设备或其他车辆部件,或冒着车辆遵守排放,安全或安全标准。所以,安全访问还是很重要的。安全访问原理如下图:Tester: send key : 27 + yy + key , 其中yy = xx + 1实例如下:Tester: 02 27 05 00 00 00 00 00 安全访问,05子功能。
2023-10-26 21:53:14 128
原创 [UDS] --- DiagnosticSessionControl 0x10 service
10包含3个子功能,01 Default默认会话,02 Programming编程会话,03 Extended扩展会话,ECU上电时,进入的是默认会话(Default)。为什么设计三个会话模式呢?因为权限问题。默认会话权限最小,可操作的服务少;扩展模式通常用于解锁高权限诊断服务,例如写入数据/参数、读写诊断码;编程模式用于解锁bootloader相关的诊断服务,即程序烧录。这里来一张权限表格。带颜色的区域代表需要解锁操作。
2023-10-26 21:26:51 194
原创 [UDS] --- UDS概述
UDS(Unified Diagnostic Services,统一的诊断服务)诊断协议是在汽车电子ECU环境下的一种诊断通信协议,在ISO 14229中规定。它是从ISO 14230-3(KWP2000)和ISO 15765-3协议衍生出来的。“统一”这个词意味着它是一个“国际化的”而非”公司特定的”标准。到目前为止,这种通信协议被用在几乎所有由OEM一级供应商所制造的新ECU上面。
2023-10-26 20:44:27 196
原创 [UDS] --- UDS服务应该支持的NRC
最后,下表中列出了ISO14229-1:2013(E)中定义的否定响应码及其使用条件。供大家参考。编码描述助记词0x00此编码用于服务器内部实现否定响应码的逻辑时使用,用于表示没有NRC,不给出否定响应。此编码不会在否定响应中给出。ISO预留。用于以后扩展。0x10表示请求的诊断服务被服务器(ECU)拒绝,但在本表中所有已定义的编码都不适用,这时回复此编码。0x11服务器不支持请求的诊断服务。
2023-10-20 19:28:19 677
转载 [UDS] --- 统一诊断服务概述
UDS(Unified Diagnostic Services,统一诊断服务)诊断协议是用于汽车行业诊断通信的需求规范,由ISO-14229系列标准定义。应用于OSI七层模型的应用层(第7层),它只规定了与诊断相关的服务需求,并未涉及通信机制,所以,它可以在不同的汽车总线(例如CAN, LIN, Flexray, Ethernet 和 K-line)上实现。ISO 14229-1 定义了诊断服务,只有应用层,不涉及网络及实现。ISO 14229-3定义了UDS在CAN总线上的实现。
2023-10-20 18:57:28 127
原创 [Android 四大组件] --- BroadcastReceiver
BroadcastReceiver(广播接收器)即广播,是一个全局的监听器。Android 广播分为两个角色:广播发送者、广播接受者。
2023-08-29 16:17:54 706
原创 [Android 四大组件] --- Service
Service是Android系统中的四大组件之一,它是一种长生命周期的,没有可视化界面,运行于后台的一种服务程序。
2023-08-29 16:17:31 593
原创 [Android 四大组件] --- Activity
Activity是一个Android的应用组件,它提供屏幕进行交互。每个Activity都会获得一个用于绘制其用户界面的窗口,窗口可以充满哦屏幕也可以小于屏幕并浮动在其他窗口之上。一个应用通常是由多个彼此松散联系的Activity组成,一般会指定应用中的某个Activity为主活动,也就是说首次启动应用时给用户呈现的Activity。。
2023-08-29 16:17:10 424
原创 [Android AIDL] --- AIDL工程搭建
AIDL(Android Interface Definition Language)是一种 IDL 语言,用于生成可以在 Android 设备上两个进程之间进行进程间通信(IPC)的代码。通过 AIDL,可以在一个进程中获取另一个进程的数据和调用其暴露出来的方法,从而满足进程间通信的需求。通常,暴露方法给其他应用进行调用的应用称为服务端,调用其他应用的方法的应用称为客户端,客户端通过绑定服务端的 Service 来进行交互。
2023-08-29 16:16:48 762
原创 [Android AIDL] --- AIDL原理简析
上一篇文章已经讲述了如何在Android studio中搭建基于aidl的cs模型框架,只是用起来了,这次对aidl及cs端如何调用的原理进行简单分析。
2023-08-29 16:16:14 575
原创 [Android JNI] --- 静态注册和动态注册实现java和native相互调用
C/C++中访问Java方法C/C++中访问Java父类的方法C/C++中访问/修改Java变量Java中访问C/C++方法Java中访问/修改C/C++变量给出实现代码如下:// StaticReg.javaStaticReg.cpp2 动态注册的方式实现c/c++调用java的方法/变量C/C++中访问Java方法C/C++中访问Java父类的方法C/C++中访问/修改Java变量Java中访问C/C++方法Java中访问/修改C/C++变量// DynamicReg.java//
2023-07-06 18:47:00 401
原创 [Android JNI] --- JNI基础
JNI 全称 Java Native Interface,Java 本地化接口,可以通过 JNI 调用系统提供的 API。操作系统,无论是 Linux,Windows 还是 Mac OS,或者一些汇编语言写的底层硬件驱动都是 C/C++ 写的。
2023-07-06 18:40:17 190
原创 [Android JNI] --- Java和Android简介
概念明晰项目下面有两个分类:一个是app(代表app模块);另一个是Gradle Scripts。其中,app下面又有3个子目录,其功能说明如下:(1)manifests子目录,下面只有一个XML文件,即AndroidManifest.xml,它是App的运行配置文件。(2)java子目录,下面有3个com.example.myapp包,其中第一个包存放当前模块的Java源代码,后面两个包存放测试用的Java代码。(3)res子目录,存放当前模块的资源文件。
2023-07-06 18:39:46 390
原创 [Android JNI] --- JNIEnv和JavaVM
JavaVM申明在jni.h文件里面,因为我们在JNI开发中,必定要引入#include 头文件。//C语言定义 # endif /*defined//C语言定义 # endif /*//C语言定义 # endif /*# endif /*defined# endif /*# endif /*defined。
2023-07-06 18:38:18 528
原创 git --- git merge用法
在Git中,合并是一个连接分叉历史的过程。它将两个或多个开发历史连接在一起。git merge命令可以帮助你把git分支创建的数据整合到一个分支中。git merge会将一系列的提交关联到一个统一的历史。在上图中,有两个分支 master 和 feature。我们可以看到,我们在功能和主干分支都做了一些提交,并将它们合并。它就像一个指针。它将在各分支之间找到一个共同的基础提交。一旦 Git 找到一个共同的基础提交,它就会创建一个新的 “合并提交”。它结合了每个排队的合并提交序列的变化。
2023-06-01 21:06:43 7575
JNI实现java cpp相互调用
2023-07-06
Linux网络编程-网络基础-socket编程-高并发服务器.pdf
2021-09-05
PCB封装库---经过很多次画板检验
2018-09-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人