рд╕рд┐рдорд┐рд▓рд┐рдВрдХ рд╕реЗ рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдмреБрд▓рд╛рдУ

рд╣рд╛рдп, рд╣реЗрдмреНрд░!
рдореИрдВ рд╕рд┐рдореБрд▓рд┐рдВрдХ рдореЗрдВ рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдкрд░ рдЕрдкрдиреЗ рд╕рд╣рдпреЛрдЧреА рдорд┐рдЦрд╛рдЗрд▓ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдЖрдкрдХреЗ рд╕рд╛рдордиреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕реЗ рдЖрдЦрд┐рд░ рдХреНрдпреЛрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдХрдИ рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рд╡рд┐рд░рд╛рд╕рдд рдореЙрдбрд▓ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╕реЗ рдЕрдХреНрд╕рд░ рд╕рд╡рд╛рд▓ рдкреВрдЫреЗ рдЬрд╛рддреЗ рд╣реИрдВ: тАЬрдореИрдВ рд╕рд┐рдореБрд▓рд┐рдВрдХ рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдХреЛ рдХреИрд╕реЗ рдПрдХреАрдХреГрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдФрд░ рдЕрдЧрд░ рдореЗрд░реА рд╡рд┐рд░рд╛рд╕рдд рдПрдХ DLL рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ? " рдЗрд╕рд▓рд┐рдП, рдореВрд▓ рд▓реЗрдЦ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред
рдмрд┐рд▓реНрд▓реА рдХреЗ рддрд╣рдд, рд╕рд┐рдореБрд▓рд┐рдВрдХ рдореЗрдВ рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рддреА рд╣реИред

рдХреЛрдб рдХреЗ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рдорд┐рдЦрд╛рдЗрд▓ рдХреА рдЕрдиреБрдорддрд┐ рдХреЗ рд╕рд╛рде рдХрд┐рдП рдЧрдП рдереЗ рдФрд░ рд▓реЗрдЦ рдХреЛ рдЕрдзрд┐рднрд╛рд░ рдирд╣реАрдВ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдпрд╣ рд▓реЗрдЦ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рдореБрд▓рд┐рдВрдХ рдореЙрдбрд▓ рдореЗрдВ рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред
рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдореЗрдВ рд╕рд┐рдореНрдмрд┐рдВрдХ рдореЗрдВ рдПрдХреНрд╕рд▓рд┐рдм рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдХреЛрдб exlib.c рдФрд░ exlib.h рдХреЗ рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рд╕рдорд╛рд╣рд┐рдд рд╣реИ ред рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬрд┐рд╕рдореЗрдВ рддреАрди рдХрд╛рд░реНрдп рд╣реИрдВ:
рд╢реВрдиреНрдп exlib_init (рд╢реВрдиреНрдп) - рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рддрд╛ рд╣реИред
void exlib_print (рдлреНрд▓реЛрдЯ рдбреЗрдЯрд╛) - рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рд▓рд┐рдЦрддрд╛ рд╣реИред
рд╢реВрдиреНрдп exlib_term (рд╢реВрдиреНрдп) - рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрдВрдж рдХрд░рддрд╛ рд╣реИред

рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рднрд╛


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВред
рдпрд╣ рдХрджрдо рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкреНрд░реА-рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рддреБрд░рдВрдд рдЪрд░рдг 3 рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рд╕реЗ .d рдлрд╝рд╛рдЗрд▓ (рдпрд╛ред Linux рдХреЗ рд▓рд┐рдП .so) рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ (.h) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреА рд╣реЛрдЧреАред рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ .lib рдлрд╝рд╛рдЗрд▓ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬреЛ рдПрдХ рд╕реНрдерд┐рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рддрдерд╛рдХрдерд┐рдд рдЖрдпрд╛рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд▓рд┐рдВрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрдпрд╛рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо MATLAB рдореЗрдХреНрд╕рд┐рдХреЛ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп (рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдПрдХреНрд╕рд▓рд┐рдмреЛрдбрд▓ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдПрдХреНрд╕рд▓рд┐рдм) рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рд╕рдХреНрд░рд┐рдп рд╣реЛрд╕реНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдХрдорд╛рдВрдб рдХреЛ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
mex -setup


рдПрдХ рд╕рдорд░реНрдерд┐рдд рд╕рдВрдХрд▓рдХ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ред
рдЕрдм рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдХреНрд╕рд┐рдХреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб
mingw = strfind(mex.getCompilerConfigurations('C','Selected').Name,'MinGW64 Compiler');
if isunix
    % GCC
    mex('LDEXT=.so','LINKEXPORT=','LINKEXPORTVER=','LINKLIBS=','exlib.c');
