Simulink模型子系统单独文件代码自动代码生成

最近在做CAN的打包和发包程序,发现里面有很多坑值得注意:

1、如何在生成代码时,生成不同的子模型单独代码文件,而不是全部在一个文件中?

答:simulink中有个概念叫做原子子系统(Atomic Subsystem),就是这个模型可以被别的模型无限次调用。因此只需要把你的子系统做成原子子系统就可以了。具体如下:

右键子系统-->Block parameter-->勾选“Treat as atomic unit”,然后在“Code Generation”选项卡中选择子系统的文件名称就可以了。

2、关于Function packaging选型的解释如下:

简单解释就是选择:“Reusable function”生成的代码的接口是独立于该模型的,可以被别的模型调用,也可以做成库来用。而如果选择了Nonreusable function的话,则函数使用该模型子系统的变量进行输入和输出。以下是两个生成代码的区别:

  • Reusable function生成的代码:
#include "SS1.h"

/* Include model header file for global data */
#include "SubsystemAtomic.h"
#include "SubsystemAtomic_private.h"

/* Outputs for atomic system: '<Root>/SS1' */
real_T myfun(DW_myfun_T *localDW)
{
  /* DiscreteIntegrator: '<S1>/Integrator' */
  return localDW->Integrator_DSTATE;
}

/* Update for atomic system: '<Root>/SS1' */
void myfun_Update(real_T rtu_In1, DW_myfun_T *localDW)
{
  /* Update for DiscreteIntegrator: '<S1>/Integrator' */
  localDW->Integrator_DSTATE += rtu_In1;
}
  • Nonreusable function生成的代码
#include "SS1.h"

/* Include model header file for global data */
#include "SubsystemAtomic.h"
#include "SubsystemAtomic_private.h"

/* Outputs for atomic system: '<Root>/SS1' */
void myfun(void)
{
  /* Outport: '<Root>/Out1' incorporates:
   *  DiscreteIntegrator: '<S1>/Integrator'
   */
  SubsystemAtomic_Y.Out1 = SubsystemAtomic_DW.Integrator_DSTATE;
}

/* Update for atomic system: '<Root>/SS1' */
void myfun_Update(void)
{
  /* Update for DiscreteIntegrator: '<S1>/Integrator' */
  SubsystemAtomic_DW.Integrator_DSTATE += SubsystemAtomic_B.Sum;
}

以上

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值