Non-compliance with AUTOSAR specification

API-функция RTE используется с аргументами, которые нарушают стандартную спецификацию AUTOSAR

Описание

Этот дефект происходит, когда вы используете API-функцию RTE с аргументами, которые нарушают стандартные технические требования AUTOSAR.

Например, проверяет Rte_Write_* или Rte_Byps_Write_* вызовы функции определяют если аргумент указателя на данные в вызове:

  • Оцененный NULL.

  • Точки к буферу памяти.

  • Точки к инициализированному буферу памяти.

  • Для буферов с перечислимыми значениями значения в перечислимой области значений.

Для получения дополнительной информации о спецификациях API RTE см. документацию AUTOSAR.

Чтобы включить эту проверку, используйте значение autosar для опции Libraries used (-library).

Более исчерпывающая версия того же средства проверки доступна с Программой автоматического доказательства Кода. При проверке на стандартные нарушения AUTOSAR на Rte_ вызов функции, средство проверки Программы автоматического доказательства Кода рассматривает все пути к выполнению, которые приводят к вызову функции (удовлетворяющий предположениям верификации).

Риск

Использование функции RTE может привести к ошибкам времени выполнения.

Фиксация

Фиксация зависит от первопричины дефекта. Чтобы диагностировать эту проверку, считайте сообщение на панели Result Details. Сообщение показывает все проверки, выполненные на API-функции RTE, наряду с информацией о том, передала ли проверка. Например, это сообщение:

Показывает результаты трех проверок, все три из которых могут перестать работать. Первый аргумент функциональной силы быть нулевым указателем, не может быть выделен и не может указать на инициализированную память.

Исследуйте первопричину проблемы далее.

Примеры

развернуть все

#include <stdlib.h>

// Type declarations that are typically in AUTOSAR header Rte_type.h
typedef unsigned char uint8_T;
typedef unsigned int uint32_T;
typedef uint8_T Std_ReturnType;

typedef struct {
    uint8_T color;
    uint32_T number;
}
colorNumber;

extern Std_ReturnType Rte_Byps_Write_out_colorNumber_1(colorNumber*);

void SendData() {
    colorNumber aColor;
    uint8_T copyColor;
    uint32_T copyNumber;
    
    colorNumber* aPtrColor = &aColor;
    Rte_Byps_Write_out_colorNumber_1(aPtrColor);          
    
    copyColor = aColor.color;
    copyNumber = aColor.number;
}

В этом примере, функциональном Rte_Byps_Write_out_colorNumber_1 берет указатель на неинициализированную переменную. Средство проверки отмечает вызов функции, потому что указатель не указывает на инициализированную память.

#include <stdlib.h>

// Type declarations that are typically in AUTOSAR header Rte_type.h
typedef unsigned char uint8_T;
typedef unsigned int uint32_T;
typedef uint8_T Std_ReturnType;

typedef struct {
    uint8_T color;
    uint32_T number;
}
colorNumber;
extern Std_ReturnType Rte_Byps_Write_out_colorNumber_2(colorNumber*);

void SendData() {
    colorNumber* arrayColorNumber = (colorNumber*) malloc(2*sizeof(colorNumber));
    uint8_T copyColor;
    uint32_T copyNumber;
    
    Rte_Byps_Write_out_colorNumber_2(arrayColorNumber);   
    
    copyColor = arrayColorNumber[0].color;   
    copyNumber = arrayColorNumber[0].number;      
}

В этом примере, функциональном Rte_Byps_Write_out_colorNumber_2 берет указатель, возвращенный в выделение памяти с malloc. Средство проверки отмечает вызов функции, потому что указатель не указывает на инициализированную память.

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

Группа: Программирование
Язык: C | C++
Значение по умолчанию: Off
Синтаксис командной строки: autosar_lib_non_compliance
Удар: высоко
Введенный в R2021a