elseif mingw
    % MinGW builds static shared library, so dll and lib files are the same
    % loadlibrary uses the dll file, while legacy code tool looks for the lib file
    mex('LDEXT=.lib','LINKEXPORT=','LINKEXPORTVER=','LINKLIBS=','exlib.c');
    mex('LDEXT=.dll','LINKEXPORT=','LINKEXPORTVER=','LINKLIBS=','exlib.c');
else
    % Visual
    mex('LDEXT=.dll','LINKEXPORT=','LINKEXPORTVER=','CMDLINE300="del exlib.exp exlib.dll.manifest"','exlib.c');
end
Building with 'gcc'.
MEX completed successfully.



рд╕рдВрдХрд▓рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛


рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ MATLAB рдореЗрдВ рд▓реЛрдб рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдХреЛрдб
% Load the library
[~,~] = loadlibrary(['exlib',system_dependent('GetSharedLibExt')],'exlib.h');
% Display functions available in the library
libfunctionsview('exlib');
% Initialize
calllib('exlib','exlib_init');
% Step
for i = 1:10
    calllib('exlib','exlib_print',single(i));
end
% Terminate
calllib('exlib','exlib_term');
% Unload the library
unloadlibrary('exlib');
% Show contents of generated file
type('exlib.txt');
0.000000
1.000000
2.000000
3.000000
4.000000
5.000000
6.000000
7.000000
8.000000
9.000000
10.000000


рдЕрдм рдЬрдм рд╣рдордиреЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рд╕рд┐рдореБрд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде!

рдПрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░рдирд╛


рдПрд╕-рдлрд╝рдВрдХреНрд╢рди рдЖрдкрдХреЛ рд╕рд┐рдореБрд▓рд┐рдВрдХ рдореЗрдВ рд╕реА-рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЙрд╕рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрд┐рд╕реА рднреА рд╕реА рдХреЛрдб рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдлрд┐рд░, рдЗрд╕ рдХреЛрдб рдХреЛ рдПрдХ рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рд╕рд┐рдореБрд▓рд┐рдВрдХ рджреНрд╡рд╛рд░рд╛ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реИ рдФрд░ рдПрдХ рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдЗрд╕ рдмрд╛рдЗрдирд░реА рдХреЛ рдПрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред Simulink рдореЗрдВ рдЗрд╕ S рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреНрд▓реЙрдХ рд╣реИред рд╕рд┐рдореБрд▓рд┐рдВрдХ рдореЗрдВ рдПрд╕-рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВред

