exponenta event banner

Импорт и тестирование пользовательского кода C/C + +

Можно протестировать пользовательский код C или C++, импортируя его в Simulink ® с помощью мастера импорта кода в диспетчере тестов или команд API в командной строке MATLAB ®. Можно выполнить модульное тестирование для тестирования подмножества кода C или интеграционное тестирование для тестирования полного кода C или C++. При импорте кода импортер кода:

  • Преобразование функций кода C в блоки вызова Simulink C и сохранение этих блоков в библиотеке Simulink

  • Создание внутреннего электрического жгута для каждого блока вызова Simulink C

  • Создание тестового файла

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

Импорт кода с помощью мастера или API

Чтобы импортировать и протестировать пользовательский код C или C++ с помощью мастера импорта кода, откройте диспетчер тестов и выберите New > Test for C/C + + Code. Шаги мастера показаны в примере «Проведение модульного тестирования импортированного пользовательского кода с помощью мастера». После импорта кода с помощью мастера на панели Обозреватель тестов (Test Browser) Диспетчера тестов (Test Manager) отображаются созданные тестовый файл, тестовые наборы и тестовые примеры, а также автоматически заполняются библиотечные модели и поля тестовых кабелей и настройки покрытия для каждого тестового случая. Можно настроить тестовые примеры в диспетчере тестов, добавив входные данные, оценки, ссылки на требования или другие параметры.

В примере «Проведение модульного тестирования импортированного пользовательского кода с помощью команд API» показаны классы и методы импорта кода. Импортер кода устанавливает значения свойств для созданной библиотеки, тестового файла, тестовых наборов, тестовых примеров и покрытия. Тестовые примеры можно настроить с помощью команд API для добавления входных данных, оценок, ссылок на требования или других параметров.

Перед запуском тестов либо измените текущую папку на папку, содержащую созданные артефакты, либо добавьте к пути созданный словарь данных. Затем выполните тесты и просмотрите покрытие и другие результаты тестирования.

Артефакты, созданные импортером кода

Импортер кода создает следующие артефакты:

  • Библиотека Simulink с блоками Caller для каждой импортированной функции пользовательского кода.

  • Внутренний тестовый жгут для каждого блока вызывающего абонента C. Для каждого созданного электрического жгута решателем является FixedStepDiscrete, и покрытие включено.

  • Тестовый файл MLDATX. Тестовый файл включает набор тестов и тестовый пример для каждого блока вызывающего абонента C. Импортер кода также устанавливает следующие типы покрытия:

    • Охват принятием решений

    • Покрытие условий

    • Покрытие MCDC

    • Охват таблицы подстановки

    • Охват диапазонов сигналов

    • Покрытие блоков Simulink Design Verifier

    • Покрытие реляционных границ

    • Охват диапазонов сигналов

  • Словарь данных Simulink

Кроме того, только для модульных тестов импортер кода создает:

  • Изолированная среда для изоляции тестируемых функций

  • Заглушки, если какие-либо исходные файлы имеют неопределенные символы

Ограничения и обходные пути

Эти ограничения и обходные пути применяются к использованию пользовательского средства импорта кода C или C++.

Общие ограничения и обходные пути

  • Для интеграционных тестов, если код включает функции C++, добавьте обертки вокруг них, чтобы сделать их совместимыми С перед импортом функций в Simulink.

  • Нельзя импортировать код, содержащий следующие типы C:

    • Структуры с объединениями или указателями

    • Структуры с битовыми полями

    • Функции с двойными указателями (> = * *) в качестве входных данных

  • Если в коде много глобальных переменных, используйте диаграмму Stateflow ® вместо блока Initialize Function, чтобы задать для переменных их начальные значения в модели Simulink,.

  • Если файл заголовка или файл C или C++ содержит специальные прагматики компилятора или код сборки, определенный в теле функции, импортер кода не импортирует эту функцию. Чтобы импортировать прагматики или код сборки, включите реализацию заглушки для функции.

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

  • Для функции с выводом указателя укажите размер вывода на странице спецификаций порта мастера или с помощью объектов функции в API.

Файлы заголовков

  • Если один и тот же файл заголовка включен несколько раз и каждому включению предшествует другая директива препроцессора (например, #define X 1, #define X 2), код может быть импортирован неправильно.

  • Если файл C или C++ содержит несколько заголовочных файлов, включите все заголовочные файлы в путь включения.

  • Если код сборки определен в файле заголовка как часть макроса, разделите этот код с помощью #ifdef директива.

Модульные испытания

Эти ограничения и обходные пути применяются только к модульным тестам.

  • Для импорта поддерживается только код C.

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

  • Если импортируемый исходный файл включает другие исходные файлы и вы не можете обновить код, чтобы изменить его, не выбирайте в мастере «Создать агрегированный заголовок» в качестве режима изолированной программной среды или установите параметр Mode имущество sltest.CodeImporter.SandboxSettings кому GenerateAggregatedHeader.

  • Если исходный или заголовочный файл, содержащий определение глобальной переменной, несколько раз включается в импортируемый исходный файл, выберите параметр Удалить определение переменной в изолированной программной среде заголовочного файла в мастере или в API, задайте RemoveVariableDefinitionHeader имущества sltest.CodeImporter.SandboxSettings объект в true.

См. также

| |

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