КОД MATLAB

himl_0004: КОД MATLAB рекомендации Анализатора для генерации кода

ID: Заголовокhiml_0004: рекомендации Анализатора кода MATLAB® для генерации кода
ОписаниеПри использовании кода MATLAB:
AЧтобы активировать КОД MATLAB сообщения Анализатора для генерации кода, используйте директиву %#codegen во внешних функциях MATLAB.
B

Рассмотрите сообщения Анализатора КОДА MATLAB. Также:

  • Реализуйте рекомендации или

  • Выровняйте по ширине не после рекомендаций с директивами %#ok<message-ID(S)> в функции MATLAB. Не используйте %#ok без определенных идентификаторов сообщений.

Примечания

Сообщения Анализатора КОДА MATLAB обеспечивают, идентифицирует потенциальные ошибки, проблемы и возможности для улучшения кода.

ОбъяснениеAВо внешних функциях MATLAB директива %#codegen активирует КОД MATLAB сообщения Анализатора для генерации кода.
B
  • Следующий КОД MATLAB рекомендации Анализатора помогает:

    • Сгенерируйте эффективный код.

    • Примените лучшие методы генерации кода

    • Избегайте использования функций MATLAB, не поддерживавших для генерации кода.

    • Избегайте шаблонов кода, которые потенциально влияют на безопасность.

  • Не после КОДА MATLAB рекомендации Анализатора выравниваются по ширине с идентификатором сообщения (e. g. %#ok<NOPRT>.

    В функции MATLAB, с помощью %#ok без идентификатора сообщения выравнивает сплошную строку, потенциально скрывая проблемы.

Образцовые проверки советника
  • Задачей> Моделирование Стандартов для DO-178C/DO-331> Системы Высокой Целостности> MATLAB> Проверка КОД MATLAB сообщения Анализатора

  • Задачей> Моделирование Стандартов для IEC 61508> Системы Высокой Целостности> MATLAB> Проверка КОД MATLAB сообщения Анализатора

  • Задачей> Моделирование Стандартов для IEC 62304> Системы Высокой Целостности> MATLAB> Проверка КОД MATLAB сообщения Анализатора

  • Задачей> Моделирование Стандартов для EN 50128> Системы Высокой Целостности> MATLAB> Проверка КОД MATLAB сообщения Анализатора

  • Задачей> Моделирование Стандартов для ISO 26262> Системы Высокой Целостности> MATLAB> Проверка КОД MATLAB сообщения Анализатора

Для получения дополнительной информации проверки смотрите Проверку КОД MATLAB сообщения Анализатора.

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

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

  • ISO 26262-6, Таблица 1 (1b) 'Использование языковых подмножеств'
    ISO 26262-6, Таблица 1 (1d) 'Использование защитных методов реализации'
    ISO 26262-6, Таблица 1 (1e) 'Использование установленных принципов разработки'
    ISO 26262-6, Таблица 1 (1f) 'Использование однозначного графического представления'
    ISO 26262-6, Таблица 1 (1g) 'Использование руководства по стилю'
    ISO 26262-6, Таблица 1 (1 ч) 'Использование соглашений о присвоении имен'

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

  • DO 331, Раздел MB.6.3.1.b 'Точность и непротиворечивость’
    DO 331, Раздел MB.6.3.2.b 'Точность и непротиворечивость’

Смотрите также

Контрольный код для ошибок и предупреждений (MATLAB)

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

Рекомендуемый

  • Активируйте КОД MATLAB сообщения Анализатора для генерации кода:

    %#codegen
      function y = function(u)
        y = inc_u(u));     
      end
      function yy = inc_u(uu)
        yy = uu + 1;
      end
    

  • Выровняйте по ширине недостающий ; и value assigned might be unused:

    y = 2*u %#ok<NOPRT,NAGSU> output for debugging
    ...
    y = 3*u;

  • Если выведенный не желаем, и присвоенное значение не использовано, удалите строку y = 2*u ...:

    y = 3*u;

Не рекомендуемый

  • Внешний файл MATLAB использовал в Simulink® с пропавшими без вести директивы %#codegen:

    function y = function(u)
        % nested functions can't be used for code generation
        function yy = inc_u(uu)
          yy = uu + 1;
        end
        y = inc_u(u));     
      end
    

  • Все сообщения в строке выравниваются по ширине при помощи %#ok без идентификатора сообщения:

    % missing ';' and the value might be unused
      y = 2*u %#ok 
      …
      y = 3*u;
    

  • Никакое выравнивание:

    % missing justification for missing ';' and unnecessary '[..]'
    y= [2*u]

himl_0006: код MATLAB, если / elseif / еще шаблоны

ID: Заголовокhiml_0006: код MATLAB, если / elseif / еще шаблоны
Описание

Для кода MATLAB с построениями if / elseif/ else отключите построения с оператором else, который включает, по крайней мере, значимый комментарий. Итоговый оператор else не требуется, если нет никакого elseif.

