Логика и битовые операции

hisl_0016: Использование блоков, которые вычисляют операторы отношения

ID: Заголовокhisl_0016: Использование блоков, которые вычисляют операторы отношения
ОписаниеЧтобы поддержать робастность операций, избегайте использования операторов равенства и операторов неравенства на типах данных с плавающей точкой.
ПримечанияИз-за проблем точности с плавающей точкой, не тестируйте выражения с плавающей точкой на равенство (==) или неравенство (~ =!=).
ОбъяснениеУлучшите робастность модели и предотвратите неожиданные результаты.
Проверки Model AdvisorПроверяйте реляционные сравнения на сигналах с плавающей точкой (Simulink Check)
Ссылки
  • IEC 61508-3, Таблица A.3 (2) 'Язык программирования со строгим контролем типов’

    IEC 61508-3, Таблица A.3 (3) 'Языковое подмножество'

    IEC 61508-3, Таблица A.4 (3) 'Безопасное программирование'

  • IEC 62304, 5.5.3 - критерии допустимости Программного блока

  • ISO 26262-6, Таблица 1 (1b) 'Использование языковых подмножеств'

    ISO 26262-6, Таблица 1 (1c) 'Осуществление строгого контроля типов'

  • EN 50128, таблица A.4 (11) 'языковое подмножество'

    EN 50128, таблица A.4 (8) 'язык программирования со строгим контролем типов'

    EN 50128, таблица A.3 (1) 'безопасное программирование'

  • DO-331, Раздел MB.6.3.1.g 'Алгоритмы точен'

    DO-331, Раздел MB.6.3.2.g 'Алгоритмы точен'

  • MISRA C:2012, Dir 1.1

Смотрите такжеРеляционные операции
В последний раз измененныйR2021b
Примеры

Исключая: 1

Пример — правильный

  • myDouble> 0,99 && myDouble <1.01; тестовая область значений %

Пример — неправильный

  • myDouble == 1.0

  • mySingle ~ = 15.0

Исключая: 2

Пример — правильный

Операторы сравнения равенства не используются в операндах с плавающей точкой.

Пример — неправильный

Оператор сравнения равенства == используется в операндах с плавающей точкой.

Пример — правильный

Чтобы протестировать, равны ли две переменные с плавающей точкой или выражения, сравните различие этих двух переменных против порога, который учитывает относительную точность с плавающей точкой (eps) и величина чисел.

Следующий шаблон показывает, как протестировать два входных сигнала с двойной точностью, In1 и In2, для равенства.

Пример — InCorrect

Оператор сравнения равенства == используется в операндах с плавающей точкой

hisl_0017: Использование блоков, которые вычисляют операторы отношения (2)

ID: Заголовокhisl_0017: Использование блоков, которые вычисляют операторы отношения (2)
Описание

Поддерживать однозначное поведение в сгенерированном коде, при использовании блоков, которые вычисляют операторы отношения, включая Relational Operator, Compare To Constant, Compare to Zero и Detect Change

AУстановите параметры блоков Output data type на Boolean.
BДля блоков Relational Operator проверьте, что входные сигналы имеют совпадающий тип данных.
ОбъяснениеA, B Поддержите генерацию кода, который производит однозначное поведение.
Проверки Model AdvisorПроверяйте использование блоков Оператора отношения (Simulink Check)
Ссылки
  • IEC 61508-3, Таблица A.3 (2) 'Язык программирования со строгим контролем типов’
    IEC 61508-3, Таблица A.3 (3) 'Языковое подмножество'
    IEC 61508-3, Таблица A.4 (3) 'Безопасное программирование'

  • IEC 62304, 5.5.3 - критерии допустимости Программного блока

  • ISO 26262-6, Таблица 1 (1b) 'Использование языковых подмножеств'
    ISO 26262-6, Таблица 1 (1c) 'Осуществление строгого контроля типов'

  • EN 50128, таблица A.4 (11) 'языковое подмножество'
    EN 50128, таблица A.4 (8) 'язык программирования со строгим контролем типов'
    EN 50128, таблица A.3 (1) 'безопасное программирование'

  • DO-331, Раздел MB.6.3.2.g 'Алгоритмы точен'

  • MISRA C:2012, правило 10.1