рд▓рд┐рдЧреЗрд╕реА рдХреЛрдб рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдкрд╣рд▓рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ, рд▓рд┐рдЧреЗрд╕реА рдХреЛрдб рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ , рдПрдХ рдЙрдкрдХрд░рдг рдЬреЛ рдЖрдкрдХреЛ MATLAB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдИ рдЧрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрд╕-рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдПрд╕-рдлрд╝рдВрдХреНрд╢рди рдЖрдпрд╛рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ (рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рд╣рдореЗрдВ рдЗрд╕реА * .рд▓рд┐рдм рдлрд╝рд╛рдЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд▓рд┐рдВрдХрд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рд▓рд┐рдЧреЗрд╕реА рдХреЛрдб рдЯреВрд▓ рдХреЗ рд▓рд┐рдП рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
рд▓рд┐рдЧреЗрд╕реА рдХреЛрдб рдЯреВрд▓ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб
specs = legacy_code('initialize');
% Prototype for the initialization function
specs.StartFcnSpec = 'exlib_init()';
% Prototype for the step function
specs.OutputFcnSpec = 'exlib_print(single u1)';
% Prototype for the terminate function
specs.TerminateFcnSpec = 'exlib_term()';
% Shared library to link with (.so on Linux and .dll on Windows)
specs.HostLibFiles = {['exlib',strrep(system_dependent('GetSharedLibExt'),'.dll','.lib')]};
% We must supply header file when linking with shared library, otherwise
% compiler might make wrong assumptions about function's prototype.
specs.HeaderFiles = {'exlib.h'};
specs.SFunctionName = 'sfun_exlib';



рдПрдХ рдПрд╕-рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ, рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ рдФрд░ рд▓рд┐рдВрдХ рдХрд░реЗрдВ:
legacy_code('generate_for_sim',specs);
### Start Compiling sfun_exlib
    mex('sfun_exlib.c', '-I/tmp/simulink_shrlib_fex', '/tmp/simulink_shrlib_fex/exlib.so')
Building with 'gcc'.
MEX completed successfully.
### Finish Compiling sfun_exlib
### Exit


рдЕрдВрдд рдореЗрдВ, Simulink рдмреНрд▓реЙрдХ рдмрдирд╛рдПрдВ:
legacy_code('slblock_generate',specs);


рд╕рд┐рдореБрд▓реЗрд╢рди рдЪрд▓рд╛рдПрдВ:
open_system('simlib_test');
snapnow;
sim('simlib_test');
% Observe the results:
type('exlib.txt');
0.000000
1.000000
2.000000
3.000000
4.000000
5.000000
6.000000
7.000000
8.000000
9.000000
10.000000


рд▓реЗрдЦрди рдПрд╕ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ


рджреВрд╕рд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдПрд╕-рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реНрдкрд╖реНрдЯ рд▓рд┐рдВрдХрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕реЗ рд░рдирдЯрд╛рдЗрдо рд▓рд┐рдВрдХрд┐рдВрдЧ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╕рдорд╛рдзрд╛рди рдПрд╕-рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдХрд┐ рд╡рд┐рд░рд╛рд╕рдд рдХреЛрдб рдЯреВрд▓ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, mdlStart , mdlOutputs рдФрд░ mdlTerminate рдлрд╝рдВрдХреНрд╢рди рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ ред
рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпреЗ рдХрд╛рд░реНрдп рдХреИрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ:
рдХреЛрдб рджреЗрдЦреЗрдВ
void mdlStart(SimStruct *S)
{
  /*
   * Load the dynamic library
   */

  #if defined(__GNUC__) && !defined(__MINGW32__)
    void (*exlib_init_ptr)(void);
    dllHandle = dlopen("./exlib.so",RTLD_LAZY);
    exlib_init_ptr = dlsym(dllHandle, "exlib_init");
  #else
    exlib_init_type exlib_init_ptr = NULL;
    dllHandle = LoadLibrary("exlib.dll");
    exlib_init_ptr = (exlib_init_type)GetProcAddress(dllHandle,"exlib_init");
  #endif

  exlib_init_ptr();
}


void mdlOutputs(SimStruct *S, int_T tid)
{
  real32_T *u1 = 0;

  #if defined(__GNUC__) && !defined(__MINGW32__)
    void (*exlib_print_ptr)(float);
    exlib_print_ptr = dlsym(dllHandle,"exlib_print");
  #else
    exlib_print_type exlib_print_ptr = NULL;
    exlib_print_ptr = (exlib_print_type)GetProcAddress(dllHandle,"exlib_print");
  #endif

  /*
   * Get access to Parameter/Input/Output/DWork/size information
   */
  u1 = (real32_T *) ssGetInputPortSignal(S, 0);

  /*
   * Call the function from library
   */
  exlib_print_ptr( *u1);
}


void mdlTerminate(SimStruct *S)
{
  /*
   * Unload the dynamic library
   */

  #if defined(__GNUC__) && !defined(__MINGW32__)
    void (*exlib_term_ptr)(void);
    exlib_term_ptr = dlsym(dllHandle,"exlib_term");
    exlib_term_ptr();
    dlclose(dllHandle);
  #else
    exlib_term_type exlib_term_ptr = NULL;
    exlib_term_ptr = (exlib_term_type)GetProcAddress(dllHandle,"exlib_term");
    exlib_term_ptr();
    FreeLibrary(dllHandle);
  #endif
}



рдкрд░рд┐рдгрд╛рдореА S- рдлрд╝рдВрдХреНрд╢рди рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ:
if isunix
    mex('sfun_exlib_dyn.c','-ldl');
else
    mex('sfun_exlib_dyn.c');
end
Building with 'gcc'.
MEX completed successfully.


рдФрд░ рд╕рд┐рдореБрд▓реЗрд╢рди рдЪрд▓рд╛рдПрдВ:
open_system('simlib_test_dyn');
sim('simlib_test_dyn');
% Observe the results:
type('exlib.txt');
0.000000
1.000000
2.000000
3.000000
4.000000
5.000000
6.000000
7.000000
8.000000
9.000000
10.000000


рдПрд╕-рдлрдВрдХреНрд╢рди рдмрд┐рд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдПрдХ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрд╕-рдлрдВрдХреНрд╢рди рдмрд┐рд▓реНрдбрд░ рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ ред рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЗрдХрд╛рдИ рд╣реИ рдЬрд┐рд╕реЗ рд▓рд┐рдЧреЗрд╕реА рдХреЛрдб рдЯреВрд▓ рдФрд░ рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣рд╛рде рд╕реЗ рд▓рд┐рдЦреЗ рдПрд╕-рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмреАрдЪ рдПрдХ рдХреНрд░реЙрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрд╕-рдлрдВрдХреНрд╢рди рдмрд┐рд▓реНрдбрд░ рдПрдХ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдПрд╕-рдлрд╝рдВрдХреНрд╢рди рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрд╕-рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрд╕-рдлрдВрдХреНрд╢рди рдмрд┐рд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдкреНрд░рджрд░реНрд╢рди рд╕реАрдорд╛рдПрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдпрд╣ рдПрд╕-рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдкреНрд░рдЪрд▓рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕реА рдлрд╝рдВрдХреНрд╢рди рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИ, рдЬреЛ рдЖрд░ 2020 рдП рдХреА рд░рд┐рд▓реАрдЬ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред

MATLAB рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд╛рдЭрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


MATLAB рдлрд╝рдВрдХреНрд╢рди рдмреНрд▓реЙрдХ рдЖрдкрдХреЛ Simulink рдореЗрдВ рдПрдХ рдХрд╕реНрдЯрдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП MATLAB рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
MATLAB рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╕рд╛рдЭрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, coder.ceval рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ , рдЬреЛ рдХреЗрд╡рд▓ MATLAB рдлрд╝рдВрдХреНрд╢рди (рдФрд░ MATLAB) рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Coder.ceval рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП MATLAB рдХреЛрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рд╕рд╛рдЭрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ MATLAB рдлрд╝рдВрдХреНрд╢рди рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдХреЛрдб:
рдХреЛрдб рджреЗрдЦреЗрдВ
function fcn(u)
%#codegen

% Keep track of initialization and runtime count
persistent runTimeCnt

% Generate library path on the fly (current directory in this case)
coder.extrinsic('pwd','system_dependent');
libpath = coder.const(pwd);
% Shared library to link with
libname = coder.const(['exlib',strrep(system_dependent('GetSharedLibExt'),'.dll','.lib')]);
% Add the external library. Mark it as precompiled, so it won't appear as
% makefile target during code generation.
coder.updateBuildInfo('addLinkObjects',libname,libpath,1000,true,true);
coder.updateBuildInfo('addIncludePaths',libpath);
coder.cinclude('exlib.h');

if isempty(runTimeCnt)
    % Initialize
    coder.ceval('exlib_init');
    runTimeCnt = 0;
end
% Step
coder.ceval('exlib_print',single(u));
runTimeCnt = runTimeCnt+1;
% Terminate on the 10th step
if (runTimeCnt == 11)
    coder.ceval('exlib_term');
end



рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдПрдХ рдЦрд╛рдореА рд╣реИ - рд╕рд┐рдореБрд▓реЗрд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ рдкреВрд░реНрдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рдХреА рдХрдореА (MATLAB рд╕рд┐рд╕реНрдЯрдо рдмреНрд▓реЙрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ)ред
рдЖрдк exlib_term () рд╕реЗрдЯ рдХрд░рдХреЗ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рд╢реНрд░реЗрдгреА рд╕рд┐рдореБрд▓реЗрд╢рди рдореЗрдВ рдореЙрдбрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд▓рдХреНрд╖реНрдп -> тАЛтАЛрдХрд╕реНрдЯрдо рдХреЛрдб -> рдХрд╛рд░реНрдп рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ ред

рдзреНрдпрд╛рди рджреЗрдВ ред рдпрджрд┐ "рдЖрдпрд╛рдд рдХрд╕реНрдЯрдо рдХреЛрдб" рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдореЙрдбрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ "рд╕рд┐рдореБрд▓реЗрд╢рди рд▓рдХреНрд╖реНрдп" рдкреИрдирд▓ рдореЗрдВ рд╕рднреА рдХреЛрдб рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреЛрдбрд░.рд╕реБрдХреНрд▓ рдФрд░ рдХреЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ редupdateBuildInfo )ред рдпрджрд┐ рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рд╕рд┐рдореБрд▓реЗрд╢рди рд▓рдХреНрд╖реНрдп, рдХреЛрдбрд░.рдЗрдирдХрд╛рдЙрдВрдЯрд░ рдФрд░ рдХреЛрдбрд░ .updateBuildInfo рд╕реЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред


