从零开始simulink自定义代码生成----自定义目标系统配置(2)

从零开始simulink自定义代码生成----自定义目标系统配置(2)

自定义目标系统配置文件之系统目标文件 RTW工具箱回调函数

simulink支持自定义目标系统设置,需要以下几个文件:
1.xx.tlc 系统目标文件 主文件xx名称可自定义
2.xx_callback_handler.m RTW工具箱回调函数
3.xx_make_rtw_hook.m tlc文件调用,该文件后缀为_make_rtw_hook
4.xx_file_process.tlc 文件处理TLC文件
5.xx_srmain.tlc 用来控制主函数文件的生成

今天介绍工具箱回调函数。

RTW工具箱回调函数的作用

该函数通过调用matlab自带的函数(slConfigUISetVal 函数是用于自定义目标系统的属性,slConfigUISetEnabled函数则表示该属性是否可以被修改)对Configuration Parameter中的内容进行配置。
callback_handler函数中两个输入参数hDlg 和 hSrc 参数不需要用户自行设置,这些参数是由matlab自动分配的,不用对其进行修改。(资料内容:《基于模型设计—自定义目标系统配置指南》)

RTW工具箱回调函数参考代码

给出的s12x_demo中设置了以下参数,供大家参考
set_param(bdroot,‘PostCodeGenCommand’,‘postGenFunc(buildInfo)’);
设置参数,在配置页面表现如下图
从零开始simulink自定义代码生成----自定义目标系统配置(2)

目的是将指定的后期代码生成命令添加到模型编译过程中

curVal=slConfigUIGetVal(hDlg, hSrc, ‘ModelReferenceCompliant’);%获取当前值,默认是off
slConfigUISetVal(hDlg, hSrc, ‘ModelReferenceCompliant’, ‘on’);%设置为ON
curVal=slConfigUIGetVal(hDlg, hSrc, ‘ModelReferenceCompliant’);%获取当前值
slConfigUISetEnabled(hDlg, hSrc, ‘ModelReferenceCompliant’, false);%设置为不可改变
从零开始simulink自定义代码生成----自定义目标系统配置(2)

目的是 在 SelectCallback 中为目标设置,以指示目标支持模型引用

slConfigUISetVal(hDlg, hSrc, ‘CompOptLevelCompliant’, ‘on’);%设置为ON
slConfigUISetEnabled(hDlg, hSrc, ‘CompOptLevelCompliant’, false);%设置为不可改变
从零开始simulink自定义代码生成----自定义目标系统配置(2)

这个设置是在 SelectCallback 中为目标设置,以指示目标支持使用 Compiler optimization level 参数控制用于编译所生成代码的编译器优化级别。

slConfigUISetVal(hDlg, hSrc, ‘ProdHWDeviceType’, ‘Motorola HC12’);%设置硬件类型
slConfigUISetEnabled(hDlg, hSrc, ‘ProdHWDeviceType’, 0);%设置为不可改变
从零开始simulink自定义代码生成----自定义目标系统配置(2)

%% 指定用于测试从该模型生成的代码的硬件与代码最终将在其上运行的硬件相同。
slConfigUISetVal(hDlg, hSrc, ‘ProdEqTarget’,‘on’);%设置为ON
slConfigUISetEnabled(hDlg, hSrc, ‘ProdEqTarget’, 0);%设置为不可改变
从零开始simulink自定义代码生成----自定义目标系统配置(2)

%% 设置取消初始化代码,如果
slConfigUISetVal(hDlg, hSrc, ‘ZeroExternalMemoryAtStartup’,‘off’);%off表示勾选 取消ram初始化为0
slConfigUISetVal(hDlg, hSrc, ‘ZeroInternalMemoryAtStartup’,‘off’);%off表示勾选 取消值为0的初始化代码
从零开始simulink自定义代码生成----自定义目标系统配置(2)

slConfigUISetVal(hDlg, hSrc, ‘NoFixptDivByZeroProtection’, ‘on’);%on表示删除除0保护
从零开始simulink自定义代码生成----自定义目标系统配置(2)

slConfigUISetVal(hDlg, hSrc, ‘EfficientFloat2IntCast’, ‘on’);%on表示删除超出范围的浮点数到整数转换的代码
从零开始simulink自定义代码生成----自定义目标系统配置(2)

slConfigUISetVal(hDlg, hSrc, ‘GenerateSampleERTMain’, ‘on’);%设置需要生成 ERT 主函数
slConfigUISetEnabled(hDlg, hSrc, ‘GenerateSampleERTMain’, 0);%设置为不可改变

从零开始simulink自定义代码生成----自定义目标系统配置(2)

slConfigUISetVal(hDlg, hSrc, ‘GenerateMakefile’, ‘off’);%配置不适用 Makefile 进行代码生成
slConfigUISetEnabled(hDlg, hSrc, ‘GenerateMakefile’, 0);%设置为不可改变

从零开始simulink自定义代码生成----自定义目标系统配置(2)

