MC9S12XEP100_callback_handler.m(回调函数)
回调函数的作用就是设置生成代码的时候解算器的设置
slConfigUISetVal(hDlg, hSrc, 'SolverType', 'Fixed-step'); slConfigUISetEnabled(hDlg, hSrc, 'SolverType', 0); //该函数是为了设置是否锁定改参数 //1:不锁定该参数 0:锁定该参数,在simlink的配置界面里面不可修改
SolverType : Fixed-step(固定步长)和Variable-step(变步长)
变步长:可以在仿真的过程中根据模型的动态特征改变积分步长,提供误差控制和过零检测;
固定步长:在仿真过程中不改变积分步长,转而提供固定的步长,不提供误差控制和过零检测。
步长参数:对于变步长模式,用户可以设置最大的和推荐的初始步长参数,缺省情况下,步长自动地确定,它由值auto表示。
slConfigUISetVal(hDlg, hSrc, 'Solver', 'FixedStepDiscrete');
Solver:设置求解器的选项离散求解器。
slConfigUISetVal(hDlg, hSrc, 'FixedStep', '0.0001');
FixedStep:设置求解器固定步长(基础采样时间)为0.0001
求解器的时间是0.1ms,是根据板子来设置的,如果你想设置调用函数的周期是0.1ms那么就设置成0.0001,如果想设置成1ms那么这里的步长就设置成0.001,一般情况我们用的普通的simulink这个步长仅仅只用在仿真里面起作用,是因为我们直接把函数放在为我们想让他运行的周期里面,这里不行是因为它,这种封装好的底层驱动直接就是调用这里面的周期作为底层的任务调度周期
slConfigUISetVal(hDlg, hSrc, 'ProdHWDeviceType', 'Freescale->HC(S)12');
在设备供应商选择Freescale 并且选择设备类型HC(S)12型号
slConfigUISetVal(hDlg, hSrc, 'ERTCustomFileTemplate', 'MC9S12XEP100_file_process.tlc');
配置用户自定义的模板文件
slConfigUISetVal(hDlg, hSrc, 'GenerateSampleERTMain', 'off');
//不生成实例主程序
slConfigUISetVal(hDlg, hSrc, 'GenerateMakefile', 'off');
是否生成联编文件
slConfigUISetVal(hDlg, hSrc, 'ZeroExternalMemoryAtStartup','off'); slConfigUISetVal(hDlg, hSrc, 'ZeroInternalMemoryAtStartup','off');
是否 删除根级I/O零初始化: off为勾选 on为取消勾选
是否 删除内部数据零初始化: off为勾选 on为取消勾选
slConfigUISetVal(hDlg, hSrc, 'NoFixptDivByZeroProtection', 'on');
是否删除防止除法运算异常的代码 ;on表示删除除0保护
slConfigUISetVal(hDlg, hSrc, 'EfficientFloat2IntCast', 'on');
从可调参数表达式中删除对超出范围值进行饱和处理的代码;on表示删除超出范围的浮点数到整数转换的代码
%slConfigUISetVal(hDlg, hSrc, 'MultiInstanceERTCode', 'off'); %slConfigUISetEnabled(hDlg, hSrc, 'MultiInstanceERTCode', 0); slConfigUISetVal(hDlg, hSrc, 'CodeInterfacePackaging', 'Nonreusable function'); slConfigUISetEnabled(hDlg, hSrc,'CodeInterfacePackaging', 0);
% 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);%设置为不可改变
slConfigUISetVal(hDlg, hSrc, 'MatFileLogging', 'off');
取消生成mat文件
slConfigUISetVal(hDlg, hSrc, 'GRTInterface', 'off');
指定不生成与R2012a之前创建的模型中GRT目标的主程序模块兼容的模型函数调用。
slConfigUISetVal(hDlg, hSrc, 'SupportNonInlinedSFcns', 'off');
配置取消支持未与TLC文件内联的s函数。
slConfigUISetVal(hDlg, hSrc, 'UtilityFuncGeneration', 'Auto');
指定在何处生成实用函数、导出数据类型定义和导出数据的声明以及自定义存储类。
slConfigUISetVal(hDlg, hSrc, 'IncludeMdlTerminateFcn', 'off');
设置取消生成一个模型终止函数
slConfigUISetVal(hDlg, hSrc, 'InitFltsAndDblsToZero','off');
设置生成将浮点数据显式初始化为0.0的代码 off表示勾选 如果编译器和目标CPU使用的浮点零表示与整数位模式0相同,则选择此选项
slConfigUISetVal(hDlg, hSrc, 'PurelyIntegerCode','off');
在生成的代码中支持浮点数据类型 off表示勾选
slConfigUISetVal(hDlg, hSrc, 'SupportNonFinite','off');
取消在生成的代码中支持非有限值(inf, nan, -inf)
slConfigUISetVal(hDlg, hSrc, 'GenerateASAP2','on');
控制用于命名目标依赖库的后缀
之前版本中:在之前的版本中,可以通过模型设置/Code Generation/Interface中选择ASAP2 Interface达到生成A2l文件的目的
但是在新版本中(如下图)已经没有此设置选项,这个选项并不是取消了,而是迁移到别的地方
MATLAB 2022a设置方法
完整代码如下:
function MC9S12XEP100_callback_handler(hDlg, hSrc)
% 设置并锁定以下参数
slConfigUISetVal(hDlg, hSrc, 'SolverType', 'Fixed-step');
slConfigUISetEnabled(hDlg, hSrc, 'SolverType', 0);
slConfigUISetVal(hDlg, hSrc, 'Solver', 'FixedStepDiscrete');
slConfigUISetEnabled(hDlg, hSrc, 'Solver', 0);
slConfigUISetVal(hDlg, hSrc, 'FixedStep', '0.001');
slConfigUISetEnabled(hDlg, hSrc, 'FixedStep', 0);
slConfigUISetVal(hDlg, hSrc, 'InlineParams', 'on');
slConfigUISetEnabled(hDlg, hSrc, 'InlineParams', 0);
slConfigUISetVal(hDlg, hSrc, 'ProdHWDeviceType', 'Freescale->HC(S)12');
slConfigUISetEnabled(hDlg, hSrc, 'ProdHWDeviceType', 0);
slConfigUISetVal(hDlg, hSrc, 'ERTCustomFileTemplate', 'MC9S12XEP100_file_process.tlc');
slConfigUISetEnabled(hDlg, hSrc, 'ERTCustomFileTemplate', 0);
slConfigUISetVal(hDlg, hSrc, 'GenerateSampleERTMain', 'off');
slConfigUISetEnabled(hDlg, hSrc, 'GenerateSampleERTMain', 0);
slConfigUISetVal(hDlg, hSrc, 'GenerateMakefile', 'off');
slConfigUISetEnabled(hDlg, hSrc, 'GenerateMakefile', 0);
slConfigUISetVal(hDlg, hSrc, 'ZeroExternalMemoryAtStartup','off');
slConfigUISetVal(hDlg, hSrc, 'ZeroInternalMemoryAtStartup','off');
slConfigUISetVal(hDlg, hSrc, 'NoFixptDivByZeroProtection', 'on');
slConfigUISetVal(hDlg, hSrc, 'EfficientFloat2IntCast', 'on');
%slConfigUISetVal(hDlg, hSrc, 'MultiInstanceERTCode', 'off');
%slConfigUISetEnabled(hDlg, hSrc, 'MultiInstanceERTCode', 0);
slConfigUISetVal(hDlg, hSrc, 'CodeInterfacePackaging', 'Nonreusable function');
slConfigUISetEnabled(hDlg, hSrc,'CodeInterfacePackaging', 0);
slConfigUISetVal(hDlg, hSrc, 'MatFileLogging', 'off');
slConfigUISetEnabled(hDlg, hSrc,'MatFileLogging', 0);
slConfigUISetVal(hDlg, hSrc, 'GRTInterface', 'off');
slConfigUISetEnabled(hDlg, hSrc, 'GRTInterface', 0);
slConfigUISetVal(hDlg, hSrc, 'SupportNonInlinedSFcns', 'off');
slConfigUISetEnabled(hDlg, hSrc, 'SupportNonInlinedSFcns', 0);
slConfigUISetVal(hDlg, hSrc, 'UtilityFuncGeneration', 'Auto');
%slConfigUISetEnabled(hDlg, hSrc, 'UtilityFuncGeneration', 0);
slConfigUISetVal(hDlg, hSrc, 'IncludeMdlTerminateFcn', 'off');
slConfigUISetEnabled(hDlg, hSrc, 'IncludeMdlTerminateFcn', 0);
slConfigUISetVal(hDlg, hSrc, 'InitFltsAndDblsToZero','off');
slConfigUISetVal(hDlg, hSrc, 'PurelyIntegerCode','off');
slConfigUISetVal(hDlg, hSrc, 'SupportNonFinite','off');
slConfigUISetVal(hDlg, hSrc, 'GenerateASAP2','on');
slConfigUISetVal(hDlg, hSrc, 'ERTFirstTimeCompliant','on');