exponenta event banner

Подавление генерации вариантов по умолчанию для недостижимых операторов переключения статусов

В этом примере показано, как указать, следует ли создавать варианты по умолчанию для операторов switch-case в коде диаграмм Stateflow ®. Сгенерированный код, не содержащий случаев по умолчанию, сохраняет потребление ПЗУ и обеспечивает лучшее покрытие кода, поскольку каждая ветвь в сгенерированном коде поддается фальсификации.

Некоторые стандарты кодирования, такие как MISRA, требуют использования регистра по умолчанию для операторов switch-case. Если вы хотите увеличить шансы на создание кода, совместимого с MISRA C, создайте варианты по умолчанию для недостижимых инструкций Stateflow switch.

Пример

На фиг.1, 2 и 3 показаны соответствующие части sldemo_fuelsys модель, замкнутая система, содержащая установку и контроллер. Логика контроллера расхода воздуха и топлива представляет собой диаграмму статофлоу, которая определяет различные режимы работы.

Рисунок 1: Модель верхнего уровня установки и контроллера

Рис. 2: Подсистема регулятора расхода топлива

Рис. 3: Логика контроллера расхода топлива

Создание кода с вариантами по умолчанию для недостижимых операторов переключения по статусу

  1. В окне команды MATLAB для открытия sldemo_fuelsys через rtwdemo_fuelsys введите:

    rtwdemo_fuelsys
  2. Откройте диалоговое окно Параметры конфигурации модели (Model Configuration parameters). На вкладке Создание кода > Стиль кода снимите флажок Подавить создание вариантов по умолчанию для инструкций Stateflow, если они недоступны.

  3. В окне команд MATLAB для построения модели введите:

    slbuild('sldemo_fuelsys/fuel_rate_control');

Для различных режимов работы: fuel_rate_control.c содержит случаи по умолчанию для недостижимых операторов коммутатора. Например, для режима работы Shutdown созданный код содержит следующую инструкцию по умолчанию:

default:
 /* Unreachable state, for coverage only */
 rtDWork.bitsForTID0.is_Fuel_Disabled = IN_NO_ACTIVE_CHILD;
 break;

Для режима работы «Разогрев» созданный код содержит следующую инструкцию по умолчанию:

default:
 /* Unreachable state, for coverage only */
 rtDWork.bitsForTID0.is_Low_Emissions = IN_NO_ACTIVE_CHILD;
 break;

Подавление случаев по умолчанию для недостижимых операторов коммутатора с потоком состояний

  1. Откройте диалоговое окно «Параметры конфигурации». На вкладке Создание кода > Стиль кода выберите параметр Подавить создание вариантов по умолчанию для инструкций Stateflow, если они недоступны.

  2. Создайте модель.

Прочитайте через fuel_rate_control.c файл. Случаи по умолчанию для операторов недостижимых коммутаторов отсутствуют в сгенерированном коде.

Связанные темы