Снижает ли этот метод время компиляции в реальном времени в MATLAB? - PullRequest
6 голосов
/ 10 августа 2011

Мое рабочее место использует MATLAB и вспомогательные продукты Simulink, семинар в реальном времени (RTW), RTW Embedded Coder.У нас есть большая модель Simulink, которая компилируется в C, а затем в объектный файл для загрузки во встроенную цель.Весь процесс компиляции занимает ~ 3 часа, что довольно долго, в основном это компиляция и компоновка файлов C, полученных из модели simulink.

Удаление одной конкретной подсистемы сокращает время компиляции до 30 минут, и, поскольку эта подсистемане часто меняется, я планирую кодировать это в C, а затем в MEX и использовать MEX-файл в основной модели.

Сократит ли метод время компиляции?Есть ли другой метод, который я должен изучить?

РЕДАКТИРОВАТЬ: Я думаю, что решение будет примерно: генерировать C из неисправной подсистемы. Скомпилировать это в какой-то объект, библиотека.я не заинтересован в симуляции, он имеет только входные данные) Включите это в процесс сборки, предположительно связывая после компиляции остальной части кода

Ответы [ 2 ]

3 голосов
/ 12 августа 2011

Вы можете попытаться поместить подсистему-нарушителя в другую модель и использовать ссылку на модель. Вы можете преобразовать подсистему в блок модели, используя Simulink.SubSystem.convertToModelReference .

Ссылка на модель имеет пошаговую генерацию кода, поэтому, пока модель не меняется, Simulink не будет перегенерировать или перекомпилировать код для указанной модели.

0 голосов
/ 11 августа 2011

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

Если вы создаете мекс-файл (S-функцию) из этой подсистемы, вы можете выбрать встроенную S-функцию или не встроенную . Если подсистема, которую вы конвертируете, не является тривиальной (и я предполагаю, что это не так), вы захотите выбрать первый вариант, так как последний строго ограничен. Однако в обоих случаях ваш компилятор C по-прежнему будет иметь исходные файлы для компиляции. В встроенном случае это будут исходные файлы, которые выкладывает TLC, которые вы написали, а в другом случае это будут исходные файлы, которые вы скомпилировали для создания самой S-функции.

Решение, которое я могу придумать, состоит в том, чтобы дублировать функциональные возможности подсистемы-нарушителя в C и использовать компилятор встроенной цели для создания статической библиотеки. Кроме того, создайте встроенную S-функцию, которая имитирует эту подсистему в симуляции. В файле TLC для этой S-функции вы просто попросите Simulink включить соответствующий заголовочный файл для статической библиотеки, а затем выполните вызовы функций, которые ссылаются на библиотеку. Это избавляет компилятор от необходимости перекомпилировать исходный код во время каждой сборки модели.

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

...