传送门 ==>> AutoSAR实战系列300讲「糖果Autosar」总目录
关于ReadDataByIdentifier ($22)协议部分的解释请参考我的文章【UDS02-根据标识符读取数据服务【ServiceID = 0x22】】
1 ReadDataByIdentifier ($22)的功能
该服务提供对 ECU 内数据结构的读取访问,这个内部的数据结构由标识符 (DID) 标记。测试人员可以使用诊断仪【比如Canoe工具】在一个请求中同时访问多个 DID。
如果启用 SilentBSW并且禁用分页读取,当读取具有可变长度的 DID 时,DCM 会验证所配置的 DID的读取字节的最大长度不超过DCM的内部缓冲区。因此,只有在读取了可变长度 DID 之前的所有 DID 后,缓冲区中的剩余空间至少大于或等于可变长度 DID 的最大长度,才能读取可变长度 DID。
那么怎么获取获取 DID 长度呢?在接收到 UDS 服务 ReadDataByIdentifier (0x22) 时,对于每个请求的 DID,DCM 模块应检查 DID 是否具有固定数据长度(请参阅配置参数DcmDspDidFixedLength):如果没有(参数设置为 False),DCM 模块应调用配置函数(参见配置参数DcmDs