我使用m文件初始化MATLAB工作区中的参数。
是文件的例子:
Pconstant=Simulink.Parameter;
Pconstant.Value=3;
Pconstant.CoderInfo.StorageClass = 'exportedGlobal';
Pgain=Simulink.Parameter;
Pgain.Value=10;
Pgain.CoderInfo.StorageClass = 'exportedGlobal';
这些参数在“增益”和“常量”块中用作值。我为这个模型生成了c源代码,并在model_data.c文件中收到了以下结构:
/* Block parameters (auto storage) */
P_ParameterTest_T ParameterTest_P = {
10.0, /* Expression: Pgain
* Referenced by: '<Root>/Gain'
*/
3.0, /* Expression: Pconstant
* Referenced by: '<Root>/Constant'
*/
};
Model.h文件包含以下代码:
/* Parameters (auto storage) */
struct P_ParameterTest_T_ {
real_T Gain_Gain; /* Expression: Pgain
* Referenced by: '<Root>/Gain'
*/
real_T Constant_Value; /* Expression: Pconstant
* Referenced by: '<Root>/Constant'
*/
};
模型源代码编译到model.a lib文件中,用于其他程序。 我可以在外部c代码中更改常量值:
parameters = (BLOCK_PARAMETERS*)rtmGetDefaultParam(model);
parameters->Constant_Value = 1;
但这个解决方案对我不利。因为我不知道在哪里使用这些参数,我不知道结构的字段名称。
我可以编写在使用Pconstant参数的结构的所有字段中设置值的代码吗?像这样:
Pconstant = 1; //instead of parameters->Constant_Value = 1;
感谢您的帮助。
答案 0 :(得分:1)
您说您已将存储类定义为ExportedGlobal
,但在生成的代码中,它显示为“自动存储”,因此某些内容并不完全正确。
要实现您的目标,我认为您需要在优化窗格中打开“内联参数”(请参阅documentation),然后单击“配置...”按钮以定义您的参数不想内联,即Pconstant
和Pgain
(请参阅文档中有关inlining parameters的内容)。代码中的结构构造通常在“内联参数”关闭时使用。
我猜你有Simulink Coder,所以你也应该看一下Simulink Coder文档,了解它如何为不同条件下的参数生成代码。从记忆中,它通常非常彻底。