рдПрдХ рдЕрдиреНрдп рддрд░реАрдХрд╛ рдирд┐рд░реНрднрд░рддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИрдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ , coder.cinclude рдФрд░ coder.updateBuildInfo , рдФрд░ рд╕рдореНрдореЗрд▓рди рджреНрд╡рд╛рд░рд╛ exlib_term () рдХреЙрд▓ рдХрд░реЗрдВ ред
рд╕рд┐рдореБрд▓реЗрд╢рди рдЪрд▓рд╛рдПрдВ:
open_system('simlib_test_mlf');
sim('simlib_test_mlf');
% Observe the results:
type('exlib.txt');
0.000000
1.000000
2.000000
3.000000
4.000000
5.000000
6.000000
7.000000
8.000000
9.000000
10.000000


рд╕реНрдЯреЗрдЯрдлреНрд▓реЛ рд╕реЗ рдПрдХ рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЖрд╣реНрд╡рд╛рди


рдпрджрд┐ рдЖрдк рд╕реНрдЯреЗрдЯрдлреНрд▓реЛ рдЖрд░реЗрдЦреЛрдВ рдореЗрдВ рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ , рддреЛ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реАрдзреЗ рд╕реНрдЯреЗрдЯрдлреНрд▓реЛ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реНрдЯреЗрдЯрдлреНрд▓реЛ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдореЗрдВ рдРрд╕реЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред
рд╕реНрдЯреЗрдЯрдлреНрд▓реЛ рдореЗрдВ рдПрдХ рдмрд╛рд╣рд░реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ - рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рд╕реНрдЯреЗрдЯрдлреНрд▓реЛ рдЖрд░реЗрдЦ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдореЙрдбрд▓ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕реНрдЯреЗрдЯрдлреНрд▓реЛ рдХреЛ рдкрддрд╛ рдЪрд▓реЗ рдХрд┐ рдЗрди рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд╣рд╛рдВ рджреЗрдЦрдирд╛ рд╣реИред рд╕рд┐рдореБрд▓реЗрд╢рди рд▓рдХреНрд╖реНрдп -> тАЛтАЛрдХрд╕реНрдЯрдо рдХреЛрдб -> рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ , рдЖрдкрдХреЛ exlib.lib (рдпрд╛ рд▓рд┐рдирдХреНрд╕ рдореЗрдВ exlib.so) рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред рдореЗрдВ рд╕рд┐рдореБрд▓реЗрд╢рди рд▓рдХреНрд╖реНрдп -> рдХрд╕реНрдЯрдо рдХреЛрдб -> рд╣реИрдбрд░ рдлрд╝рд╛рдЗрд▓ рдЖрдк рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ #include "exlib.h" ред рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдПрдЯреАрд╕рд┐рдореБрд▓реЗрд╢рди рд▓рдХреНрд╖реНрдп -> тАЛтАЛрдХрд╕реНрдЯрдо рдХреЛрдб -> рд╕рдорд╛рдкреНрдд рд╕рдорд╛рд░реЛрд╣ рдХреЛ exlib_term () рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ; ред
рд╕рд┐рдореБрд▓реЗрд╢рди рдЪрд▓рд╛рдПрдВ:
if isunix
    set_param('simlib_test_sf','SimUserLibraries','exlib.so');
