Simulink代码生成: #pragma section 自定义Storage Class

目录

1. 问题引入

2.配置过程 

3. 创建自定义的Storage Class

4. 在数据字典SLDD和Base Workspace里调用自定义的Storage Class

5. 更改数据字典里面已经定义好的变量

6. 生成代码验证

7.总结


1. 问题引入

1. 定义变量到指定的段

  开发过程中,需要把标定量放到指定的段中并生成代码,代码效果如下,在应用层都是基于模型开发的前提下,如果手动添加#pragma section 这种预编译指令是不现实的,本文记录一下代码生成的配置过程。

2. 批量把SLDD里面定义的变量放到指定的段

  如果已经定义了数据字典,并定义了很多变量需要放到特定的段中

#pragma section ".rodata.Calib_32" a 4

/* Definition for custom storage class: Section_32_Signa */
VAR(float32, Task_100us_VAR) Ialpha;   /* '<S14>/Gain2' */
VAR(float32, Task_100us_VAR) Ibeta;    /* '<S14>/Gain5' */
VAR(float32, Task_100us_VAR) V_alpha;  /* '<S9>/Add' */
VAR(float32, Task_100us_VAR) V_beta;   /* '<S9>/Add3' */
VAR(float32, Task_100us_VAR) Vd_voltage;/* '<S39>/Switch2' */
VAR(float32, Task_100us_VAR) Vq_voltage;/* '<S66>/Switch2' */

#pragma section

/* ConstVolatile memory section */

#pragma section ".rodata.Calib_32" a 4

/* Definition for custom storage class: Section_32_Param */
volatile CONST(Current_PI_Param, Task_100us_VAR) Current_PI = {
  0.84F,
  48.0F,
  1.869F,
  48.0F
} ;   
#pragma section    

2.配置过程 

1. 创建自定义的Storage Class

在matlab的安装目录找到如下+SimulinkDemos的文件夹,直接复制到当前模型的工程中并改名,这里我们改成+myPackage,并把文件夹添加到matlab的路径中

如图,已经改名并添加了路径

2. 分别对+myPackage包里面Signal.m 和Parameter.m进行调整,两个文件分别对应了Simulink中的Signal类型和Parameter类型,如果少改了一个,在遇到相应类型时不能正常生成相要的代码。

3. 创建自定义的Storage Class

在当前工作空间输入 cscdesigner('myPackage'),弹出如下窗口,其中Memory Section是定义代码生成模板,Custom Storage Class是定义Simulink变量Storage Class

1. 配置Memory Section

 这里配置Signal类型的段和Parameter的段如下图:

Signal类型:

Parameter类型:

 配置完成后 Apply

 2.  配置Custom Storage Class

 新建一个模板,也可以复制已有的模板进行更改

Parameter类型操作也是一样 

最后点Apply,到这一步自定义的Storage Class就完成了

4. 在数据字典SLDD和Base Workspace里调用自定义的Storage Class

 1. 打开Model Explorer窗口,找到Add Simulink Parameter旁边的小箭头,展开如下,点击Customize class lists

2.  如下图,选择定义好的myPackage.Signal 和 myPackage.Parameter, 最后点OK

 

3.  现在可以在Base Workspace 各 SLDD的 Design Data 里面使用自定义的Storage Class

 


5. 更改数据字典里面已经定义好的变量

 如果数据字典里面已经定义了变量,在调用自定义的Storage Class时是不会显示出我们自定义的Storage Class如下:

 

在调整StorageClass属性时,找不到我们定义的StorageClass,因为我们在建数据字典时最初用的是Simulink.signal或者是Simulink.parameter,并不是我们定义的。这时候我们可以手动去改,重新定义变量,但这对变量多且有很多结构体的情况下并不适用,这时候就可以用到Export功能,如下:

 1. 把数据字典里的数据导出到文件,得到一个.m, 这个.m就是数据字典里定义的变量的脚本

 2.  把变量从Simulink.Parameter或者Simulink.Signal改成 myPackage.Parameter 或者myPackage.Signal. 再点下运行,这时新的变量会出现在Base Workspace.

 3.  备份原先的数据字典,清空数据字典里的变量,再从Base Workspace里面导入新的变量,现在的变量就可以直接调用自定义的StorageClass

6. 生成代码验证

7.总结

 这是在实践中遇到的问题,并通过查找相关资料和尝试找到的解决方案,不代表这是最好的方法,在这里记录一下

  • 16
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡洛斯伊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值