Consider volatile qualifier on fields (-consider-volatile-qualifier-on-fields)

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

Описание

Эта опция влияет на анализ Программы автоматического доказательства Кода только.

Укажите, что верификация должна учесть volatile спецификатор на полях структуры.

Установите опцию

Пользовательский интерфейс (только десктопные решения): В вашей настройке проекта опция доступна на узле Verification Assumptions.

Командная строка: Используйте опцию -consider-volatile-qualifier-on-fields. Смотрите информацию о командной строке.

Почему использование эта опция

volatile спецификатор на переменной указывает, что значение переменных может измениться между последовательными операциями, даже если вы явным образом не изменяете его в своем коде. Например, если var volatile переменная, последовательные операции res = var; res =var; может привести к двум различным значениям var быть считанным в res.

Используйте эту опцию так, чтобы верификация эмулировала volatile спецификатор для полей структуры. Если вы выбираете эту опцию, программное обеспечение принимает что volatile поле структуры имеет полный спектр значений в любой точке в коде. Область значений определяется только по условию тип поля структуры.

Настройки

On

Верификация рассматривает volatile спецификатор на полях структуры.

В следующем примере верификация полагает что поле val1 может иметь все значения, допускал int введите в любой точке в коде.

struct myStruct {
   volatile int val1;
   int val2;
};

Даже если вы пишете определенное значение в val1 и считайте переменную в следующей операции, переменные результаты чтения в любом возможном значении.

struct myStruct myStructInstance;
myStructInstance.val1 = 1;
assert (myStructInstance.val1 == 1); // Assertion can fail
От (значения по умолчанию)

Верификация игнорирует volatile спецификатор на полях структуры.

В следующем примере верификация игнорирует спецификатор на поле val1.

struct myStruct {
   volatile int val1;
   int val2;
};

Если вы пишете определенное значение в val1 и считайте переменную в следующей операции, переменные результаты чтения в том определенном значении.

struct myStruct myStructInstance;
myStructInstance.val1 = 1;
assert (myStructInstance.val1 == 1); // Assertion passes

Советы

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

  • Если вы включаете эту опцию, количество красных, серых, и зеленых регистраций вашего кода может уменьшиться. Количество оранжевых проверок может увеличиться.

    В следующем примере красная или зеленая проверка превращается в оранжевый, или серая проверка уходит, когда опция используется. Рассмотрение volatile спецификатор изменяет цвет проверки. Эти примеры используют следующее определение структуры:

    struct myStruct {
       volatile int field1;
       int field2;
    };
    
    

    Цвет без опцииЗакончитесь без опцииЗакончитесь с опцией
    Зеленый
    void main(){
       struct myStruct structVal;
       structVal.field1 = 1;
       assert(structVal.field1 == 1);
    }
    void main(){
       struct myStruct structVal;
       structVal.field1 = 1;
       assert(structVal.field1 ==1);
    }
    Красный
    void main(){
       struct myStruct structVal;
       structVal.field1 = 1;
       assert(structVal.field1 != 1);
    }
    void main(){
       struct myStruct structVal;
       structVal.field1 = 1;
       assert(structVal.field1 !=1);
    }
    Серый
    void main(){
       struct myStruct structVal;
       structVal.field1 = 1;
       if (structVal.field1 != 1) 
       {
       /* Perform operation */
       }
    }
    void main(){
       struct myStruct structVal;
       structVal.field1 = 1;
       if (structVal.field1 != 1)
       {
       /* Perform operation */
       }
    }

  • В Коде С++ опция также применяется к членам класса.

Информация о командной строке

Параметр: -consider-volatile-qualifier-on-fields
Значение по умолчанию: Off
Пример (Программа автоматического доказательства Кода): Polyspace Code Prover - источники file_name - рассмотрите энергозависимый спецификатор на полях
Пример (Сервер Программы автоматического доказательства Кода): сервер программы автоматического доказательства полипробела кода - источники file_name - рассмотрите энергозависимый спецификатор на полях
Введенный в R2017b