end
sim('simlib_test_sf');
% Observe the results:
type('exlib.txt');
0.000000
1.000000
2.000000
3.000000
4.000000
5.000000
6.000000
7.000000
8.000000
9.000000
10.000000


рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдЦрдВрдб рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕реНрдЯреЗрдЯрдлрд╝реНрд▓реЛ рдЖрд░реЗрдЦреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╕реА рдХреНрд░рд┐рдпрд╛ рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ред рдпрджрд┐ рд╕реНрдЯреЗрдЯрдлреНрд▓реЛ рдЖрд░реЗрдЦ MATLAB рдПрдХреНрд╢рди рд▓реИрдВрдЧреНрд╡реЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ , рддреЛ Coder.ceval рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ , рдЬреИрд╕рд╛ рдХрд┐ MATLAB рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИред

MATLAB рд╕рд┐рд╕реНрдЯрдо рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд╛рдЭрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рдирд╛


MATLAB рд╕рд┐рд╕реНрдЯрдо рдмреНрд▓реЙрдХ рдЖрдкрдХреЛ Simulink рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдмреНрд▓реЙрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред
рд╕рд┐рд╕реНрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди R2013b рдХреА рд░рд┐рд▓реАрдЬ рдореЗрдВ рд╕рд┐рдореБрд▓рд┐рдВрдХ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рд╕рд┐рд╕реНрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЖрд░рдВрднреАрдХрд░рдг, рд╕рд┐рдореБрд▓реЗрд╢рди рдФрд░ рдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд┐рд╕реНрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ MATLAB рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЪрд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреВрд░реНрд╡ рдФрд░ рдмрд╛рдж рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП - рд╕рднреА рдмрд┐рдирд╛ C рдХреЛрдб рд▓рд┐рдЦреЗред
рдпрд╣рд╛рдБ MATLAB рд╕рд┐рд╕реНрдЯрдо рдмреНрд▓реЙрдХ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рд╕рд┐рд╕реНрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
рд╕рд┐рд╕реНрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛрдб
classdef exlib < matlab.System
    % Call exlib shared library
    %
    % This example shows how to call shared library from Simulink using
    % MATLAB System block.
    properties (Nontunable,Access=private)
        libName = exlib.getLibName;
        libPath = pwd;
        libHeader = 'exlib.h';
    end
    
    methods (Static)
        function libName = getLibName
            if isunix
                libName = 'exlib.so';
            else
                libName = 'exlib.lib';
            end
        end
    end
    
    methods (Access=protected)
        function setupImpl(obj, ~)
            % Initialize.
            coder.updateBuildInfo('addLinkObjects',obj.libName,obj.libPath,1000,true,true);
            coder.updateBuildInfo('addIncludePaths',obj.libPath);
            coder.cinclude(obj.libHeader);
            coder.ceval('exlib_init');
        end
        
        function stepImpl(~, u)
            % Step.
            coder.ceval('exlib_print',u);
        end
        
        function releaseImpl(~)
            % Terminate.
            coder.ceval('exlib_term');
        end
    end