Объяснение
  • Безопасное программирование

  • Удобочитаемость

  • Трассируемость

Образцовые проверки советника
  • Задачей> Моделирование Стандартов для DO-178C/DO-331> Системы Высокой Целостности> MATLAB> Проверка if/elseif/else шаблоны в блоках MATLAB function

  • Задачей> Моделирование Стандартов для IEC 61508> Системы Высокой Целостности> MATLAB> Проверка if/elseif/else шаблоны в блоках MATLAB function

  • Задачей> Моделирование Стандартов для IEC 62304> Системы Высокой Целостности> MATLAB> Проверка if/elseif/else шаблоны в блоках MATLAB function

  • Задачей> Моделирование Стандартов для EN 50128> Системы Высокой Целостности> MATLAB> Проверка if/elseif/else шаблоны в блоках MATLAB function

  • Задачей> Моделирование Стандартов для ISO 26262> Системы Высокой Целостности> MATLAB> Проверка if/elseif/else шаблоны в блоках MATLAB function

Для получения дополнительной информации проверки смотрите Проверку if/elseif/else шаблоны в блоках MATLAB function.

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

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

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

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

  • DO 331, Раздел MB.6.3.1.e 'Соответствие к стандартам'
    DO 331, Раздел MB.6.3.2.e 'Соответствие к стандартам'
    DO 331, Раздел MB.6.3.3.e 'Соответствие к стандартам'

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

Рекомендуемый

  • if u > 0
        y = 1;
      end
    

  • if u > 0
        y = 1;
      elseif u < 0
        y = -1;
      else
        y = 0;
      end
    

  • y = 0;
      if u > 0
        y = 1;
      elseif u < 0
    y = -1;
      else
        % handled before if
      end
    

Не рекомендуемый

  •   % empty else
      y = 0;
      if u > 0
        y = 1;
      elseif u < 0
        y = -1;
      else
      end
    

  •   % missing else
      y = 0;
      if u > 0
        y = 1;
      elseif u < 0
        y = -1;
      end
    

himl_0007: переключатель кода MATLAB / случай / в противном случае шаблоны

ID: Заголовокhiml_0007: переключатель кода MATLAB / случай / в противном случае шаблоны
Описание

Для кода MATLAB с операторами switch включайте:

  • По крайней мере два оператора case.

  • Оператор otherwise, который, по крайней мере, включает значимый комментарий.

Примечание

Если существует только один case и один оператор otherwise, рассмотрите использование оператора if / else.

Объяснение
  • Безопасное программирование

  • Удобочитаемость

  • Трассируемость

Образцовые проверки советника
  • Задачей> Моделирование Стандартов для DO-178C/DO-331> Системы Высокой Целостности> MATLAB> операторы switch Проверки в блоках MATLAB function

  • Задачей> Моделирование Стандартов для IEC 61508> Системы Высокой Целостности> MATLAB> операторы switch Проверки в блоках MATLAB function

  • Задачей> Моделирование Стандартов для IEC 62304> Системы Высокой Целостности> MATLAB> операторы switch Проверки в блоках MATLAB function

  • Задачей> Моделирование Стандартов для EN 50128> Системы Высокой Целостности> MATLAB> операторы switch Проверки в блоках MATLAB function

  • Задачей> Моделирование Стандартов для ISO 26262> Системы Высокой Целостности> MATLAB> операторы switch Проверки в блоках MATLAB function

Для получения дополнительной информации проверки смотрите операторы switch Проверки в блоках MATLAB function.

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

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

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

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

  • DO 331, Раздел MB.6.3.1.e 'Соответствие к стандартам'
    DO 331, Раздел MB.6.3.2.e 'Соответствие к стандартам'
    DO 331, Раздел MB.6.3.3.e 'Соответствие к стандартам'

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

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

Рекомендуемый

  • switch u
        case 1
          y = 3;
        case 3
          y = 1;
        otherwise
          y = 1;
      end
    

  • y = 0;
      switch u
        case 1
          y = 3;
        case 3
          y = 1;
        otherwise
          % handled before switch
      end
    

Не рекомендуемый

  •   % no case statements
      switch u
        otherwise
          y = 1;
      end
    

  •   % empty otherwise statement
      switch u
        case 1
          y = 3;
        case 3
          y = 1;
        otherwise
      end
    

  •   % no otherwise statement
      switch u
        case 1
          y = 3;
      end
    

himl_0008: типы данных оператора отношения кода MATLAB

ID: Заголовокhiml_0008: типы данных оператора отношения кода MATLAB
Описание

Для кода MATLAB с операторами отношения используйте совпадающий тип данных для левых и правых операндов.

ПримечаниеЕсли эти два операнда будут иметь различные типы данных, MATLAB продвинет оба операнда тип общих данных. Это может привести к неожиданным результатам.
Объяснение
  • Предотвратите неявные броски

  • Предотвратите неожиданные результаты

