前言
自定义目标系统文件由五大文件组成:
- xx.tlc 系统目标文件
- xx_callback_handler.m RTW工具箱回调函数
- xx_make_rtw_hook.m tlc文件调用
- xx_file_process.tlc 文件处理TLC文件
- xx_srmain.tlc 控制主函数文件的生成
这个函数文件是用来配置模型的基本设置的,像Code Generation,Hardware Implementation等等都可以在这个回调函数中进行配置,因为在选中tlc之后,Simulink会自动执行tlc的回调函数xx_callback_handler进行配置。
这是我的部分配置:
function jxert_callback_handler(hDlg,hSrc) slConfigUISetVal(hDlg,hSrc,'ModelReferenceCompliant','on'); slConfigUISetEnabled(hDlg,hSrc,'ModelReferenceCompliant',false); slConfigUISetVal(hDlg,hSrc,'CompOptLevelCompliant','on'); slConfigUISetEnabled(hDlg,hSrc,'CompOptLevelCompliant',false); % 设置硬件类型 F407 是ARM Cortex-M架构 slConfigUISetVal(hDlg,hSrc,'ProdHWDeviceType','ARM Compatible->ARM Cortex-M'); % slConfigUISetVal(hDlg,hSrc,'ProdHWDeviceType','ARM Cortex-M'); slConfigUISetEnabled(hDlg,hSrc,'ProdHWDeviceType',0); % 指定用于测试从该模型生成的代码的硬件与代码最终在其上运行的硬件相同 slConfigUISetVal(hDlg,hSrc,'ProdEqTarget','on'); slConfigUISetEnabled(hDlg,hSrc,'ProdEqTarget',0); slConfigUISetVal(hDlg,hSrc,'ZeroExternalMemoryAtStartup','off');%~ZeroExternalMemoryAtStartup off表示勾选 slConfigUISetVal(hDlg,hSrc,'ZeroInternalMemoryAtStartup','off');%~ZeroInternalMemoryAtStartup off表示勾选 % 删除超出范围的浮点数到整数转换的代码 slConfigUISetVal(hDlg,hSrc,'EfficientFloat2IntCast','on'); % 设置需要生成ERT主函数 slConfigUISetVal(hDlg,hSrc,'GenerateSampleERTMain','on'); slConfigUISetEnabled(hDlg,hSrc,'GenerateSampleERTMain',0); % 不使用Makefile进行代码生成 slConfigUISetVal(hDlg,hSrc,'GenerateMakefile','off'); slConfigUISetEnabled(hDlg,hSrc,'GenerateMakefile',0); % 创建一个SIL块来验证生成的代码 % slConfigUISetVal(hDlg,hSrc,'CreateSILPILBlock','SIL'); % 取消创建一个SIL/PIL块来验证生成的代码 slConfigUISetVal(hDlg,hSrc,'CreateSILPILBlock','None'); % 指定代码接口打包,设置Nonreusable function表示生成的代码不可用 slConfigUISetVal(hDlg,hSrc,'CodeInterfacePackaging','Nonreusable function'); slConfigUISetEnabled(hDlg,hSrc,'CodeInterfacePackaging',0); % 不生成mat文件 slConfigUISetVal(hDlg,hSrc,'MatFileLogging','off'); slConfigUISetEnabled(hDlg,hSrc,'MatFileLogging',0); % 配置用户自定义的模板文件 slConfigUISetVal(hDlg,hSrc,'ERTCustomFileTemplate','example_file_process.tlc'); slConfigUISetEnabled(hDlg,hSrc,'ERTCustomFileTemplate',0); % 配置取消支持未与TLC文件内联的s函数 slConfigUISetVal(hDlg,hSrc,'SupportNonInlinedSFcns','off'); % 指定在何处生成实用函数、导出数据类型定义和导出数据的声明以及自定义存储类。 slConfigUISetVal(hDlg,hSrc,'UtilityFuncGeneration','Auto'); % 设置取消生成一个模型终止函数 slConfigUISetEnabled(hDlg,hSrc,'IncludeMdlTerminateFcn',0); % 设置生成将浮点数据显示初始化为0.0 slConfigUISetVal(hDlg,hSrc,'InitFltsAndDblsToZero','off'); slConfigUISetVal(hDlg,hSrc,'PurelyIntegerCode','off'); % 取消在生成的代码中支持非有限值(inf, nan,-inf) slConfigUISetVal(hDlg,hSrc,'SupportNonFinite','off'); % 只生成代码 slConfigUISetVal(hDlg,hSrc,'GenCodeOnly','on'); % 设置解析器为类型Fixed-step slConfigUISetVal(hDlg,hSrc,'SolverType','Fixed-step'); slConfigUISetEnabled(hDlg,hSrc,'SolverType',0); % 默认设置步长为0.02(20ms) slConfigUISetVal(hDlg,hSrc,'FixedStep','0.02');% 后期可以修改,但不是修改代码,而是在选项中自行修改 % 设置模型编译优先目标,暂定效率优先 slConfigUISetVal(hDlg,hSrc,'ObjectivePriorities','Execution efficiency'); % 遇到警告继续编译,输出报告后找到问题fix就好 slConfigUISetVal(hDlg,hSrc,'CheckMdlBeforeBuild','Warning'); end
jxert_callback_handler(hDlg,hSrc)里面的hDlg和hSrc可以不用管,matlab会对他自动进行分配。
如何自定义修改需要的参数呢?
右键点击你想要修改的目标,选择what’s this:
然后就会显示脚本/函数文件的命令码:
然后可以点击Show more information看看参数的具体使用方法。