end



рд╕рд┐рдореБрд▓реЗрд╢рди рдЪрд▓рд╛рдПрдВ:
open_system('simlib_test_mls');
sim('simlib_test_mls');
% Observe the results:
type('exlib.txt');
0.000000
1.000000
2.000000
3.000000
4.000000
5.000000
6.000000
7.000000
8.000000
9.000000
10.000000


C рдХреЙрд▓рд░ рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдЭрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ


рд╕реА рдХреЙрд▓рд░ рдмреНрд▓реЙрдХ рдЖрдкрдХреЛ рд╕рд┐рдореБрд▓рд┐рдВрдХ рд╕реЗ рд╕реАрдзреЗ рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдмреНрд▓реЙрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдпрд╣ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирдпрд╛ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реА рдмрд╛рд░ MATLAB R2018b рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдЗрд╕рдХрд╛ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рд╕рд┐рдореБрд▓рд┐рдВрдХ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдФрд░ рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдмреЗрд╣рдж рд╕рд░рд▓ рдмрдирд╛рдирд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рд╕реАрдорд╛рдПрдБ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЗрд╕ рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдмрд╛рдж exlib.so/exlib.lib рд╣реИ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рд┐рдореБрд▓реЗрд╢рди рд▓рдХреНрд╖реНрдп -> рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ #include "exlib.h" рдореЗрдВ рд╕рд┐рдореБрд▓реЗрд╢рди рд▓рдХреНрд╖реНрдп -> рд╣реИрдбрд░ рдореЙрдбрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ, рдмрд╕ "рддрд╛рдЬрд╝рд╛ рдХрд╕реНрдЯрдо рдХреЛрдб" рдмрдЯрди рд╕реА рдХреЛрд▓рд░ рдмреНрд▓реЙрдХ рдореЗрдВ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдирд┐рд╣рд┐рдд рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдПред
Exlib_print рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж , рдкреЛрд░реНрдЯ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рд╕рдВрд╡рд╛рдж рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рднрд░ рдЬрд╛рддрд╛ рд╣реИ:

рдФрд░ рдлрд┐рд░ рд╕реЗ, рдЖрдкрдХреЛ рд╕рд┐рдореБрд▓реЗрд╢рди рд▓рдХреНрд╖реНрдп рдореЗрдВ exlib_init рдФрд░ exlib_term рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ ред рдЖрдк рдкреНрд░рд╛рд░рдВрдн рдФрд░ рд╕рдорд╛рдкреНрддрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реАрдзреЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕реА рдХреЙрд▓рд░ рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрди рд╕реА рдХреЙрд▓рд░ рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдлрдВрдХреНрд╢рди рдФрд░ рдЯрд░реНрдорд┐рдиреЗрдЯ рдлрдВрдХреНрд╢рди рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк рд╕реНрдЯреЗрдЯрдлреНрд▓реЛ рд╕реЗ рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдордп рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрдбреНрдпреВрд▓ рд╕рдмрд╕рд┐рд╕реНрдЯрдо
рдЕрдиреБрдХрд╛рд░ рдЪрд▓рд╛рдПрдБ:
open_system('simlib_test_ccaller');
if isunix
    set_param('simlib_test_ccaller','SimUserLibraries','exlib.so');
end
sim('simlib_test_ccaller');
% Observe the results:
type('exlib.txt');
0.000000
1.000000
2.000000
3.000000
4.000000
5.000000
6.000000
7.000000
8.000000
9.000000
10.000000


C рдлрд╝рдВрдХреНрд╢рди рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рдирд╛


Simulink рдореЗрдВ рдмрд╛рд╣рд░реА рдХреЛрдб рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдирд╡реАрдирддрдо рдЬреЛрдбрд╝ C рдлрд╝рдВрдХреНрд╢рди рдмреНрд▓реЙрдХ рд╣реИ ред рд╡рд╣ R2020a рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдПред
рдпрд╣ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реА рдХреЙрд▓рд░ рдмреНрд▓реЙрдХ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЖрдпрд╛рддрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╕реА рдЖрд╡рд░рдг рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рдмреНрд▓реЙрдХ рдПрд╕-рдлрдВрдХреНрд╢рди рдмрд┐рд▓реНрдбрд░ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рд╕реА рдлрд╝рдВрдХреНрд╢рди рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдкрд░рд┐рджреГрд╢реНрдп рдореМрдЬреВрджрд╛ рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реА рдХреЛрдб рдХреЗ рдЫреЛрдЯреЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реИ, рдЕрдЧрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рдЖрд╡реЗрджрди рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдпрд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ exlib.so/exlib.lib рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ "рд╕рд┐рдореБрд▓реЗрд╢рди рд▓рдХреНрд╖реНрдп -> рдкреБрд╕реНрддрдХрд╛рд▓рдп" рдФрд░ #include "exlib.h"рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ "рд╕рд┐рдореБрд▓реЗрд╢рди рд▓рдХреНрд╖реНрдп -> рд╣реИрдбрд░ рдлрд╝рд╛рдЗрд▓" рдореЙрдбрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВред
рдЙрд╕рдХреЗ рдмрд╛рдж, C рдлрд╝рдВрдХреНрд╢рди рдмреНрд▓реЙрдХ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ, рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдПрдХрд▓ рдХреЗ рд╕рд╛рде рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд░рд┐рддреНрд░ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ, рд╕реНрдЯрд╛рд░реНрдЯ рдФрд░ рдПрдВрдб рдХреЛрдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


