#matlab #printf #simulink #mex
#matlab #printf #simulink #mex
Вопрос:
У меня есть s-функция в файле mySFun.c, которая вызывает функцию foo (), которая реализована в отдельном файле myFoo.c. Когда я пишу инструкции printf внутри функции mdlOutput в mySFun.c, они работают нормально. Но когда я помещаю printf внутри функции foo() в myFoo.c, они не отображают свои выходные данные в окне командной строки.
Как я могу включить функциональность printf, когда printf находится внутри другого файла, который вызывается из s-функции?
Ответ №1:
Единственный официальный способ записи в консоль MATLAB из MEX-функции — это через функцию mexPrintf. Однако заголовочный файл mex.h содержит эту строку:
#define printf mexPrintf
И simstruct.h включает mex.h. Я подозреваю, что вы включаете simstruct.h из mySFun.c, но не из myFoo.c. Вы можете либо включить simstruct.h или mex.h также в другие ваши исходные файлы (чтобы подобрать там #define), либо переключиться на прямой вызов mexPrintf.
Комментарии:
1. Это правильно! Поскольку я также должен иметь возможность использовать myFoo.c в отдельном проекте C (где simstruct.h недоступен) Я должен сделать это следующим образом: #ifdef MATLAB_MEX_FILE включает simstruct.h #endif
Ответ №2:
printf — это файл библиотеки C, и поэтому вам не нужно создавать свой :). вместо этого вы должны вставить myFoo .h в файле mySFun.h, если вы будете вызывать его функцию foo().
Комментарии:
1. К сожалению, я не могу этого сделать, потому что алгоритм должен находиться в отдельном файле c (не файле заголовка) из-за других ограничений.