%% GenerateErtSFunction 这个新版matlab已经没有了,用下面的
% slConfigUISetVal(hDlg, hSrc, ‘GenerateErtSFunction’, ‘off’);%取消将生成的代码包装在S-Function块中
% slConfigUISetEnabled(hDlg, hSrc, ‘GenerateErtSFunction’, 0);%设置为不可改变
slConfigUISetVal(hDlg, hSrc, ‘CreateSILPILBlock’, ‘None’);%取消创建一个SIL或PIL块来验证生成的代码
slConfigUISetEnabled(hDlg, hSrc, ‘CreateSILPILBlock’, 0);%设置为不可改变
从零开始simulink自定义代码生成----自定义目标系统配置(2)

%% MultiInstanceERTCode 这个新版matlab已经没有了,用下面的
% slConfigUISetVal(hDlg, hSrc, ‘MultiInstanceERTCode’, ‘off’);%指定生成不可重用的可重入代码
% slConfigUISetEnabled(hDlg, hSrc, ‘MultiInstanceERTCode’, 0);%设置为不可改变
slConfigUISetVal(hDlg, hSrc, ‘CodeInterfacePackaging’, ‘Nonreusable function’);%指定代码接口打包 设置 Nonreusable function表示生成的代码不可重用
slConfigUISetEnabled(hDlg, hSrc, ‘CodeInterfacePackaging’, 0);%设置为不可改变
从零开始simulink自定义代码生成----自定义目标系统配置(2)

slConfigUISetVal(hDlg, hSrc, ‘MatFileLogging’, ‘off’);%取消生成mat文件
slConfigUISetEnabled(hDlg, hSrc, ‘MatFileLogging’, 0);%设置为不可改变

从零开始simulink自定义代码生成----自定义目标系统配置(2)

slConfigUISetVal(hDlg, hSrc, ‘GRTInterface’, ‘off’);%指定不生成与R2012a之前创建的模型中GRT目标的主程序模块兼容的模型函数调用。
slConfigUISetEnabled(hDlg, hSrc, ‘GRTInterface’, 0);%设置为不可改变
从零开始simulink自定义代码生成----自定义目标系统配置(2)

slConfigUISetVal(hDlg, hSrc, ‘ERTCustomFileTemplate’, ‘s12x_file_process.tlc’);%配置用户自定义的模板文件
slConfigUISetEnabled(hDlg, hSrc, ‘ERTCustomFileTemplate’, 0);%设置为不可改变

从零开始simulink自定义代码生成----自定义目标系统配置(2)

slConfigUISetVal(hDlg, hSrc, ‘SupportNonInlinedSFcns’, ‘off’);%配置取消支持未与TLC文件内联的s函数。
从零开始simulink自定义代码生成----自定义目标系统配置(2)

slConfigUISetVal(hDlg, hSrc, ‘UtilityFuncGeneration’, ‘Auto’);%指定在何处生成实用函数、导出数据类型定义和导出数据的声明以及自定义存储类。
从零开始simulink自定义代码生成----自定义目标系统配置(2)

slConfigUISetVal(hDlg, hSrc, ‘IncludeMdlTerminateFcn’, 0);%设置取消生成一个模型终止函数
slConfigUISetEnabled(hDlg, hSrc, ‘IncludeMdlTerminateFcn’, 0);%设置为不可改变
从零开始simulink自定义代码生成----自定义目标系统配置(2)

slConfigUISetVal(hDlg, hSrc, ‘InitFltsAndDblsToZero’,‘off’);%设置生成将浮点数据显式初始化为0.0的代码 off表示勾选 如果编译器和目标CPU使用的浮点零表示与整数位模式0相同,则选择此选项。

从零开始simulink自定义代码生成----自定义目标系统配置(2)

slConfigUISetVal(hDlg, hSrc, ‘PurelyIntegerCode’,‘off’);%在生成的代码中支持浮点数据类型 off表示勾选
从零开始simulink自定义代码生成----自定义目标系统配置(2)

slConfigUISetVal(hDlg, hSrc, ‘SupportNonFinite’,‘off’);%取消在生成的代码中支持非有限值(inf, nan, -inf)
从零开始simulink自定义代码生成----自定义目标系统配置(2)

slConfigUISetVal(hDlg, hSrc, ‘TargetLibSuffix’, ‘.s19’);%控制用于命名目标依赖库的后缀
slConfigUISetEnabled(hDlg, hSrc, ‘TargetLibSuffix’, 0);%设置为不可改变

从零开始simulink自定义代码生成----自定义目标系统配置(2)

后续思考

如果需要自己定义想要的Configuration Parameter中的参数,可以按如下操作步骤来执行:
1.鼠标移动到想要配置的参数项,点击鼠标右键,弹出what is this
2.鼠标点击what is this,可以看到该参数是由matlab中的具体哪个函数来执行的,如果函数前面带~符号,说明和实际操作相反(如设置off时表示勾选,设置on时表示不勾选)
3.进入到该函数的具体说明,可以看到函数的用途及是如何使用的
4.搞清楚如何使用之后,再在callback_handler.m文件中添加自己想要的配置即可
5.添加完后可以重新导入目标系统配置的tlc文件,根据Configuration Parameter中的显示即可判断是否添加有效

以上就是callback_handler函数的基本内容,掌握了这个回调函数后,接下来需要添加xx_make_rtw_hook.m文件,该文件被tlc文件调用,后缀需要固定为_make_rtw_hook,将在后面详细介绍。欢迎点赞转发~~

上一篇:MATLAB simulink电气仿真集(仿真很多、有资源可下载)


下一篇:2021-04-23