当前位置: 首页 > news >正文

AUTOSAR实战教程--标准协议栈实现DoIP转DoCAN的方法

目录

软件架构

关键知识点

第一:PDUR的缓存作用

第二:CANTP的组包拆包功能

第三:流控帧的意义

配置过程

步骤0:ECUC模块中PDU创建

步骤1:SoAD模块维持不变

步骤2:DoIP模块为Gateway功能添加Connection

​步骤3:DoIP模块为Gateway新增LA/TA/SA

​步骤4:PDUR模块为Gateway功能创建路由

步骤5:PDUR模块为数据缓存创建Buffer

步骤6:CanTp配置

步骤7:CanIf中新增Pdu配置

全文总结

软件架构

设计方案如下图:

整个数据流传递非常简单明了,这整个网络结构看下来,其实重点和难点在诊断,而不在DoIP。好好理解这张图,任何一个函数的错误调用都会影响到整体功能的实现。诊断数据流的传递如下:

为了实现这个效果,有以下三点需要重点处理的地方。

关键知识点

第一:PDUR的缓存作用

CANTP本身没有缓冲区,所以面对DoIP大量的数据传来,必须有个地方去缓存这么大的数据,否者CANTP的组包无从谈起。根据上图,CANTP的上层是PDUR,所以只能在PDUR里面做缓冲池。具体方法后文介绍。

第二:CANTP的组包拆包功能

首先是PDUR调用CANTP的函数CanTp_Transmit( )告诉CANTP当前我这边有数据来了,数据长度有多长。然后CANTP不紧不慢的按自己的吞吐量,调用PduR_CanTpCopyTxData( )去PDUR的缓冲区取数据,一次又一次,直到该缓冲区为空。

因此,为了保证数据一致性,上层应该锁定该内存区域,直到出现指示。

当发送缓冲区被锁定时,上层不能在缓冲区内写入数据。当接收缓冲区被锁定时,CAN - T传输层不能保证缓冲区的数据一致性。上层既不能读也不能写缓冲区中的数据。

在咱们DoIP转CAN这个数据流测试下来,CANTP之于诊断就像人的脊髓之于整个人的作用(脊髓能够不经大脑产生膝跳反射),大脑肯定是DCM和DEM,但CANTP也负责一些简单的诊断协议栈标准的实现,比如UDS中甚为繁琐的种种时间参数就是CanTP实现的。还有流控帧的封装发送/接收判断也是CanTP实现的(也就是CANTP之上的模块如DCM根本不会接到流控帧的任何信息)。

流控帧用于调整发送方以适应接收方的能力,

相关文章:

  • 第三讲 Linux进程概念
  • java_dependencies_父子模块引入依赖关系
  • CompletableFuture+线程池使用案列
  • @Import原理与实战
  • 自定义protoc-gen-go生成Go结构体,统一字段命名与JSON标签风格
  • Go语言系统监控实战:gopsutil库全面解析与应用
  • 75Qt窗口_Qt窗口概览
  • Redis集群模式之主从复制模式(2)
  • 轻量级的Windows系统优化与个性化解决方案
  • 汽车车载软件平台化项目规模颗粒度选择的一些探讨
  • JS Day05
  • 幂等性的七大解决方案
  • 如何利用 audit2allow 工具调试SELinux日志
  • Spring类型转换器相关接口和实现原理
  • LLMs 系列科普文(8)
  • 免费批量PDF转Word工具
  • MyBatis原理剖析(一)
  • Vue ⑤-自定义指令 || 插槽
  • SCADA|RESTful学习,Apipost通过GET获取KingSCADA实时数据
  • LeetCode - 53. 最大子数组和
  • 潍坊市网站建设/b站黄页推广
  • 安徽省建设项目 备案网站/揭阳新站seo方案
  • led动态视频网站建设/网站接广告
  • 大连网站的公司/成都最新热门事件
  • 企业手机网站建设市场分析/竞价推广账户竞价托管收费
  • 怎么做公司的中英文网站/广州百度seo 网站推广