Образцовые проверки советника
  • Задачей> Моделирование Стандартов для DO-178C/DO-331> Системы Высокой Целостности> MATLAB> использование Проверки операторов отношения в блоках MATLAB function

  • Задачей> Моделирование Стандартов для IEC 61508> Системы Высокой Целостности> MATLAB> использование Проверки операторов отношения в блоках MATLAB function

  • Задачей> Моделирование Стандартов для IEC 62304> Системы Высокой Целостности> MATLAB> использование Проверки операторов отношения в блоках MATLAB function

  • Задачей> Моделирование Стандартов для EN 50128> Системы Высокой Целостности> MATLAB> использование Проверки операторов отношения в блоках MATLAB function

  • Задачей> Моделирование Стандартов для ISO 26262> Системы Высокой Целостности> MATLAB> использование Проверки операторов отношения в блоках MATLAB function

Для получения дополнительной информации проверки смотрите использование Проверки операторов отношения в блоках MATLAB function.

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

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

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

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

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

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

Рекомендуемый

  • myBool == true
    myInt8 == int8(1) 
    

Не рекомендуемый

  • myBool == 1
    myInt8 == true
    myInt8 == 1
    myInt8 == int16(1)
    myEnum1.EnumVal == int32(1)
    

himl_0009: код MATLAB с равным / не равняется операторам отношения

ID: Заголовокhiml_0009: код MATLAB с равным / не равняется операторам отношения
Описание

Для кода MATLAB с равным или не равными операторами отношения, избегайте использования следующих типов данных:

  • Единственный

  • 'double'

  • Типы выведены от единственных или двойных типов данных

Примечание

Рассмотрите следующие фрагменты кода:

  1. sqrt(2)^2 == 2

  2. sqrt(2^2) == 2

Математически, оба фрагмента верны. Однако из-за эффектов округления плавающей точки, результаты:

  1. ложь

  2. tRUE

Объяснение
  • Предотвратите неожиданные результаты

Образцовые проверки советника
  • Задачей> Моделирование Стандартов для DO-178C/DO-331> Системы Высокой Целостности> MATLAB> использование Проверки операторов равенства в блоках MATLAB function

  • Задачей> Моделирование Стандартов для IEC 61508> Системы Высокой Целостности> MATLAB> использование Проверки операторов равенства в блоках MATLAB function

  • Задачей> Моделирование Стандартов для IEC 62304> Системы Высокой Целостности> MATLAB> использование Проверки операторов равенства в блоках MATLAB function

  • Задачей> Моделирование Стандартов для EN 50128> Системы Высокой Целостности> MATLAB> использование Проверки операторов равенства в блоках MATLAB function

  • Задачей> Моделирование Стандартов для ISO 26262> Системы Высокой Целостности> MATLAB> использование Проверки операторов равенства в блоках MATLAB function

Для получения дополнительной информации проверки смотрите использование Проверки операторов равенства в блоках MATLAB function.

Ссылки
  • DO 331, Раздел MB.6.3.1.g 'Алгоритмы точен’
    EN 50128, MB.6.3.2.g ''безопасное программирование'

  • 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 (1d) 'Использование защитных методов реализации'

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

  • MISRA C:2012, Dir 1.1

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

Рекомендуемый

  • myDouble >= 0.99 && myDouble <= 1.01; % test range

Не рекомендуемый

  • myDouble == 1.0
    mySingle ~= 15.0
    

himl_0010: код MATLAB с логическими операторами и функциями

ID: Заголовокhiml_0010: код MATLAB с логическими операторами и функциями
Описание

Для логических операторов и логических функций в коде MATLAB, используйте логические типы данных

Примечания

Логические операторы: &&, ||, ~

Логические функции: and, or, not, xor

Объяснение
  • Предотвратите неожиданные результаты

Образцовые проверки советника
  • Задачей> Моделирование Стандартов для DO-178C/DO-331> Системы Высокой Целостности> MATLAB> использование Проверки логических операторов и функций в блоках MATLAB function

  • Задачей> Моделирование Стандартов для IEC 61508> Системы Высокой Целостности> MATLAB> использование Проверки логических операторов и функций в блоках MATLAB function

  • Задачей> Моделирование Стандартов для IEC 62304> Системы Высокой Целостности> MATLAB> использование Проверки логических операторов и функций в блоках MATLAB function

  • Задачей> Моделирование Стандартов для EN 50128> Системы Высокой Целостности> MATLAB> использование Проверки логических операторов и функций в блоках MATLAB function

  • Задачей> Моделирование Стандартов для ISO 26262> Системы Высокой Целостности> MATLAB> использование Проверки логических операторов и функций в блоках MATLAB function

Для получения дополнительной информации проверки смотрите использование Проверки логических операторов и функций в блоках MATLAB function.

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

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

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

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

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

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

Рекомендуемый

  • ~myLogical
    (myInt8 > int8(4)) && myLogical
    xor(myLogical1,myLogical2)
    

Не рекомендуемый

  • ~myInt8
    myInt8 && myDouble
    

Была ли эта тема полезной?