#nvm #autosar
#nvm #автозапуск
Вопрос:
Я пытаюсь записать в память, используя NvM_Write();
положительный ответ от UDS.
Когда я пытаюсь прочитать тот же блок, ответа нет, и программное обеспечение переходит в режим det NvM_PENDING state
. Я сбрасываю, а затем пытаюсь прочитать тот же блок памяти, в этом блоке нет данных (это всего лишь 0x00).
NvM_Write приводит к Fee_Write
, но Fls_Write
никогда не вызывается. Это проблема конфигурации?
Отлажено и обнаружено, что Fls_Write
это никогда не вызывается. Nvm, Fee и fls вызываются один раз каждые 5 мс. Когда я запрашиваю NvM_Write, запрос помещается в очередь для обслуживания в будущем.
Ответ №1:
Похоже, проблема в вашей настройке. Интересно, есть ли у вас задача, которая вызывает 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
на return NVM_REQ_OK
или что-то еще подобное NVM_REQ_NOT_OK
.
Я предполагаю, что ваша реализация была реализована вручную, потому что при правильной конфигурации Dcm имеет стандартное поведение, описанное в требовании SWS_Dcm_00541, как я объяснил выше.
Комментарии:
1. Реализация не была выполнена вручную. Я знаю, что UDS отправляет положительный ответ, поскольку он принял запрос, и это не является гарантией того, что nvm записал данные. Похоже, существует проблема с конфигурацией nvm / fee / fls. Я просто пытаюсь выяснить, какой из них.
2. Когда вы говорите, что он сгенерирован, вы имеете в виду, что служба Dcm WRDBI имеет DcmDspDidUse- для порта установлено значение USE_ATOMIC_NV_DATA_INTERFACE? Потому что это должно обрабатывать запись, включая опрос состояния. Тогда это может быть проблемой, например, при обработке задач основных функций и / или, возможно, проблемой приоритета задачи.