exponenta event banner

Invalid result of AUTOSAR runnable implementation

Возвращаемое значение или выходные аргументы нарушают спецификации AUTOSAR

Описание

Эта проверка оценивает функции, реализующие runnables AUTOSAR. Проверка определяет, могут ли выходные аргументы и возвращаемое значение от runnable нарушать спецификации AUTOSAR во время выполнения.

Используя информацию на панели Result Details, определите, нарушает ли значение возврата или аргумент ограничения данных в спецификациях XML- авто-РСА или может иметь значение NULL. Ищите! значок, который указывает на определенную ошибку или? значок, указывающий на возможную ошибку.

Для каждого выходного аргумента и возврата значения проверка ищет эти нарушения:

  • Нарушения ограничений данных:

    Предположим, в этой реализации выполняемой fooзначение возврата, которое представляет ошибку приложения, имеет тип данных перечисления с конечным множеством значений. Анализ проверяет, может ли возвращаемое значение получить значение вне этого набора во время выполнения.

    iOperations_ApplicationError foo(
        Rte_Instance const self,
        app_Array_2_n320to320ConstRef aInput,
        app_Array_2_n320to320Ref aOutput,
        app_Enum001Ref aOut2) {
    ...
    }
    Проверка может привести к появлению такого сообщения. Сообщение указывает, что аргумент имеет значение, которое выходит за пределы ограниченной области значений (в этом случае значение 43).

    В целом анализ проверяет, остается ли каждый выходной аргумент runnable и возврата значение в пределах ограниченной области значений, разрешенного их типами данных AUTOSAR. Вы ограничиваете значения типов данных AUTOSAR, ссылаясь на ограничения данных в файлах ARXML.

  • NULL или неотделенные указатели:

    Предположим, в этой реализации выполняемой foo, первый выходной аргумент aOutput - указатель. Анализ проверяет, не является ли указатель NULL и выделен ли для всех возможных путей выполнения после возврата из runnable.

    iOperations_ApplicationError foo(
        Rte_Instance const self,
        app_Array_2_n320to320ConstRef aInput,
        app_Array_2_n320to320Ref aOutput,
        app_Enum001Ref aOut2) {
    ...
    }
    Проверка может привести к появлению такого сообщения.

    В целом анализ проверяет, не являются ли выходные аргументы указателя из runnable non-NULL и распределяются ли они после возврата от runnable.

    По умолчанию анализ предполагает, что указатель аргументов к выполняемым и указателям, возвращенным из Rte_ функции не являются NULL. Чтобы изменить это предположение, не определите макрос RTE_PTR2USERCODE_SAFE использование опции -U от polyspace-autosar команда.

    Смотрите Run Polyspace на коде AUTOSAR с консервативными допущениями.

Проверка сначала рассматривает возврат от выполняемого, а затем выходные аргументы. Если возврат из runnable указывает на ошибку, проверка не просматривает выходные аргументы в путях выполнения с ошибкой.

Для образца в этом примере возврата значение RTE_E_OK только если выходной аргумент aOut2 не имеет значение NULL. Проверка не рассматривает другие пути выполнения (где возврат значение не 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;
}

Причина такого поведения следующая: Если возврат из runnable указывает на состояние ошибки в определенном пути выполнения, можно оценить состояние ошибки и предпринять корректирующие действия. Проверки во время выполнения не требуются для этих путей. В определенных ситуациях вы можете использовать один или несколько выходных аргументов для предоставления дополнительной информации о состоянии ошибки. Можно хотеть проверить, могут ли эти выходные аргументы быть NULL, когда runnable завершает выполнение. Если у вас есть это требование, обратитесь в службу технической поддержки.

Проверка не помечает такие ситуации:

  • Выходные аргументы вообще не записываются в тело runnable (или не записываются в определенных путях выполнения).

  • Значение возврата не инициализируется в теле runnable (или не инициализируется по определенным путям выполнения).

Анализ проверяет соответствие ограничениям данных только тогда, когда возвратом значение инициализируется или выходные аргументы записаны.

Информация о результатах

Группа: Другое
Язык: C
Акроним: AUTOSAR_IMPL
Введенный в R2018a