Смотрите такжеhisl_0016: Использование блоков, которые вычисляют операторы отношения
В последний раз измененныйR2018a

hisl_0018: Использование блока Logical Operator

ID: Заголовокhisl_0018: Использование блока Logical Operator
Описание

Поддерживать однозначное поведение сгенерированного кода, при использовании блока Logical Operator,

A

Установите параметры блоков Output data type на Boolean.

B

Гарантируйте, что входные сигналы имеют тип Boolean.

Необходимые условия

hisl_0045: Параметры конфигурации> Математика и Типы данных> логика Реализации сигнализируют как булевы данные (по сравнению с двойным)

ОбъяснениеA, B Избегайте неоднозначного поведения сгенерированного кода.
Проверки Model AdvisorПроверяйте использование блоков Логического оператора (Simulink Check)
Ссылки
  • DO-331, Раздел MB.6.3.2.g 'Алгоритмы точен'

  • IEC 61508-3, Таблица A.3 (2) 'Язык программирования со строгим контролем типов’
    IEC 61508-3, Таблица A.3 (3) 'Языковое подмножество'
    IEC 61508-3, Таблица A.4 (3) 'Безопасное программирование'

  • IEC 62304, 5.5.3 - критерии допустимости Программного блока

  • ISO 26262-6, Таблица 1 (1b) 'Использование языковых подмножеств'
    ISO 26262-6, Таблица 1 (1c) 'Осуществление строгого контроля типов'

  • EN 50128, таблица A.4 (11) 'языковое подмножество'
    EN 50128, таблица A.4 (8) 'язык программирования со строгим контролем типов'
    EN 50128, таблица A.3 (1) 'безопасное программирование'

  • MISRA C:2012, директива 10.1

В последний раз измененныйR2017b

hisl_0019: Использование битовых операций

ID: Заголовокhisl_0019: Использование битовых операций
Описание

Поддерживать однозначное поведение, при использовании битовых операций,

A

Избегайте битовых операций на типах данных целого числа со знаком.

Примечания

Битовые операции не значимы на целых числах со знаком из-за непредсказуемого поведения. Например, операция сдвига может переместить знаковый бит в номер или числовой бит в знаковый бит.

ОбъяснениеAПоддержите однозначное поведение сгенерированного кода.
Проверки Model AdvisorПроверяйте использование блоков битовой операции (Simulink Check)
Ссылки
  • DO-331, Раздел MB.6.3.2.g 'Алгоритмы точен'

  • IEC 61508-3, Таблица A.3 (3) 'Языковое подмножество'
    IEC 61508-3, Таблица A.3 (2) 'Язык программирования со строгим контролем типов’

  • IEC 62304, 5.5.3 - критерии допустимости Программного блока

  • ISO 26262-6, Таблица 1 (1b) 'Использование языковых подмножеств'
    ISO 26262-6, Таблица 1 (1c) 'Осуществление строгого контроля типов'
    ISO 26262-6, Таблица 1 (1d) 'Использование защитных методов реализации'

  • ISO 26262-6, Таблица 1 (1d) 'Использование защитных методов реализации'

  • EN 50128, таблица A.4 (11) 'языковое подмножество'
    EN 50128, таблица A.3 (1) 'безопасное программирование'
    EN 50128, таблица A.4 (8) 'язык программирования со строгим контролем типов'

  • EN 50128, таблица A.3 (1) 'безопасное программирование'

  • EN 50128, таблица A.4 (8) 'язык программирования со строгим контролем типов'

  • MISRA C:2012, правило 10.1

Смотрите такжеhisl_0073: Использование операций сдвига разряда
В последний раз измененныйR2021b