Код MATLAB

himl_0004: КОДЫ MATLAB Analyzer для генерации кода

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

Просмотрите сообщения КОД MATLAB Analyzer. Либо:

  • Осуществление рекомендаций или

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

Примечания

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

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

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

    • Следуйте лучшим практикам генерации кода

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

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

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

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

Проверки Model AdvisorПроверяйте сообщения анализатора кода MATLAB (Simulink Check)
Ссылки
  • IEC 61508-3, Таблица A.3 (3) 'Подмножество языка "
    IEC 61508-3, Таблица A.4 (3) «Оборонительное программирование »
    IEC 61508-3, Таблица A.4 (5) «Проекты и кодирования»

  • МЭК 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 (1h) «Использование именующих конвенций»

  • EN 50128, таблица A.4 (11) 'Language Subset'
    EN 50128, таблица A.3 (1) 'Defensive Programming'
    EN 50128, таблица A.12 (1) «Стандарт кодирования»
    EN 50128, таблица A.12 (2) 'Руководство по стилю кодирования'

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

См. также

Проверьте код на ошибки и предупреждения

Последнее изменениеR2016a
Примеры

Рекомендуется

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

    %#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/else шаблоны

Идентификатор: Заголовокhiml_0006: код MATLAB, если/elseif/else шаблоны
Описание

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

Объяснение
  • Оборонительное программирование

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

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

Проверки Model AdvisorПроверьте, есть ли шаблоны в блоках MATLAB function (Simulink Check)
Ссылки
  • IEC 61508-3, Таблица A.3 (3) 'Подмножество языка "
    IEC 61508-3, Таблица A.4 (3) «Оборонительное программирование »

  • МЭК 62304, 5.5.3 - Критерии приемки Модуля ПО

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

  • EN 50128, таблица A.4 (11) 'Language Subset'
    EN 50128, таблица A.3 (1) 'Defensive Programming'

  • 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 switch/case/other patterns

Идентификатор: Заголовокhiml_0007: Код MATLAB switch/case/other patterns
Описание

Для кода MATLAB с switch операторы, включают:

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

  • Система координат otherwise оператор, которое, по крайней мере, включает содержательный комментарий.

Примечание

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

Объяснение
  • Оборонительное программирование

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

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

Проверки Model AdvisorПроверяйте операторы switch в блоках MATLAB function (Simulink Check)
Ссылки
  • IEC 61508-3, Таблица A.3 (3) 'Подмножество языка "
    IEC 61508-3, Таблица A.4 (3) «Оборонительное программирование »

  • МЭК 62304, 5.5.3 - Критерии приемки Модуля ПО

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

  • EN 50128, таблица A.4 (11) 'Language Subset'
    EN 50128, таблица A.3 (1) 'Defensive Programming'

  • 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

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

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

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

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

Проверки Model AdvisorПроверяйте использование реляционных операторов в блоках MATLAB function (Simulink Check)
Ссылки
  • DO-331, Section MB.6.3.1.g 'Алгоритмы точны'
    DO-331, Section MB.6.3.2.g 'Алгоритмы точны'

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

  • МЭК 62304, 5.5.3 - Критерии приемки Модуля ПО

  • ISO 26262-6, таблица 1 (b) «Использование языковых подмножеств»
    ISO 26262-6, таблица 1 с) «Обеспечение соблюдения строгих типоразмеров »

  • EN 50128, таблица A.4 (8) 'Сильно типизированный язык программирования'
    EN 50128, таблица A.4 (11) 'Language Subset'

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

Рекомендуется

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

Не рекомендуется

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

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

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

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

  • Одинок

  • Дважды

  • Типы, выведенные из одинарных или двойных типов данных

Примечание

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

  1. sqrt(2)^2 == 2

  2. sqrt(2^2) == 2

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

  1. false

  2. true

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

Проверки Model AdvisorПроверяйте использование операторов равенства в блоках MATLAB function (Simulink Check)
Ссылки
  • DO-331, Section MB.6.3.1.g 'Алгоритмы точны "
    EN 50128, MB.6.3.2.g '' Defensive Programming '

  • IEC 61508-3, Таблица A.3 (3) 'Подмножество языка "
    IEC 61508-3, Таблица A.4 (3) «Оборонительное программирование »

  • МЭК 62304, 5.5.3 - Критерии приемки Модуля ПО

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

  • EN 50128, таблица A.4 (11) 'Language Subset'
    EN 50128, таблица A.3 (1) 'Defensive Programming'

  • MISRA C:2012, Dir 1.1

См. также

jc_0481: Использование жестких сравнений равенств для чисел с плавающей точкой в Stateflow

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

Последнее изменениеR2018b
Примеры

Рекомендуется

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

Не рекомендуется

  • myDouble == 1.0
    mySingle ~= 15.0
    

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

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

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

Примечания

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

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

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

Проверки Model AdvisorПроверяйте использование логических операторов и функций в блоках MATLAB function (Simulink Check)
Ссылки
  • IEC 61508-3, Таблица A.3 (2) 'Сильно типизированный язык программирования "
    IEC 61508-3, Таблица A.3 (3) 'Подмножество языка "

  • МЭК 62304, 5.5.3 - Критерии приемки Модуля ПО

  • ISO 26262-6, таблица 1 (b) «Использование языковых подмножеств»
    ISO 26262-6, таблица 1 с) «Обеспечение соблюдения строгих типоразмеров »

  • EN 50128, таблица A.4 (8) 'Сильно типизированный язык программирования'
    EN 50128, таблица A.4 (11) 'Language Subset'

  • DO-331, Section MB.6.3.1.g 'Алгоритмы точны'
    DO-331, Section MB.6.3.2.g 'Алгоритмы точны'

Последнее изменениеR2018b
Примеры

Рекомендуется

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

Не рекомендуется

  • ~myInt8
    myInt8 && myDouble