图书馆为可重用的库代码生成子系统
图书馆的生成代码的代码生成提供了一种方法可以共享的一组可重用的组件模型。对于每个顶级可重用的库子系统,你指定一组函数接口,锁定子系统接口。函数接口由子系统的输入和输出块的参数设置和模型配置参数设置。
函数接口是独立的模型,你保存一个附带的库。在生成代码包含可重用的库子系统的实例模型,生成的代码库。图书馆的代码生成的库代码的所有者。使个体模型代码的所有者,您可以生成代码可重用的库子系统共享工具文件夹。有关更多信息,请参见从图书馆子系统生成可重用的代码之间共享模型。
示例模型和库
展示如何使用功能接口和图书馆的代码生成,这个示例使用模型rtwdemo_libcodegen_mdl
和图书馆rtwdemo_libcodegen_lib
。可重用的库子系统的模型包含两个实例Atomic_Controller
。为Atomic_Controller_Single
数据类型,输入信号单
。为Atomic_Controller_Double
数据类型,输入信号双
。打开模型和库文件,在MATLAB命令提示符,输入:
rtwdemo_libcodegen_mdl rtwdemo_libcodegen_lib
配置可重用的库子系统
要执行图书馆的代码生成,您必须配置库子系统作为可重用。
指定唯一的函数接口名
每个函数接口对应相同的可重用的库子系统必须有一个唯一的名称。指定一个唯一的名称,遵循这些步骤:
在子系统块参数对话框,代码生成选项卡,设置函数名的选择参数
用户指定的
。为函数名参数,指定
$ R
和$ N
令牌。的$ R
令牌代表函数接口名称。的$ N
令牌代表了子系统的名字。在创建函数接口对话框,的名字描述上下文参数,指定一个名称。
设置文件名称选项参数
汽车
或使用函数名
。
配置和管理功能接口
该模型rtwdemo_libcodegen_mdl
包含可重用的库子系统的两个实例Atomic_Controller
。每个实例代表一个功能接口。在图书馆rtwdemo_libcodegen_lib
,右键单击的徽章在右边的一侧可重用的库子系统Atomic_Controller
。选择管理功能接口。两个函数接口的名称单
和双
因为Atomic_Controller
需要单
和双
数据类型。
创建函数接口,在图书馆,右键单击并选择一个子系统C / c++函数接口>创建函数接口。指定一个函数接口的名字。
然后,配置功能接口,选择以下方法之一。
指定一个函数接口模型
从链接创建函数接口的实例可重用的库子系统:
在图书馆,右键单击徽章在右边的可重用的库子系统和选择创建函数接口。在对话框中,选择指定库块实例创建函数接口参数。
为金宝app仿真软件模型与实例参数,选择包含子系统模型。
为图书馆块实例名参数,选择子系统。
点击好吧并关闭创建函数接口对话框。
对于每一个功能界面,重复前面的步骤。
请注意
您可以创建一个函数接口从模型中包含的实例与可重用的库子系统。你必须在代码中视角。打开代码的角度来看,从应用程序菜单中,选择嵌入式编码器。如果子系统功能接口、一个徽章出现在右下角的子系统。右键单击徽章和选择创建函数接口。如果子系统没有函数接口,右键单击子系统,并选择C / c++函数接口>创建函数接口。
出口和配置现有的函数接口
出口和配置功能接口作为一个独立的模型:
在图书馆,右键单击徽章在右边的可重用的库子系统和选择管理功能接口。
选择您想修改的函数接口。
点击出口。
在另存为窗口中,指定当前的工作目录。一个导出的函数接口是一个.slx文件的函数接口名称+附录
_export
。打开导出的模型。让你改变子系统的输入和输出参数设置和模型配置参数设置。保存模型。
在图书馆,右键单击并选择可重用的库子系统C / c++函数接口>创建函数接口。指定一个函数接口的名字。
为金宝app仿真软件模型与实例参数,选择导出的模型在当前工作目录。
为图书馆块实例名参数,选择子系统。
点击好吧并关闭创建函数接口对话框。
从图书馆内部配置函数接口
在图书馆,右键单击徽章在右边的子系统和选择配置功能接口。
在配置功能接口为子系统的输入和输出,对话框中,指定的值数据类型,维,信号类型参数。修改其他子系统的输入和输出参数设置,按照出口方法在前面的部分。
修改模型配置参数,点击齿轮按钮和修改。点击应用。关闭配置参数对话框。
替换一个函数接口与现有一个从一个实例模型,选择再生使用实例。
指定的值金宝app仿真软件模型与实例和图书馆块实例名参数。点击再生。
点击应用并关闭配置功能接口对话框。
建立图书馆
后你指定子系统接口函数库,生成代码,点击建立图书馆。为您的模型生成代码之前,您必须生成代码库。代码生成器包作为一个单独的C库的库代码。生成的代码库的一个文件夹对应硬件设置(例如,IntelWin64)。库代码文件夹名称相同的图书馆,必须在同一层次水平的图书馆。
当您生成代码rtwdemo_libcodegen_lib
图书馆,rtwdemo_libcodegen_lib
文件夹包含这些。c
和。h
文件:
Atomic_Controller_Single.h
Atomic_Controller_Single.c
Atomic_Controller_Double.h
Atomic_Controller_Double.c
这些函数名称的代表N R美元
规范函数名的选择和函数名参数对子系统块参数对话框。
一个关注互联网
文件夹包含代码共享的工具(例如,定点公用事业和查找表和MATLAB功能块),补充文件和出口参数和类型。
当你为一个模型,生成代码包含一个可重用的库子系统的实例,可以使用pregenerated库代码,模型库代码的链接。代码生成器使用校验和来确定可重用性。为模型生成的代码必须在图书馆里相同的文件夹。在MATLAB命令行,输入:
金宝appSimulink.fileGenControl('set', 'CodeGenFolderStructure',... Simulink.filegen.CodeGenFolderStructure.TargetEnvironmentSubfolder);
金宝appSimulink.fileGenControl
。
如果模型无法使用库代码,您可以指定是否嵌入编码产生一个警告或错误在代码生成。在配置参数对话框中,设置行为pregenerated库子系统代码时失踪诊断参数设置。
您可以生成代码库而不是通过输入以下命令执行一个makefile:
图书馆= ' rtwdemo_libcodegen_lib set_param(图书馆、“GenCodeOnly”、“上”)rtwbuild(库)
请注意
您可以生成代码库包含S-functions可重用的子系统组成的。为了避免不可编译代码,在TLC函数对应功能,避免指导代码生成器与模型文件进行交互,如模型。c
,模型。h
,model_types。h
。
从模型生成代码包含一个可重用的库子系统实例
从模型生成代码,其中包含一个可重用的库子系统的实例,您想要使用的库代码:
设置模型配置参数共享代码的位置来
共享位置
。指定的设置行为pregenerated库子系统代码时失踪(金宝app模型)参数或保留默认设置,这是警告。
在配置参数对话框中,参数的设置代码生成窗格都必须是相同的。如果设置是不同的,你可能会得到一个警告,错误,或者没有根据的设置行为pregenerated库子系统代码时失踪参数。
如果一个可重用的库子系统使用共享本地数据存储和配置的默认映射模型的数据元素,保留默认存储类映射类别本地数据存储共享设置为默认的。
这是生成的C代码rtwdemo_libcodegen_mdl
。
/ *模型阶跃函数* /空白rtwdemo_libcodegen_mdl_step (void){/ *输出原子子系统:“< Root > / Atomic_Controller_Double”* / / *尺寸:“< Root > / pos_rqst”包含:*尺寸:“< Root > / fbk_1”*外港:“< Root > / pos_cmd_one”* / Atomic_Controller_Double (pos_rqst1 rtU。fbk_1,而无。pos_cmd_one &rtDW.Atomic_Controller_Double);/ *输出子系统:年底的< Root > / Atomic_Controller_Double * / / *输出原子子系统:“< Root > / Atomic_Controller_Single”* / / *尺寸:“< Root > / pos_rqst1”包含:*尺寸:“< Root > / fbk_2”*外港:“< Root > / pos_cmd_two”* / Atomic_Controller_Single (pos_rqst2 rtU。fbk_2,而无。pos_cmd_two &rtDW.Atomic_Controller_Single);/ *输出子系统:年底的< Root > / Atomic_Controller_Single * /}
包含调用的代码Atomic_Controller_Single
和Atomic_Controller_Double
功能。生成的代码把pregenerated库代码的函数定义。
限制
因为代码生成器使用校验和来确定可重用性,同样的限制适用于生成代码共享的模型可重用的库子系统适用于图书馆的代码生成。看到限制。这些限制也适用:
你不能指定一个函数接口的可重用的库子系统是在另一个可重用的库子系统。
只有ERT和ERT-derived系统目标文件支持图书馆的代码生成。金宝app
每个函数接口,对应于相同的可重用的库子系统必须是唯一的。
只有顶级子系统可以重用库代码。
在Windows平台上,避免命名图书馆
lib.slx
这样做可能影响的静态库编译过程。