0

我尝试使用UDSNvM_Write();的积极响应写入内存。

当我尝试读取同一个块时,没有响应,软件进入 det 并带有NvM_PENDING state. 我重置然后尝试读取相同的内存块,该块中没有数据(它只是 0x00)。

NvM_Write 导致Fee_Write但从Fls_Write未被调用。这是配置问题吗?

调试后发现Fls_Write从未调用过。Nvm、Fee 和 fls 每 5 毫秒调用一次。当我请求 NvM_Write 时,该请求被放入队列中以供将来处理。

4

1 回答 1

0

似乎是您的设置有问题。我想知道,如果你有一个任务,调用NvM_Mainfunction(),Fee_Mainfunction()Fls_Mainfunction(). NvM 像队列一样处理请求NvM_ReadBlock()NvM_WriteBlock()队列由任务级别的主函数处理。

关于 UDS 服务,请求返回肯定响应很可能是因为您使用了 的返回值NvM_WriteBlock(),这将是E_OK如果写入请求被 NvM 接受并放入 NvM 队列。如果请求未被接受,则返回E_NOT_OK

诊断服务实现实际上应该等待 NvM_GetErrorStatus(BlockID) 返回值从NVM_REQ_PENDING变为 returnNVM_REQ_OK 或类似NVM_REQ_NOT_OK.

我想,您的实现是手动实现的,因为通过适当的配置,Dcm 具有要求 SWS_Dcm_00541 中描述的标准行为,正如我在上面解释的那样。

于 2019-04-10T07:20:19.840 回答