exponenta event banner

Код MATLAB

himl_0004: Рекомендации анализатора кода MATLAB для создания кода

Идентификатор: Заголовок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 оправдано идентификатором сообщения (например, %#ok<NOPRT>.

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

Проверки помощника по моделиПроверка сообщений анализатора кода MATLAB (Simulink Check)
Ссылки
  • IEC 61508-3, Таблица A.3 (3) 'Поднабор языка "
    IEC 61508-3, таблица A.4 (3) «Оборонительное программирование »
    МЭК 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) «Поднабор языка»
    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 «Точность и последовательность»

См. также

Проверка кода на наличие ошибок и предупреждений

Последнее изменение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/else шаблоны

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

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

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

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

  • Отслеживаемость

Проверки помощника по моделиПроверка шаблонов/elseif/else в функциональных блоках MATLAB (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) «Поднабор языка»
    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/регистр/другие шаблоны

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

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

  • Не менее двух case заявления.

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

Примечание

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

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

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

  • Отслеживаемость

Проверки помощника по моделиПроверка операторов переключения в функциональных блоках MATLAB (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) «Поднабор языка»
    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

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

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

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

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

Проверки помощника по моделиПроверка использования реляционных операторов в функциональных блоках MATLAB (Simulink Check)
Ссылки
  • 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) 'Поднабор языка "

  • МЭК 62304, 5.5.3 - Критерии приемки установки программного обеспечения

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

  • 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 с равными/не равными реляционными операторами

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

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

  • Одинок

  • Дважды

  • Типы, полученные из одного или двух типов данных

Примечание

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

  1. sqrt(2)^2 == 2

  2. sqrt(2^2) == 2

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

  1. false

  2. true

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

Проверки помощника по моделиПроверка использования операторов равенства в функциональных блоках MATLAB (Simulink Check)
Ссылки
  • 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) «Оборонительное программирование »

  • МЭК 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

См. также

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

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

Проверки помощника по моделиПроверка использования логических операторов и функций в функциональных блоках MATLAB (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) «Поднабор языка»

  • 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