我尝试使用UDSNvM_Write();
的积极响应写入内存。
当我尝试读取同一个块时,没有响应,软件进入 det 并带有NvM_PENDING state
. 我重置然后尝试读取相同的内存块,该块中没有数据(它只是 0x00)。
NvM_Write 导致Fee_Write
但从Fls_Write
未被调用。这是配置问题吗?
调试后发现Fls_Write
从未调用过。Nvm、Fee 和 fls 每 5 毫秒调用一次。当我请求 NvM_Write 时,该请求被放入队列中以供将来处理。
似乎是您的设置有问题。我想知道,如果你有一个任务,调用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 中描述的标准行为,正如我在上面解释的那样。