Simulink Coder, добавьте внешние библиотеки C, размещенные вне рабочего каталога

Следующая проблема: я использую Simulink Coder, Arduino Due и плату расширения собственной разработки для управления мультикоптерами. У меня есть модель Simulink со всеми драйверами устройств (созданными с помощью s-function builder) для взаимодействия с датчиками. У каждого датчика есть собственная библиотека C ++, которая включена в s-функцию. Все файлы C ++ и заголовочные файлы в настоящее время находятся в рабочем каталоге Matlab.

Нет, у меня так много блоков драйверов устройств, что я создал собственную библиотеку блоков Simulink, чтобы делиться и использовать эти блоки в нескольких моделях Simulink. Однако, если я использую блоки из моей библиотеки Simulink, компилятор выдает ошибку, потому что он не может найти файлы c ++ и заголовки, поскольку они находятся не в текущем рабочем каталоге, а в каталоге библиотеки Simulink. Однако библиотека блоков Simulink и все внешние библиотеки C ++ включены в путь поиска Matlab (заданный путь).

Так кто-нибудь знает, как включить внешние библиотеки C ++, когда они вызываются из s-функции в библиотеке блоков Simulink?

Я уже пробовал следующие шаги:

  • Я попытался включить c ++ и заголовочные файлы с помощью следующей команды matlab (не работает): set_param ('SimulinkModelName', 'CustomSource', "LibraryName");
  • Скопируйте c ++ и заголовочные файлы в каталог библиотек c ++ пакета поддержки Arduino Simulink (не работает).
  • Скопируйте все файлы c ++ и заголовков в каталог текущей модели Simulink (работает, однако я не хочу копировать все файлы каждый раз, когда создается новая модель simulink)

У кого-нибудь были подобные проблемы до сих пор?


person Community    schedule 10.02.2016    source источник


Ответы (1)


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

Включите пользовательскую библиотеку с параметрами для всей модели:

set_param(‘model’, 'CustomSource', [‘source.cpp’ ‘ source2.cpp’ ‘ ’ ’sourceN.cpp’]);

Это необходимо сделать для каждой модели Simulink, поэтому она не идеальна для совместного использования с другими пользователями.

Правильный способ сделать это - создать файл rtwmakecfg.m и поместить его в папку библиотеки. Внутри файла rtwmakecfg.m можно указать путь к пользовательскому исходному файлу и файлам заголовков. Это гарантирует, что любая модель, использующая мои s-функциональные блоки, будет связываться с необходимыми пользовательскими библиотеками.

Ссылка на решение:

http://www.mathworks.com/matlabcentral/answers/57863-handle-the-external-reference-in-the-dll-generation-tlc-files

person Community    schedule 22.02.2016