Возвращаемое значение или выходные аргументы нарушают спецификации AUTOSAR
Эта проверка выполняет функции, реализующие AUTOSAR runnables. Проверка определяет, могут ли выходные аргументы и возвращаемое значение от выполнимого нарушить спецификации AUTOSAR во времени выполнения.
Используя информацию о панели Result Details, определите, нарушают ли возвращаемое значение или аргумент ограничения данных в спецификациях XML AUTOSAR или могут быть с пустым знаком. Ищите! значок, который указывает на определенную ошибку или? значок, который указывает на возможную ошибку.
Для каждого выходного аргумента и возвращаемого значения, проверка ищет эти нарушения:
Ограничительные нарушения данных:
Предположим, в этой реализации выполнимого foo
возвращаемое значение, которое представляет ошибку приложения, имеет тип данных перечисления с конечным множеством значений. Анализ проверяет, может ли возвращаемое значение получить значение вне того набора во время выполнения.
iOperations_ApplicationError foo( Rte_Instance const self, app_Array_2_n320to320ConstRef aInput, app_Array_2_n320to320Ref aOutput, app_Enum001Ref aOut2) { ... }
В целом анализ проверяет, остается ли каждый выходной аргумент выполнимого и возвращаемого значения в ограниченной области значений, позволенной их типами данных AUTOSAR. Вы предельные значения типов данных AUTOSAR путем обращения к ограничениям данных в файлах ARXML.
NULL или освобожденные указатели:
Предположим в этой реализации выполнимого foo
, первый выходной аргумент, aOutput
является указателем. Анализ проверяет, является ли указатель непустым и выделенным для всех возможных путей к выполнению по возврату из выполнимого.
iOperations_ApplicationError foo( Rte_Instance const self, app_Array_2_n320to320ConstRef aInput, app_Array_2_n320to320Ref aOutput, app_Enum001Ref aOut2) { ... }
В целом анализ проверяет, является ли указатель выходные аргументы от выполнимого непустым и выделенным по возврату из выполнимого.
По умолчанию анализ принимает, что аргументы указателя к runnables и указателям, возвращенным в функции Rte_
, не являются ПУСТЫМИ. Чтобы изменить это предположение, не задайте макро-RTE_PTR2USERCODE_SAFE
с помощью опции -U
команды polyspace-autosar
.
Смотрите запущенный Polyspace на коде AUTOSAR с консервативными предположениями.
Проверка сначала рассматривает возврат из выполнимого и затем выходных аргументов. Если возврат из выполнимого указывает на ошибку, проверка не смотрит на выходные аргументы на путях к выполнению с ошибкой.
Например, в этом примере, возвращаемым значением является RTE_E_OK
, только если выходной аргумент aOut2
не является ПУСТЫМ. Проверка не рассматривает другие пути к выполнению (где возвращаемым значением не является RTE_E_OK
). Поэтому это решает, что aOut2
не может быть NULL.
// Runnable implementation iOperations_ApplicationError foo( Rte_Instance const self, app_Array_2_n320to320ConstRef aInput, app_Array_2_n320to320Ref aOutput, app_Enum001Ref aOut2) { iOperations_ApplicationError rc = E_NOT_OK; if (aOut2!=NULL_PTR) { // set invalid value will trigger STD_LIB RED in prove-runnable wrapper *aOut2 = 4; rc = RTE_E_OK; } return rc; }
Причина этого поведения следующая: Если возврат из выполнимого указывает на ошибочное состояние на определенном пути к выполнению, можно оценить ошибочное состояние и принять меры по ликвидации последствий. Проверки на этапе выполнения не требуются для тех путей. В определенных ситуациях вы можете использовать один или несколько выходных аргументов, чтобы предоставить дополнительную информацию об ошибочном состоянии. Вы можете хотеть проверять, если те, которые выходным аргументом может быть NULL, когда выполнимое завершает выполнение. Если у вас есть это требование, свяжитесь с Технической поддержкой.
Проверка не отмечает эти ситуации:
Выходные аргументы не записаны вообще в теле выполнимого (или не записаны вдоль определенных путей к выполнению).
Возвращаемое значение не инициализируется в теле выполнимого (или не инициализируется вдоль определенных путей к выполнению).
Анализ проверяет на соответствие с ограничениями данных только, когда возвращаемое значение инициализируется или записанные выходные аргументы.
Группа: Другой |
Язык: C |
Акроним: AUTOSAR_IMPL |