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

Можно протестировать пользовательский код C or C++ путем импорта его в Simulink® использование мастера Средства импорта Кода в менеджере по Тесту или командах API в MATLAB® командная строка. Можно выполнить модульное тестирование, чтобы протестировать подмножество кода С или интеграционного тестирования, чтобы протестировать полный код C or C++. Когда вы импортируете свой код, средство импорта кода:

  • Преобразует функции кода С в Simulink C, Вызывающая сторона блокирует и сохраняет те блоки в Библиотеке Simulink

  • Создает внутреннюю обвязку для каждого блока Simulink C Caller

  • Генерирует тестовый файл

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

Импортируйте код Используя мастер или API

Чтобы импортировать и протестировать пользовательский код C or C++ с помощью мастера Средства импорта Кода, откройте менеджера по Тесту и выберите New> Test for C/C++ Code. Шаги мастера показывают в Модульном тестировании Поведения на Импортированном Пользовательском коде при помощи примера Мастера. После того, как вы импортируете код с помощью мастера, панель Test Browser менеджера по Тесту показывает сгенерированный тестовый файл, тестовые наборы и тесты, и автоматически заполняет модель библиотеки и поля тестовой обвязки и настройки покрытия для каждого теста. Можно настроить тесты в менеджере по Тесту путем добавления входных параметров, оценок, ссылок на требования или других опций.

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

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

Средство импорта кода сгенерированные артефакты

Средство импорта кода создает эти артефакты:

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

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

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

    • Decision Coverage

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

    • Покрытие MCDC

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

    • Покрытие диапазона сигнала

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

    • Реляционное граничное покрытие

    • Покрытие диапазона сигнала

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

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

  • Песочница, чтобы изолировать протестированные функции

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

Ограничения и обходные решения

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

Общие ограничения и обходные решения

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

  • Эти типы C и функции с формальными аргументами, которые используют эти типы, не могут быть импортированы. Глобальные переменные, которые используют эти типы, не отсоединены как порты на блоке C Caller:

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

    • Функции с входными параметрами, которые имеют больше чем один уровень косвенности указателя (например, >=**)

    • Функции, которые возвращают указатель

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

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

    • Для интеграционных тестов замените ассемблерный код при помощи #ifdef директива.

    • Для модульных тестов функция перемещена автоматически в auto_stub.c файл с пустым телом. Чтобы импортировать функцию в Simulink, вручную заблокируйте функцию в man_stub.c.

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

Заголовочные файлы

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

  • Если ассемблерный код задан в заголовочном файле, задайте совместимый макрос при помощи #ifdef директива. Например, если ваш код:

    #define XYZ(K,L) {\
    asm("MOVLW " ___mkstr(K) ); \
    asm("MOVLW " ___mkstr(L) ); \
    }
    
    замените его на:
    #ifndef IS_SL_IMPORT
    #define XYZ(K,L)  {\
    asm("MOVLW " ___mkstr(K) ); \
    asm("MOVLW " ___mkstr(L) ); \
    }
    #else
    // a valid implementation
    #endif
    
    Затем добавьте IS_SL_IMPORT к списку задает, когда вы импортируете код.

Модульные тесты

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

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

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

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

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

| |

Похожие темы