如果你有嵌入式编码器®软件,您可以生成一个共享库—windows®动态链接库(.dll.
UNIX),®共享对象(所以
),或Macintosh OS X动态库(. dylib
) -从一个模型组件。您或其他人可以将共享库集成到运行在Windows、UNIX或其他操作系统上的应用程序中Macintosh OS X开发计算机。共享库的用途包括:
在应用程序中添加用于系统仿真的软件组件
在开发计算机上的应用程序之间重用软件模块
隐藏与您与供应商共享的软件相关的知识产权
当生成共享库时,代码生成器导出:
类型的变量和信号ExportedGlobal
作为数据
实时模型结构(
)作为数据模型
_M
执行模型代码所必需的函数
要从模型组件生成共享库并使用该库,请完成表中列出的任务。
任务 | 行动 | 更多的信息 |
---|---|---|
1 | 检查您对外部代码特征和集成需求的评估。 | |
2 | 为代码生成配置模型。 | 生成匹配外部代码外观的代码和模型配置 |
3. | 为代码生成器配置模型,以生成共享库并启动代码生成。 | 生成共享库 |
4 | 验证生成的共享库是否满足需求。例如,查看代码生成报告并查看库中的符号列表。
|
|
5 | 在应用程序代码中使用共享库。 | 创建使用生成的共享库的应用程序代码 |
6 | 编译和链接加载和使用生成的共享库的应用程序代码。 | 在Simulink环境中构建集成代码金宝app |
7 | 验证可执行程序的行为和执行是否符合预期。 |
当为代码生成配置模型时,选择系统目标文件ert_shrlib.tlc
.
构建的模型。代码生成器生成模型的源代码和代码的共享库版本。代码生成器将源代码放在代码生成文件夹和共享库中(.dll.
,所以
,或. dylib
文件)。代码生成器还生成并保留. lib
文件来支持隐式链金宝app接。
此示例应用程序代码是为该示例生成的使用共享库开发计算机模拟器的接口.
创建一个包含模型外部输入和输出类型声明的应用程序头文件。例如:
#ifndef _APP_MAIN_HEADER_ #define _APP_MAIN_HEADER_ typedef struct {int32_T输入;} ExternalInputs_rtwdemo_shrlib;typedef struct {int32_T输出;} ExternalOutputs_rtwdemo_shrlib;# endif / * _APP_MAIN_HEADER_ * /
在应用程序C源代码中,动态加载共享库。使用预处理条件语句调用特定于平台的命令。例如:
#if (define (_WIN32)||define (_WIN64)) /* WINDOWS */ #include < WINDOWS .h> #define GETSYMBOLADDR GetProcAddress #define LOADLIB LoadLibrary #define CLOSELIB FreeLibrary #else /* UNIX */ #include < dlf.com h> #define GETSYMBOLADDR dlsyp #define LOADLIB dlopen #define CLOSELIB dlclose #endif int main() {void* handleLib;...#if define (_WIN64) handleLib = LOADLIB("./rtwdemo_shrlib_win64.dll");#else #if define (_WIN32) handleLib = LOADLIB("./rtwdemo_shrlib_win32.dll");#else /* UNIX */ handleLib = LOADLIB("./rtwdemo_shrlib. txt ");所以“RTLD_LAZY);# endif # endif……返回(CLOSELIB (handleLib));}
从应用程序C源代码,访问导出的数据和从模型生成的函数。代码使用钩子添加用户定义的初始化、步骤和终止代码。
int32_T我;...空白(* mdl_initialize) (boolean_T);空白(* mdl_step)(空白);空白(* mdl_terminate)(空白);ExternalInputs_rtwdemo_shrlib (* mdl_Uptr);ExternalOutputs_rtwdemo_shrlib (* mdl_Yptr);uint8_T (* sum_outptr);...#if (defined(LCCDLL)||defined(BORLANDCDLL)) /*当DLL与LCC或BORLANDC链接时,导出的符号包含前导下划线*/ mdl_initialize = (void(*)(boolean_T))GETSYMBOLADDR(handleLib, "_rtwdemo_shrlib_initialize"); mdl_step = (void(*)(void))GETSYMBOLADDR(handleLib , "_rtwdemo_shrlib_step"); mdl_terminate = (void(*)(void))GETSYMBOLADDR(handleLib , "_rtwdemo_shrlib_terminate"); mdl_Uptr = (ExternalInputs_rtwdemo_shrlib*)GETSYMBOLADDR(handleLib , "_rtwdemo_shrlib_U"); mdl_Yptr = (ExternalOutputs_rtwdemo_shrlib*)GETSYMBOLADDR(handleLib , "_rtwdemo_shrlib_Y"); sum_outptr = (uint8_T*)GETSYMBOLADDR(handleLib , "_sum_out"); #else mdl_initialize = (void(*)(boolean_T))GETSYMBOLADDR(handleLib , "rtwdemo_shrlib_initialize"); mdl_step = (void(*)(void))GETSYMBOLADDR(handleLib , "rtwdemo_shrlib_step"); mdl_terminate = (void(*)(void))GETSYMBOLADDR(handleLib , "rtwdemo_shrlib_terminate"); mdl_Uptr = (ExternalInputs_rtwdemo_shrlib*)GETSYMBOLADDR(handleLib , "rtwdemo_shrlib_U"); mdl_Yptr = (ExternalOutputs_rtwdemo_shrlib*)GETSYMBOLADDR(handleLib , "rtwdemo_shrlib_Y"); sum_outptr = (uint8_T*)GETSYMBOLADDR(handleLib , "sum_out"); #endif if ((mdl_initialize && mdl_step && mdl_terminate && mdl_Uptr && mdl_Yptr && sum_outptr)) { /* user application initialization function */ mdl_initialize(1); /* insert other user defined application initialization code here */ /* user application step function */ for(i=0;i<=12;i++){ mdl_Uptr->Input = i; mdl_step(); printf("Counter out(sum_out): %d\tAmplifier in(Input): %d\tout(Output): %d\n", *sum_outptr, i, mdl_Yptr->Output); /* insert other user defined application step function code here */ } /* user application terminate function */ mdl_terminate(); /* insert other user defined application termination code here */ } else { printf("Cannot locate the specified reference(s) in the shared library.\n"); return(-1); }
的代码生成ert_shrlib.tlc
系统目标文件将以下内容导出为数据:
类型的变量和信号ExportedGlobal
实时模型结构(模型
_M)
的代码生成ert_shrlib.tlc
系统目标文件仅支持C语言(不是C ++金宝app)。当你选择ert_shrlib.tlc
,则无法进行语言选择代码生成窗格中的。
要通过使用生成的共享库来重建模型仿真,应用程序作者必须在原始应用程序中维护系统和共享库函数调用之间的时间间隔。时序必须一致,以便您可以比较模拟和集成结果。如果从启用模型配置参数的模型生成共享库,则需要应用其他模拟考虑事项金宝app支持:连续时间和单输出/更新功能.有关更多信息,请参见单输出/更新功能(金宝app仿真软件编码器)依赖关系。