open_system('simlib_test_cfunction');
if isunix
    set_param('simlib_test_cfunction','SimUserLibraries','exlib.so');
end
sim('simlib_test_cfunction');
% Observe the results:
type('exlib.txt');
0.000000
1.000000
2.000000
3.000000
4.000000
5.000000
6.000000
7.000000
8.000000
9.000000
10.000000


рдПрдВрдмреЗрдбреЗрдб рдХреЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЙрддреНрдкрдиреНрди рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛


рдПрдВрдмреЗрдбреЗрдб рдХреЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рд┐рдореБрд▓рд┐рдВрдХ рдореЙрдбрд▓ рд╕реЗ рд╕реА-рдХреЛрдб рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреАрдврд╝реА рдФрд░ рдПрдХ рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЗрд╕ рдХреЛрдб рдХреА рдкреИрдХреЗрдЬрд┐рдВрдЧ рд╣реИред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рднреА рд╣реИ рдЬреЛ рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдЭрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдФрд░ рдЗрд╕реЗ рд╕реАред рдореЗрдВ рд▓рд┐рдЦреЗ рдмрд╛рд╣рд░реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВред
рдпрджрд┐ рдЖрдкрдХреЛ рдмрд╕ рдПрдХ рд╣реА рд╕рд┐рдореБрд▓рд┐рдВрдХ рдореЙрдбрд▓ рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдпрд╛ рд╕реА рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рд╕рд┐рдореБрд▓рд┐рдВрдХ рдХреЛрдбрд░ рдпрд╛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░-рдЗрди-рд▓реВрдк рд╕рд┐рдореБрд▓реЗрд╢рди рдХреЗ рдПрд╕-рдлрд╝рдВрдХреНрд╢рдиред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдЧрд░ рдПрдВрдмреЗрдбреЗрдб рдХреЛрдбрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд рд╕рд╛рдЭрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрд░реНрдз-рдкреНрд░рд╛рдХреГрддрд┐рдХ рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЙрд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмрдбрд╝реЗ рдореЙрдбрд▓ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЖрдкрдХреА рдмреМрджреНрдзрд┐рдХ рд╕рдВрдкрджрд╛ рдХреА рд░рдХреНрд╖рд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдПрдВрдмреЗрдбреЗрдб рдХреЛрдбрд░ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╕рд╛рдЭрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕рд╛рдЭрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓реЗрдЦ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рд╕рд░рд▓ рдореЙрдбрд▓ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рджреЛ рдЗрдирдкреБрдЯ рдФрд░ рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ:
open_system('simlib_test_ert');
snapnow;



рдореЙрдбрд▓ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдПрдХ .dll рдлрд╝рд╛рдЗрд▓ (рд▓рд┐рдирдХреНрд╕ рдкрд░ .so), рдПрдХ .lib рдлрд╝рд╛рдЗрд▓ (.dll рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдпрд╛рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп) рдФрд░ рдПрдХ .exp рдлрд╝рд╛рдЗрд▓ (.dll рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрдпрд╛рдд рдлрд╝рд╛рдЗрд▓) рдорд┐рд▓рддреА рд╣реИред
if isunix
    set_param('simlib_test_ert','CustomHeaderCode','#include <stddef.h>');
end
rtwbuild('simlib_test_ert');
### Starting build procedure for: simlib_test_ert
### Successful completion of build procedure for: simlib_test_ert


рдЙрддреНрдкрдиреНрди рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд░реНрдгреЛрдВ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ:
ex_init
double ex_step(double, double)
simlib_test_ert_terminate


рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╡реИрд╢реНрд╡рд┐рдХ рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЖрд░рдВрднрд┐рдХ рдЪрд░рдг, рдФрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдореЙрдбрд▓ рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рди рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк, рдкреНрд░рддреАрдХ рдирд╛рдо рдФрд░ рдЕрдзрд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдЪрд░реНрдЪрд╛ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИ)ред рдЗрд╕ рдореЙрдбрд▓ рдореЗрдВ, рдореЙрдбрд▓ рдХреЗ рдЪрд░рдг рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЖрдЙрдЯ 1 = ex_step (In1, In2) рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред
рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк MATLAB рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ рдЪрд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ):
рдХреЛрдб рджреЗрдЦреЗрдВ
function y = fcn(u1, u2)
%#codegen

