1. 前言
BswM – Basis software manager,基础软件管理; DEM – Diagnostic Event Manager,诊断事件管理器; DET – Default Error Tracer,默认错误跟踪器; SD – Service Discovery,服务发现; Sd – Service Discovery Module in AUTOSAR,AUTOSAR 服务发现模块; SoAd – Socket Adaptor,套接字适配器; SOME/IP – Scalable service-Oriented MiddlwarE over IP,基于IP的可扩展的面向服务中间件; SOME/IP-SD – SOME/IP Service Discovery,SOME/IP服务发现;
Eventgroup:
- 一个由一个或多个事件组成的逻辑分组服务,属于服务的一部分;
Endpoint Option:
Multicast Option:
Unicast event:
- 由ServerService的ECU传输到多播端点的事件;
Multicast event:
- 由ServerService的ECU传输到单播端点的事件;
Eventhandler multicast endpoint:
- 描述组播地址和端口信息。该信息是为每个 Eventhandler(事件处理程序) 的 SdServerService(服务端服务发现模块) 预先配置的;若订阅的客户端数量达到最大值,服务器将会把事件信息发送到预先配置的多播地址;Eventhandler多播端点是通过SubscribeEventgroupAck Entry引用的Multicast option发布的;
Consumed Eventgroup unicast endpoint:
- 描述单播地址和端口信息。该信息是为每个Consumed EventGroup的SdClientService预先配置的;使用此单播地址和端口订阅的SdClientService表示要访问的SdServer端点,则应发送响应事件;已使用的Eventgroup单播端点通过SubscribeEventgroup或StopSubscribeEventgroup条目引用的Endpoint option发布;
Consumed Eventgroup multicast endpoint:
- 描述多播地址和端口信息。该元组是为每个Consumed EventGroup的SdClientService预先配置的。使用此多播地址和端口订阅的SdClientService指示应将相应事件发送到哪个端点的SdServer。已使用的Eventgroup多播终结点通过SubscribeEventgroup或StopSubscribeEventgroup引用的Endpoint option发布;
Eventhandler multicast connection:
- 描述SdServerService通过配置的Eventhandler多播端点提供多播事件时已建立套接字连接;
Consumed Eventgroup unicast connection :
- 建立套接字连接后,SdClientService通过已使用的Eventgroup单播端点接收事件;
Consumed Eventgroup multicast connection:
- 建立套接字连接后,SdClientService通过已使用的Eventgroup多播端点接收事件;
2. 简介
Sd模块提供了检测和提供可用服务的功能。如IP多播和SOME/IP-SD消息; Sd模块位于BswM模块和SoAd模块之间,如下图所示:
3. 相关规范
AUTOSAR 提供了一个基本软件模块的通用规范[2,SWS BSW General] ,该规范也适用于服务发现。
4. 模块间的依赖
4.1 AUTOSAR BSW Scheduler
BSW 调度器调用 SD 模块的主要功能,这对 SD的循环进程是必需的。
4.2 AUTOSAR BSW Mode Manager
BswM 模块提供了通用模式请求和服务请求之间的链接。
4.3 AUTOSAR Socked Adaptor
套接字适配器在以太网栈和SD模块之间传递服务请求; SD应可以激活和关闭PUD Router与TCP/IP套接字之间的连接,并可以触发事件初始信息传输; SoAds的套接字连接表需要预先进行配置,即用于接收其他ECUs SD模块发送的单播和多播信息。因为ECU可能连接多个(虚拟)网络,存在多个SD实例,这些SD实例可能有多个 Socket 连接表条目。每个(虚拟)接口的 Unicast Rx、 Multicast Rx 和Tx PduIDs 的三元组需要在SoAds 中配置,并且要被SD模块知道; 此外,SD 模块从接收的 SD 消息中获取SD 模块更新套接字连接(SoAd Socket Connection)中的端点信息(IP 地址和端口号) ; 出于对代码健壮性的考虑,只使用UDP套接字传输SD消息,并且应该打开soadsocketudpstrictheaderlencheckenabledoption 选项。
4.4 AUTOSAR Default Error Tracer(追踪器)
即默认的错误处理函数。
4.5 AUTOSAR Diagnostic Event Manager
为了更好的报告错误信息,SD模块将访问Diagnostic Event Manager。是为了将错误码对上错误信息?
4.6 文件结构
4.6.1 代码文件结构
- [SWS_Sd_00001] 代码文件结构不应在本规范中完全定义。但代码文件结构应该包括以下文件命名:
- Sd _ lcfg.c - 链路时间可配置参数;
- Sd_PBcfg.c - 用于构建后时间可配置参数;
这些文件应该包含连接事件和构建事件的可配置参数。
4.6.2 头文件结构
- [SWS_Sd_00003] 模块中应包括 Dem.h 文件,用于APIs报告错误信息以及所需的 Event IDs 符号;
5. 功能规范
5.1 背景和依据
- Service Discovery 模块主要是管理车载通信中的服务实例和控制事件消息的发送,可以将事件消息只发送给订阅者;
- ECUs通过SD 实现创造、查找、关闭服务实例;
- Service Discovery 模块可以管理服务实例状态、Event消息的发送,同时也可以订阅/发布这个Events组成的Eventgroups,并控制Eventgroups事件信息的发送与接收;
一个本地ECU需要处理两种不同的服务:
- 服务端服务 - 本地 ECU 向车辆的其他部分提供服务器服务实例(即位于本地) ,并且可以被视为此服务实例的服务器;
- 客户端服务 - 本地 ECU 可以使用车辆内另一个 ECU 提供的服务器服务实例,并且可以被认为是这个服务实例的客户端;
对服务端服务来说,本地ECUs的 Service Discovery 模块必须可以满足如下条件:
- 提供本地服务,即ECU的服务要为可用状态;
- 若服务为不可用时,应停止提供服务,并回应其他ECUs的发现服务请求;
对客户端服务来说,本地ECUs Service Discovery 模块必须可以满足如下条件:
- 依据配置的不同,提供者和查找者侦听取决于存储在易失性存储器中配置信息;
- 侦听停止,也取决于存储在易失性存储器中配置信息;
- 发送发现服务,取决于当前ECUs和ECUs基础软件组件的状态;
Service Discovery 可用于管理发布/订阅关系; Service Discovery 消息中定义了订阅消息,发布则是基于服务实例本身的可用性。基于提供的服务实例,Publish/Subscribe 客户端可以通过 SubscribeEventgroup 条目进行订阅。服务端将订阅客户端指定为某些消息的兴趣方,并在某个事件或超时之前开始将该信息发送到 Publish/Subscribe 客户端; Service Discovery 模块支持多播消息向多个客户端发送事件消息,而不是每个客户端使用单播消息,前提是必须在服务端和客户端预先配置多播端点信息,但服务端和客户端之间存在一定的差异,如下所示:
- 如果 SdServerService 每个 even-handler 都有一个预先配置的多播地址和端口,那么如果已经达到了具有不同端点信息的订阅 sdClientServices 的阈值(SdEventHandler-MulticastThreshold) 后,SdServerService 将切换到这个多播地址和端口(所谓的“ Eventhandler 多播端点”);
- 如果 SdClientService 订阅了多播地址和端口(称为“ Consumed Eventgroup 多播端点”) ,则 SdServerService 在订阅了 Consumed Eventgroup 多播端点(多播地址和端口)后发送其事件;
5.2 要求
5.2.1 基础要求
- [SWS_Sd_00400] dIt 应该可以将 Service Discovery 模块配置为一个可选的 AUTOSAR BSW 模块(参考SystemTemplate for configu-ration.c);
- [SWS_Sd_00004] Service Discovery 应该实现一个主函数,该函数应该根据配置参数循环调用;
- [SWS_Sd_00005] Service Discovery 模块应该存储通过 BswM 调用以下 api 提供的 ServiceModeRe-quest:
如果SdServerService 和 sdclientservice 分别没有引用 SdServiceGroup,则调用Sd_ServerServiceSetState() 和Sd_ClientServiceSetState(); 如果 SdServerService 和 SdClientService 分别引用了 SdServiceGroup,则调用Sd_ServiceGroupStart()和SdServiceGroupStop(); 如果 SdClientService 重新请求专用的SdEventGroupS,则调用Sd_consumedeventgroupsetstate (),(注意: 这个 API 调用允许独立于对 SdClientService 的SdServiceGroup 的引用); Sd_EventHandlerSetState() 目前不存在,因为这个状态是由 Service Discovery 从服务器服务的状态直接推导出来的。 - 基于与 SWCs 的交互,Bswm 模块可以请求以下模式:
Server SWCs通过Sd_ServerServiceSetState() 或者Sd_ServiceGroupStart()和Sd_ServiceGroupStop (): ? SD_SERVER_SERVICE_DOWN ? SD_SERVER_SERVICE_AVAILABLE Client SWCs通过Sd_ClientServiceSetState()或者Sd_ServiceGroupStart()和Sd_ServiceGroupStop(): ? SD_CLIENT_SERVICE_RELEASED ? SD_CLIENT_SERVICE_REQUESTED Client SWCs通过Sd_ConsumedEventGroupSetState(): ? SD_CONSUMED_EVENTGROUP_RELEASED ? SD_CONSUMED_EVENTGROUP_REQUESTED
“SD_SERVER_SERVICE_DOWN” 提供此服务实例的本地 SWC 尚未准备好进行通信; “SD_SERVER_SERVICE_AVAILABLE” 提供这个服务器服务实例的本地 SWC 已经准备好进行通信; “SD_CLIENT_SERVICE_RELEASED” 使用此服务实例的本地 SWC 不需要与此服务实例通信; “SD_CLIENT_SERVICE_REQUESTED” 使用此服务的本地 SWC 已准备好与此服务实例通信,并且需要此服务; “SD_CONSUMED_EVENTGROUP_RELEASED” 使用该 Consumed Eventgroup 的本地 SWC 不需要该 Consumed Eventgroup 的事件; “SD_CONSUMED_EVENTGROUP_REQUESTED” 使用这个 Consumed Eventgroup 的本地 SWC 需要这个 Consumed Eventgroup 的事件;
-
[SWS_Sd_00007] 下列状态分别可以通过BswM_Sd_ClientServiceCurrentState(), BswM_Sd_ConsumedEvent GroupCurrentState(),和BswM_Sd_EventHandlerCurrentState() 向BswM模块报告: “SD_CLIENT_SERVICE_DOWN” 告诉本地 SWC 此服务实例不可用; “SD_CLIENT_SERVICE_AVAILABLE” 告诉本地 SWC 这个 Service Instance 是可用的; “SD_CONSUMED_EVENTGROUP_DOWN” 告诉本地 SWC 这个 conconsumed Eventgroup 当前没有订阅; “SD_CONSUMED_EVENTGROUP_AVAILABLE” 告诉本地 SWC 这个 conconsumed Eventgroup 当前已订阅(即已接收事件) ; “SD_EVENT_HANDLER_RELEASED” 告诉本地 SWC 当前没有客户机订阅此 Eventgroup; “SD_EVENT_HANDLER_REQUESTED” 告诉本地 SWC 至少有一个客户端当前订阅了这个Eventgroup; -
[SWS_Sd_00011] 每个已配置的服务器服务实例都应该有一个 ECU 范围内唯一的 SdServerServiceHandleId; -
[SWS_Sd_00437] 每个配置的客户服务实例都应该有一个 ECU 范围内唯一的SdClientServiceHandleId; -
[SWS_Sd_00438] 每个已配置的消费事件组都应该有一个 ECU 范围内唯一的SdConsumedEventGroupHandleId; -
[SWS_Sd_00439] 每个配置的事件处理程序应该有一个 ECU 范围内唯一的SdEventHandlerHandleId; 注: 为了识别 Sd 和 BswM 之间控制 API 中的服务实例和事件组,需要上述需求定义的 id;对于具有相同服务 ID 和/或相同服务实例 ID 的实例或事件组也是有效的;
5.2.2 以太网通信
- [SWS_Sd_00013] 服务发现配置实例(参见配置容器 SdInstance)至少应该有一个 TxPdu ID,一个 RxPdu ID 用于单播,一个 RxPdu ID 用于多播;
- [SWS_Sd_00017] 对于不同的链接,应该配置单独的 Service Discovery 实例容器;
注:这方面的链接还包括使用 Ethernet vlan 的不同虚拟链接; - [SWS_Sd_00697] 一个 SD实例 只支持一个地址族(即 ipv4 或 IPv6)。这个地址族应该通过SdInstanceTxPdu、 SdInstanceUnicastRxPdu 和 SdInstanceMulticastRxPdu (本地地址)的 SoAd 来配置;
- [SWS_Sd_00723] 在 SD 模块初始化期间,对于与 SdInstanceTxPdu、 SdInstanceUnicastRxPdu 和 SdInstanceMulticastRxPdu ()相关联的所有 Socket 连接,应调用 API SoAd_opensocon();
注: 在初始化 SD 模块之前,SoAd 模块需要被初始化; 实现者必须通过验证 Service Discovery 和 Socket adapter 的源代码和配置来保证SoAd_setuniqueremoteaddr()、 SoAd_getlo-caladdr()和 SoAd_setremoteaddr()永远不会返回错误。SoAd_SetUniqueRemoteAddr()、 SoAd_getlocaladdr()和SoAd_setremoteaddr()的故障无法从中恢复;
5.2.3 状态处理
- [SWS_Sd_00019] Service Discovery 模块应该分别存储所有静态配置的服务实例和事件组的状态;
- [SWS_Sd_00020] 通过调用 API SD _ init ()初始化 Service Discovery 模块之后,所有配置的服务器服务实例都应该具有状态“ SD_SERVER_Service_down”,除非服务器服务实例将 SdServerService AutoAvailable 设置为 true,否则该状态应该设置为“ SD_SERVER_Service_AVAILABLE”;
注: SdServerServiceAutoAvailable 设置为 true,只允许不引用 SdServiceGroup 的服务器服务使用; - [SWS_Sd_00021] 通过调用 API SD_init ()初始化 Service Discovery 模块之后,所有配置的客户服务实例都应该具有状态“ SD _ CLIENT_Service_released”,除非客户服务实例将 SdClientSer-viceAutoRequired 设置为 true,否则该状态应该设置为“ SD _ CLIENT _ Service _ REQUESTED”;
注: SdClientServiceAutoRequire 设置为 true,仅允许不引用 SdServiceGroup 的客户端服务使用; - [SWS_Sd_00440] 在通过调用 API SD _ init ()初始化 Service Discovery 模块之后,所有配置的事件组都应该具有状态“ "SD_CONSUMED_
EVENTGROUP_ RELEASED” ,除非 Consumed EVENTGROUP 将 “ SdConsumed EventGroupAutoRequired”设置为 true,否则在请求关联的客户端服务实例时,状态应该设置为“ "SD_CONSUMED_ EVENTGROUP_REQUESTED”; - [SWS_Sd_00402] Service Discovery 模块应该存储服务器和客户端服务实例引用的所有 IP 地址分配状态;
- [SWS_Sd_00442] SD_CONSUMED_EVENTGROUP_REQUESTED在其客户服务实例仍在重新租借期间被 SD_CLIENT_SERVICE_RELEASED 调用(SD _ Client _ Service _ released);
- [SWS_Sd_00443] 如果一个 SdClientService 被设置为 SD_CLIENT_SERVICE_RELEASED (通过 Sd_ClientServiceSetState()或Sd_ServiceGroupStop()) ,而它的一个或多个事件组仍然被请求(SD_CONSUMED_EVENTGROUP_REQUESTED) ,则 Service Discovery 将以 SD_CONSUMED_EVENTGROUP_RELEASED 调用这些事件组相同的方式解释这个请求;
5.2.4 与Socket Adaptor的交互
- [SWS_Sd_00024] Service Discovery 模块应该能够使用 SoAd_EnableRouting(), SoAd_Dis-ableRouting(), SoAd_EnableSpecificRouting(), 和SoAd_DisableSpecificRouting()为服务器和客户端服务实例启用/禁用 SoAd 模块中的路由组;
- [SWS_Sd_00699] Service Discovery 模块应该能够使用 API SoAd _ ifspecificroutinggrouptransmission ()触发初始事件的发送;
- [SWS_Sd_00026] Service Discovery 模块应该能够 根据每个 Service Instance/Eventgroup 引用路由组,参考如下配置参数:
? SdClientServiceActivationRef (in SdConsumedMethods) ? SdConsumedEventGroupMulticastActivationRef ? SdConsumedEventGroupTcpActivationRef ? SdConsumedEventGroupUdpActivationRef ? SdServerServiceActivationRef (in SdProvidedMethods) ? SdEventActivationRef (in SdEventHandlerMulticast) ? SdEventActivationRef (in SdEventHandlerTcp) ? SdEventTriggeringRef (in SdEventHandlerTcp) ? SdEventActivationRef (in SdEventHandlerUdp) ? SdEventTriggeringRef (in SdEventHandlerUdp) - [SWS_Sd_00700] 服务发现模块应该能够引用每个服务实例/事件组的 Socket 连接和 Socket 连接组,参见以下配置参数:
? SdClientServiceTcpRef (Service Instance and Eventgroups) ? SdClientServiceUdpRef (Service Instance and Eventgroups) ? SdConsumedEventGroupMulticastGroupRef (Eventgroup) ? SdServerServiceTcpRef (Service Instance and Eventgroups) ? SdServerServiceUdpRef (Service Instance and Eventgroups) ? SdMulticastEventSoConRef in SdEventHandlerMulticast (Eventgroup) - [SWS_Sd_00029] Service Discovery 模块只有在分配了 IP 地址的情况下才会调用 SoAd_IfTransmit() ,即: Sd_LocalIpAddrAssignmentChg() 已被TCPIP_IPADDR_STATE_ASSIGNED()调用;
- [SWS_Sd_00709] 如果 SoAd_IfTransmit()返回E_NOT_OK,则应该被忽略;
- [SWS_Sd_00481] 每个通配符套接字连接应该使用SoAd_ReleaseRemoteAddr()接口,如果满足如下条件:
? 套接字连接的远程地址已由 SD 设置; ? 客户端服务不再使用套接字连接。即,没有收到提供服务、收到停止提供服务或 TTL 已经过期; ? 套接字连接不再由 Eventhandler 使用。即,客户端已经取消了使用这个套接字连接的所有 Eventgroups。如果路由被禁用,套接字连接不应该被重置,因为 SdEventHan-dlerMulticastThreshold 已经到达; 注: 这个要求不适用于用于服务发现的套接字连接
5.2.5 Subscribe Eventgroup 重试机制
- Subscribe Eventgroup 重试机制是 ClientServices 的一个可选特性。如果 SOME/IPSD 消息丢失(例如 SubscribeEventGroupAck) ,并且周期提供之间的间隔过大,则可以使用这种方法加快恢复速度; 如果在两个周期提供之间的某个位置请求 Eventgroup,则可以使用这种方法加快订阅速度。Subscribe Eventgroup 重试机制的计时行为可以按照 ClientService 配置,并且必须匹配相应服务器服务的计时行为(参见 TPS SysT constr _ 5095)。对于其 TLL (SdServerTimerTTL)设置为 0xffffff 且其主阶段循环提供之间的间隔 (SdServerTimerOfferCyclicDelay) 设置为0的服务器服务 ,可以将Subscribe Eventgroup 重试设置为 0xff (参见 TPS SysT constr _ 5096)。这将意味着在 EventGroup 设置为 SD _ consumed _ EventGroup _ requested 且未接收SubscribeEventGroup Ack 时重试对 EventGroup 的订阅。
- [SWS_Sd_00735] 订阅 Eventgroup 重试处理只能针对服务器服务的Eventgroups 进行处理,其中
? SdSubscribeEventgroupRetryMax大于0; ? SdSubscribeEventgroupRetryEnable等于TRUE; - [SWS_Sd_00736] 如果SdSubscribeEventgroupRetryEnable 设置为 TRUE,SdSubscribeEventgroupRetryMax 设置为大于 0 的值,每次 Consumed Eventgroup 转移到 SD_CONSUMED_EVENTGROUP_REQUESTED 状态时,应执行以下操作:
? 如果计时器尚未运行,对应的客户服务订阅重试延迟计时器应该启动并设置为SdSubscribeEventgroupRetryDelay; ? Eventgroup 订阅重试计数器的值初始化为 1; - [SWS_Sd_00737] 如果客户端服务订阅重试延迟计时器已经过期,并且已配置的Eventgroup 的订阅重试次数(SdSubscribeEventgroupRetryMax)没有超过,则通过发送 StopSubscribeEventgroup/SubscribeEventgroup 的组合来重新触发 Eventgroup 的订阅,并且重试计数器应该递增。如果订阅的重试次数(SdSubscribe EventgroupRetryMax)超过,ServiceDiscovery 模块将引发运行时错误“ SD_E_COUNT_OF_RETRY_SUBSCRIPTION_EXCEEDED”;
- [SWS_Sd_00738] 对请求的 Eventgroup 的订阅的重试应在以下条件下停止:
? 如果收到请求的 Eventgroup 的 SubscribeEventGroupAck 或 SubscribeEventGroupNack; ? 如果重试次数超过请求的 Eventgroup 的 SdEventgroupSubscribeRetryMax; ? 如果请求的 Eventgroup 被设置为SD_CONSUMED_EVENTGROUP_RELEASED; - [SWS_Sd_00739] 如果SdSubscribeEventgroupRetryEnable 设置为 TRUE,Sub-scribeEventgroupRetryMax 设置为 0xff,只要满足以下所有条件,订阅的重试将继续:
? 相应的 Eventgroup 被设置为 “SD_CONSUMED_EVENTGROUP_REQUESTED”; ? 没有接收到 subscribeeventgrouppack 或 SubscribeEventGroupAck; - [SWS_Sd_00740] 如果根据 SWS _ SD _ 00738 对客户服务的所有事件组完成了重试,则客户服务订阅重试延迟计时器应该是可以取消的;
? 当客户端在接收到下一个 offer 服务之前没有接收到初始事件时,它应该停止请求事件组,即触发 StopSubscribeEventgroup,并在接收到下一个 offer 服务时恢复请求事件组,即触发 SubscribeEventgroup; ? 此过程可以在应用程序级别上触发,并在丢失 Sub-scribeEventgroupAck 之后在功能上对应于 StopSubscribeEventgroup/SubscribeEventgroup 组合。这可能意味着通知SD-Module 接收每个字段的初始事件,或者其他适当的方法; ? 如果应用程序无法实现前面段落中描述的过程,则应将重试机制外包给 BswM,该规则通过在检测到已建立安全关联时触发StopSubscribeEventgroup/-SubscribeEventgroup SD 消息启动初始事件的重新发送,以至少提高基于安全关联的通信的健壮性; ? 由于安全关联的设置是异步的,因此BswM规则(BswMmoderequestsource/BswMTimer)应该延迟发送StopSubscribeEventgroup/SubscribeEventgroup的适当时间,允许两个对等点完成安全关联的设置; ? 如果 Subscribe Eventgroup Ack 条目在发送下一个 Subscribe 事件组条目之前没有到达(参见 PRS _ someipsd _ 00463) ,或者如果客户端在接收下一个 offer 服务之前没有收到初始事件,那么如果当前连接正在设置或已经设置,则不应重新建立安全关联连接; ? 对于使用安全关联传输的事件,客户端必须确保安全关联已经建立,并且在发送SubscribeEventgroup 条目之前已经准备好接收消息(参见[ SWS _ sd _ 00761])。另一方面,服务器必须确保安全关联已经建立,并且能够在发送 SubscribeEventgroupAck 条目之前发送消息; - [SWS_Sd_00759] 如果收到一个 SubscribeEventgroup 条目,该条目需要安全关联,若该安全关联尚未建立,则应使用 SubscribeEventgroupNack 条目回答该条目;
5.3 消息格式
SD消息格式如下所示:
- [SWS_Sd_00037] 如果没有另外定义,则SD消息中的所有字段都应该按照网络字节顺序(即 Big Endian 字节顺序);
5.3.1 Request ID
- Request ID由Client ID和Session ID组成。虽然Client ID不用于 Service Discovery,但Session ID用于检测车辆中其他 Service Discovery
实例的重启或重新启动,以修复 Service Discovery 模块的本地状态; - [SWS_Sd_00034] Service Discovery 模块初始化后,本地 ECU 发送的消息的Session ID 应为 0x0001;
注: 这意味着发出的第一个 SD 消息的 Session ID 设置为0x0001。Service Discovery 模块必须处理每个通信伙伴的 Session ID。因此,发送到多播端点的第一个 SD 消息以及发送到任何单播端点的第一个 SD 消息的 Session ID 都应该设置为 0x0001;
5.3.2 Protocol Version
描述 SOME/IP 的当前版本。
5.3.3 Interface Version
于描述 SOME/IP 服务的当前版本,SOME/IP-SD本身的版本。
5.3.4 Message Type
用于区分 SOME/IP 消息的类型。 SOME/IP-SD 只使用事件消息, 因此,它总是使用相同的类型。
5.3.5 Return Code
码用于表示请求是否已成功处理。 这不适用于 SOME/IP-SD; 因此,返回代码将静态设置为 0x00。
留言
后面,没必要看了,因为这是AUTOSAR实现的代码规范,据说普通厂商是拿不到代码的。。。goodbye
|