我尝试使用NvM_Write();写入内存,UDS有一个积极的响应。
当我试图读取相同的块时,没有响应,软件会使用NvM_PENDING state进入det。我重置并尝试读取相同的内存块,该块中没有数据(它只是0x00)。
NvM_Write通向Fee_Write,但是Fls_Write从来没有被调用过。这是配置问题吗?
调试后发现Fls_Write从未被调用过。Nvm、Fee和fls每5ms调用一次。当我请求NvM_Write时,请求将放在一个队列中,以便在将来服务。
发布于 2019-04-10 07:20:19
在你的设置中似乎是个问题。我想知道,如果你有一个任务,这叫做NvM_Mainfunction(),Fee_Mainfunction()和Fls_Mainfunction()。NvM通过队列处理像NvM_ReadBlock()和NvM_WriteBlock()这样的请求,这是由任务级的主函数处理的。
对于UDS服务,请求返回一个肯定的响应,这很可能是因为您使用了NvM_WriteBlock()的返回值,如果写入请求被NvM接受并放入NvM队列中,它将是E_OK。如果请求未被接受,则返回E_NOT_OK。
实际上,诊断服务实现应该等待NvM_GetErrorStatus(BlockID)返回值从NVM_REQ_PENDING更改为返回NVM_REQ_OK或其他类似NVM_REQ_NOT_OK的内容。
我猜想,您的实现是手工实现的,因为有了适当的配置,Dcm具有需求SWS_Dcm_00541中描述的标准行为,正如我前面所解释的那样。
https://stackoverflow.com/questions/55593889
复制相似问题