% Generate library path on the fly
coder.extrinsic('RTW.getBuildDir','fullfile');
buildDir = coder.const(RTW.getBuildDir('simlib_test_ert'));
libpath = coder.const(buildDir.CodeGenFolder);
incpath = coder.const(fullfile(buildDir.BuildDirectory,'simlib_test_ert.h'));
% Shared library to link with
if isunix
    ext = '.so';
    libname = ['simlib_test_ert',ext];
else
    ext = '.lib';
    libname = ['simlib_test_ert_',computer('arch'),ext];
end
% Add the external library. Mark it as precompiled, so it won't appear as
% makefile target during code generation.
coder.updateBuildInfo('addLinkObjects',libname,libpath,1000,true,true);
coder.updateBuildInfo('addIncludePaths',libpath);
coder.cinclude(incpath);

% Initialize output
y = 0;
% Step
y = coder.ceval('ex_step',u1,u2);



рд╕рд┐рдореБрд▓реЗрд╢рди рдЪрд▓рд╛рдПрдВ рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗрдВ:
open_system('simlib_test_callert');
sim('simlib_test_callert');
snapnow;



рдЬрд╛рдБрдЪ - рдкрд░рд┐рдгрд╛рдо


рдпрд╣ рд▓реЗрдЦ рд╕рд┐рдореБрд▓рд┐рдВрдХ рдореЙрдбрд▓ рд╕реЗ рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рджреЛрдиреЛрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдФрд░ рд╕реНрдкрд╖реНрдЯ рд▓рд┐рдВрдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдЙрдирдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖ рд╣реИрдВ, рдФрд░ рдЙрдирдХреА рдЙрдкрдпреБрдХреНрддрддрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ, рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдФрд░ рд▓рдХреНрд╖реНрдпреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рдкрд░рдВрдкрд░рд╛рдЧрдд рдХреЛрдб рдЙрдкрдХрд░рдг рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬрдм рдПрдХ рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд▓рд┐рдВрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рд╕рд┐рд░реНрдл рдХрд╛рд░реНрдпреЛрдВ рд╕реАрдзреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд▓рд┐рдВрдХрд░ рдмрд╛рдХреА рдХреА рджреЗрдЦрднрд╛рд▓ рдХрд░реЗрдВрдЧреЗред MATLAB рд╕рд┐рд╕реНрдЯрдо рдмреНрд▓реЙрдХ рдПрдХ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдн рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:


  • рдЖрд░рдВрднреАрдХрд░рдг, рдХрджрдо рдФрд░ рд╕рдорд╛рдкрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреНрд░рддрд┐рдорд╛рди рдХреЗ рд╕рд╛рде рдЙрддреНрдХреГрд╖реНрдЯ рдЕрдиреБрдкрд╛рд▓рди, рдЖрдкрдХреЛ рдмреНрд▓реЙрдХ рдХреЗ рднреАрддрд░ рд╣реА рдЗрди рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рди рдХрд┐ рдореЙрдбрд▓ рдХреЗ рдкреИрдорд╛рдиреЗ рдкрд░

  • MATLAB MATLAB
  • MATLAB System (, S-)

MATLAB рдлрд╝рдВрдХреНрд╢рди рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдХреЛрдб рдкреАрдврд╝реА рдХреЗ рджреМрд░рд╛рди рдЕрддрд┐рд░рд┐рдХреНрдд рдУрд╡рд░рд╣реЗрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЙрддреНрдкрд╛рджрди рдХреЛрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЧреЗрд╕реА рдХреЛрдб рдЯреВрд▓ рдФрд░ рдПрд╕ рдлрд╝рдВрдХреНрд╢рди рдЕрднреА рднреА рдкрд╕рдВрдж рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдПрдХ рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рд▓рд┐рдВрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣рд╛рде рд╕реЗ рд▓рд┐рдЦрд╛ рдПрд╕ рдлрд╝рдВрдХреНрд╢рди рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдкрдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП LoadLibrary / dlopen , GetProcAddress / dlsym , FreeLibrary / dlclose рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред R2018b рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛
C рдХреЙрд▓рд░ рдмреНрд▓реЙрдХ C рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рд╕реАрдорд╛рдПрдБ рд╣реИрдВред рд╕реА рдлрдВрдХреНрд╢рди рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рднреА рдпрд╣реА рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрдЬреЛ R2020a рдХрд╛ рд╕рдмрд╕реЗ рдирдпрд╛ рдЬреЛрдбрд╝ рд╣реИред рдпрд╣рд╛рдБ

рд╕реНрд░реЛрдд рдФрд░ рдореЙрдбрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ

All Articles