c код в simulink
Документация
Интегрируйте и вызовите внешний код С из модели Simulink
Simulink / Пользовательские Функции
Описание
Задайте файлы исходного кода и вспомогательные файлы, которые будут вызваны блоком C Function в панели Simulation Target параметров конфигурации.
Ограничения
Только покрытие выполнения измеряется.
Simulink Code Inspector™
Simulink Design Verifier™
Использование блока C Function в Simulink Report Generator™
Ключевое слово C static не поддерживается.
К значениям кэша через временные шаги задайте символ как Persistent в таблице Symbols диалогового окна блока.
Файлы не могут быть включены в скрипт.
Внешние функции должны быть заданы в панели Simulation Target диалогового окна Параметров конфигурации.
Если вы имеете существующий, включает заданный в панель Simulation Target, которая не может быть смешана с новым, включают, рассматривают добавление включать и Функционального блока C в модели библиотеки и используют ссылку на блок в основной модели. Для получения дополнительной информации смотрите, Создают Пользовательскую Библиотеку.
Указатели различных типов не могут быть присвоены друг другу. Типы указателей должны соответствовать, когда вы вызываете внешние функции.
Код не может взять адрес константы.
Непосредственно вызов некоторых библиотечных функций C от блока C Function не поддерживается. Чтобы видеть список Математических Библиотечных функций C, которые можно вызвать непосредственно, смотрите Вызов C Библиотечные функции От блока C Function. Чтобы вызвать другие библиотечные функции C, создайте функцию обертки, которая вызывает библиотечную функцию C.
Документация
Сгенерируйте код С из модели Simulink
Этот пример использует:
Откройте модель
ex_codegen_dsp модель реализует простой адаптивный фильтр, чтобы удалить шум из сигнала, одновременно идентифицируя фильтр, который характеризует шумовое содержимое частоты. Чтобы открыть эту модель, введите следующую команду в командную строку MATLAB:
Можно альтернативно создать модель с помощью шаблона DSP System. Для получения дополнительной информации смотрите, Конфигурируют окружение Simulink для Моделей Обработки сигналов.
Сконфигурируйте модель для генерации кода
Симулируйте модель
Симулируйте модель. Time Scope показывает вход и отфильтровал характеристики сигнала.
Array Plot показывает последние 32 веса фильтра, к которым фильтр LMS эффективно адаптировался и отфильтровал шум от сигнала.
К этим коэффициентам можно также получить доступ используя следующую команду:
Сгенерируйте код из модели
Прежде чем вы сгенерируете код из модели, необходимо сначала гарантировать, что у вас есть разрешение записи в вашей текущей папке.
Чтобы сгенерировать код, необходимо внести следующие изменения:
Во вкладке Modeling панели инструментов модели нажмите Model Settings. Диалоговое окно Configuration Parameters открывается. Перейдите к вкладке Code Generation, выберите параметр Generate code only и нажмите Apply.
Создание и запуск сгенерированного кода
Настройте Компилятор C/C++
Чтобы создать исполняемый файл, необходимо настроить поддерживаемый компилятор C. Для списка компиляторов, поддержанных в текущем релизе, см. Поддерживаемые и Совместимые Компиляторы.
Чтобы настроить ваш компилятор, запустите следующую команду в командной строке MATLAB:
Создайте сгенерированный код
После того, как ваш компилятор является настройкой, можно создать и запустить скомпилированный код. ex_codegen_dsp модель в настоящее время сконфигурирована, чтобы сгенерировать код только. Чтобы создать сгенерированный код, необходимо сначала внести следующие изменения:
Во вкладке Modeling панели инструментов модели нажмите Model Settings. Диалоговое окно Configuration Parameters открывается. Перейдите к вкладке Code Generation, очистите параметр Generate code only и нажмите Apply.
Запустите сгенерированный код
Чтобы запустить сгенерированный код, введите следующую команду в командную строку MATLAB:
Можно теперь сравнить переменные из сгенерированного кода с переменными из симуляции модели. Чтобы получить доступ к последнему набору коэффициентов от сгенерированного кода, введите следующее в подсказку MATLAB:
Обратите внимание на то, что коэффициенты в filter_wts(. 1201) и rt_filter_wts(. 1201) соответствие.
Переместите код к другой среде разработки
Если вы генерируете код из своей модели Simulink, можно переместить код к другой среде разработки с помощью утилиты pack-and-go. Используйте эту утилиту, когда среда разработки не будет иметь продукты Simulink и MATLAB.
Утилита pack-and-go использует инструменты для настройки процесса сборки после генерации кода и a packNGo (Simulink Coder) функция, чтобы найти и упаковать файлы для создания исполняемого образа. Файлы упакованы в сжатом файле, что можно переместить и распаковать использование стандартной утилиты zip.
Для примера о том, как группировать код С и исполняемый файл, сгенерированный из этого примера, смотрите, Перемещают Код, Сгенерированный от Модели Simulink до Другой Среды разработки.
C Caller
Integrate C code in Simulink
Simulink / User-Defined Functions
Description
To use the C Caller block, define your source code and any supporting files using Simulation Target under Configuration Parameters. Then, bring a C Caller block to the Simulink canvas, using Library Browser > Simulink > User Defined Functions. To change the defined source code file and its dependencies, go to Simulation Target tab in Configuration Parameters by clicking the from the block dialog. After changing your source code or any of its dependencies, refresh the list of functions by clicking the
on the block dialog. To browse the function definitions in your source code, use the
icon to access your source files.
Ports
Input
Input argument — Input argument for the corresponding C Caller block
scalar | vector | matrix
Input argument to the C Caller block.
Number of input arguments and their names are inferred through the selected function in your external C code. To receive data to a C Caller block, connect an input signal to the input ports.
Input label has the same name as your input argument unless changed by editing the Label column under Port Specification from the Block Dialog. If you rename the label to an input port, the C Caller block changes the name of the port.
For input variables, you can change the input scope to parameters or constants using the Scope column.
Data Types: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus
Output
Output argument — Output argument for the corresponding C Caller block
scalar | vector | matrix
Output argument from the C Caller block.
Number of output arguments and their names are inferred through the selected function in your external C code. To send data from your C Caller block, connect a block to the output port of your C Caller block.
Output port label has the same name as your output argument unless you change it by editing the Label column under Port Specification from the Block Dialog. If you rename the label to an input port, the C Caller block changes the name of the port.
Data Types: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | enumerated | bus
Документация
Сгенерируйте код С из модели Simulink
Этот пример использование:
Simulink ® Coder™ генерирует автономный C и Код С++ из моделей Simulink для развертывания в большом разнообразии приложений.
Откройте модель
Модель ex_codegen_dsp реализует простой адаптивный фильтр, чтобы удалить шум из сигнала, одновременно идентифицируя фильтр, который характеризует шумовое содержимое частоты. Чтобы открыть эту модель, введите следующую команду в подсказку команды MATLAB:
Можно альтернативно создать модель с помощью шаблона DSP System. Для получения дополнительной информации смотрите, Конфигурируют окружение Simulink для Моделей Обработки сигналов.
Сконфигурируйте модель для генерации кода
Подготовьте модель к генерации кода путем определения настроек генерации кода в диалоговом окне Configuration Parameters. Выберите соответствующий решатель и цель генерации кода, и проверяйте настройку модели на эффективность выполнения. Для получения дополнительной информации на каждом из этих шагов, смотрите, Генерируют код С для Модели (Simulink Coder).
Моделируйте модель
Моделируйте модель. Осциллограф Времени показывает вход и отфильтровал характеристики сигнала.
График Массивов показывает последние 32 веса фильтра, к которым фильтр LMS эффективно адаптировался и отфильтровал шум от сигнала.
К этим коэффициентам можно также получить доступ с помощью следующей команды:
Сгенерируйте код из модели
Прежде чем вы сгенерируете код из модели, необходимо сначала гарантировать, что у вас есть разрешение записи в вашей текущей папке.
Чтобы сгенерировать код, необходимо внести следующие изменения:
Откройте диалоговое окно модели Configuration Parameters, перейдите к вкладке Code Generation, и установите флажок Generate code only и нажмите Apply.
После того, как модель закончила генерировать код, Code Generation Report появляется, позволяя вам осмотреть сгенерированный код. Обратите внимание на то, что процесс сборки создает новую подпапку под названием ex_codegen_dsp_grt_rtw в вашем текущем MATLAB рабочая папка. Эта подпапка содержит все файлы, созданные процессом генерации кода, включая тех, которые содержат сгенерированный исходный код C. Для получения дополнительной информации о просмотре сгенерированного кода смотрите, Генерируют код С для Модели (Simulink Coder).
Создание и запуск сгенерированного кода
Настройте Компилятор C/C++
Чтобы создать исполняемый файл, необходимо настроить поддерживаемый компилятор C. Для списка компиляторов, поддержанных в текущем релизе, см. Поддерживаемые и Совместимые Компиляторы.
Чтобы настроить ваш компилятор, запустите следующую команду в подсказке команды MATLAB:
Создайте сгенерированный код
После того, как ваш компилятор является настройкой, можно создать и запустить скомпилированный код. ex_codegen_dsp модель в настоящее время сконфигурирована, чтобы сгенерировать код только. Чтобы создать сгенерированный код, необходимо сначала внести следующие изменения:
Откройте диалоговое окно модели Configuration Parameters, перейдите к вкладке Code Generation и снимите флажок Generate Code Only.
Нажмите OK, чтобы применить ваши изменения и закрыть диалоговое окно.
Запустите сгенерированный код
Чтобы запустить сгенерированный код, введите следующую команду в подсказку команды MATLAB:
Можно теперь сравнить переменные из сгенерированного кода с переменными из симуляции модели. Чтобы получить доступ к последнему набору коэффициентов от сгенерированного кода, введите следующее в посдказку MATLAB:
Для получения дополнительной информации при создании и выполнении исполняемого файла, смотрите Создание и запуск Исполняемого файла (Simulink Coder).
Переместите код к другой среде разработки
Если вы генерируете код из своей модели Simulink, можно переместить код к другой среде разработки с помощью утилиты упаковывать-и-идти. Используйте эту утилиту, когда среда разработки не будет иметь продукты Simulink и MATLAB.
Можно группировать код или использованием пользовательского интерфейса или при помощи интерфейса командной строки. Интерфейс командной строки обеспечивает больше управления деталями упаковки кода. Для получения дополнительной информации о каждом из этих методов смотрите, Перемещают Код к Другой Среде разработки (Simulink Coder).
Для примера о том, как группировать код С и исполняемый файл, сгенерированный от этого примера, смотрите, Перемещают Код, Сгенерированный от Модели Simulink до Другой Среды разработки.
Документация
Вызовите и интегрируйте внешние алгоритмы C в Simulink
Вызовите функции от внешнего кода С и настройте код для своих моделей Simulink.
Предварительно обработайте данные, чтобы вызвать функцию C и постобработать данные после вызывания функции.
Задайте различный код для симуляции и генерации кода.
Вызовите несколько функций.
Инициализируйте и работайте с персистентными данными, кэшируемыми в блоке.
Выделите и освободите память.
Запишите внешние исходные файлы
Начните путем создания внешних исходных файлов.
Введите внешний код в Simulink
Задайте исходный файл под Additional build information> Source files.
Примечание
Чтобы использовать блок C Function в Для Каждой подсистемы или со временем непрерывной выборки или оптимизировать использование блока в условном входном выполнении ветви, все функции пользовательского кода, вызванные блоком, должны быть детерминированы, то есть, всегда производя те же выходные параметры для тех же входных параметров. Идентифицируйте, какие функции пользовательского кода детерминированы при помощи Deterministic functions и параметров Specify by function в панели Simulation target. Если блок ссылается на какие-либо глобальные переменные пользовательского кода, то Deterministic functions должен установить на All для блока, который будет использоваться в Для Каждой подсистемы в условном входном выполнении ветви, или со временем непрерывной выборки.
Для примера, показывающего блок C Function в Для Каждой подсистемы, смотрите блок C Function Использования В Для Каждой Подсистемы.
Нажмите OK, чтобы закрыть Параметры конфигурации.
В панели Output Code диалогового окна параметров блоков C Function запишите код, который блок выполняет в процессе моделирования. В этом примере внешняя функция C вычисляет сумму. В панели Output Code запишите код, который вызывает data_array.c функция, чтобы вычислить сумму, затем вычисляет среднее значение.
Можно задать код, который запускается в начале симуляции и в конце симуляции в панелях Terminate Code и Start Code.
Используйте таблицу Symbols, чтобы задать символы, используемые во внешнем коде С. Добавьте или удалите символ с помощью кнопок Add и Delete. Задайте все символы, используемые в Output Code, Start Code и панелях Terminate Code, чтобы гарантировать тот, порты отображаются правильно.
В таблице Symbols задайте следующее.
Имя Имя символа в исходном коде.
Осциллограф Осциллограф символов и порядка, в котором они появляются. Можно изменить осциллограф символа в любое время.
Используйте InputOutput определите объем, чтобы сопоставить вход, переданный указателем в вашем коде С. Порты создали использование InputOutput осциллограф имеет то же имя для портов ввода и вывода. InputOutput осциллограф включает повторное использование буфера для портов ввода и вывода. Многократное использование буфера может оптимизировать использование памяти и улучшить симуляцию кода и КПД генерации кода, в зависимости от размера сигнала и блочного расположения. Ограничения включают:
InputOutput символ не может использоваться в Start и Terminate код.
InputOutput порт не поддерживает void* тип данных.
InputOutput порт не поддерживает size() выражения.
Persistent — Задайте символ как персистентные данные.
Constant — Задайте символ как постоянный размер значения использования или числовые выражения.
Parameter — Задайте символ как параметр. Название параметра задано Label символа.
Ввод Тип данных символа. Выберите тип данных из выпадающего списка или задайте пользовательский тип данных.
Порт Для символов ввода и вывода, Port указывает на индекс порта на блоке данных о символе. Для символов параметра, Port указывает на порядок, что символ появляется в маске параметров блоков.
Закройте диалоговое окно параметров блоков. После заполнения данных в таблице блок C Function теперь имеет один входной порт и два выходных порта с метками, заданными в таблице.
Вызовите библиотечные функции C от блока C Function
Можно вызвать это подмножество Математических Библиотечных функций C от блока C Function :
abs | acos | asin | atan | atan2 | ceil |
cos | cosh | exp | fabs | floor | fmod |
labs | ldexp | log | log10 | pow | sin |
sinh | sqrt | tan | tanh |
Когда вы вызываете эти функции, двойная точность применяется, если все входные параметры не являются явным образом одинарной точностью. Когда несоответствие типов происходит, бросок входных параметров к ожидаемому типу заменяет исходные аргументы. Например, если вы вызываете sin функция с целочисленным аргументом, броском входного параметра к числу с плавающей запятой типа double заменяет исходный аргумент.
Если вы хотите вызвать другие библиотечные функции C, которые не упоминаются выше, создают внешнюю функцию обертки, которая вызывает библиотечную функцию C.
Заменяющая библиотека кода (CRL) на основе типа
Вызов функции должен вызвать правильный CRL на основе типа данных, переданных в функцию. Если никакой CRL не задан, вызов функции должен вызвать к специфичной для типа библиотеке. CRL для C99 генерирует специфичную для типа функцию. Например:
Введите передал в | Вызов генерации кода |
---|---|
sin(doubleIn) | sin(doubleIn) |
sin(floatIn) | sinf(floatIn) |