0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于一种实现条件编译的建模方法分析和介绍

MATLAB 来源:djl 作者:董淑成 2019-09-16 15:21 次阅读

上次介绍过可以使用Variant Subsystem或者Model Variant实现带有条件编译的代码(条件编译助力Simulink模型平台化开发)。最近了解到,从MATLAB R2016a开始,又有一种新的方式可以实现C代码中的条件编译。这就是Variant Sourc模块的使用。

关于一种实现条件编译的建模方法分析和介绍

假设有如下模型:

关于一种实现条件编译的建模方法分析和介绍

双击Variant Source模块,可以看到如下配置界面:

关于一种实现条件编译的建模方法分析和介绍

不难看出,除了要定义Simulink Variant对象K1、K2之外,还需要勾上Analyze all choices during update diagram and generate prepropcessor conditionals选项。显然,如果K==1条件成立,则Port 1分支对应的代码被编译,如果K==2,则Port 2分支对应的代码被编译。这里的K可以定义为Simulink Parameter对象,Storage Class定义为Define(Custom),并且需要指定宏定义的文件。

如此设置之下,得到的模型算法实现函数如下:

voidtestvariantSource_step(void)

{

real_T rtb_VariantMerge_For_Variant_So;

#ifK1

rtb_VariantMerge_For_Variant_So = u1 + u2;

#endif

#ifK2

rtb_VariantMerge_For_Variant_So = u3 + u4;

#endif

y = rtb_VariantMerge_For_Variant_So;

}

这种方式实现带有条件编译的代码也非常简单,条件编译的好处可以通过控制宏定义K控制需要编译哪部分代码,那么,如果不设置条件编译呢?

上述模型中,如果不再勾选Analyze all choices during update diagram and generate prepropcessor conditionals选项,我们得到如下代码:

voidtestvariantSource_step(void)

{

y = u1 + u2;

}

代码中只有当前参数条件下有效算法的代码。

跟上次介绍的条件编译相比,实现方式不同,应用场景也可能不同,如何取舍,这里就不去分析了。但是,在基于模型的开发模式下,到底在模型级别上做选择,还是通过C代码级别的条件编译做选择,这是个值得我们思考的问题。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4841

    浏览量

    69225
  • 编译
    +关注

    关注

    0

    文章

    663

    浏览量

    33101
收藏 人收藏

    评论

    相关推荐

    VirtualLab Fusion案例:K域和X域中的系统建模

    为了准确快速地模拟光在复杂光学系统中的传播,VirtualLab Fusion使用了一种“连接场解算器”方法,该方法包括在两个域(空间和空间频率)中实现特定的电磁场解算器。在本周的时事
    发表于 01-15 08:56

    VirtualLab:系统建模分析

    ,系统建模分析器。本文档介绍该工具的使用方法。 系统建模分析器 如何运行
    发表于 01-14 09:45

    使用OpenVINO™条件编译功能,压缩Windows应用体积

    cmake -DENABLE_INTEL_GPU=OFF 便可以取消 GPU plugin 库的编译。除此以外 OpenVINO 还提供了条件编译功能,用于针对特定模型进行运行库压缩,接下来就让我们
    的头像 发表于 01-13 10:26 162次阅读
    使用OpenVINO™<b class='flag-5'>条件</b><b class='flag-5'>编译</b>功能,压缩Windows应用体积

    VirtualLab Fusion:系统建模分析

    ,系统建模分析器。本文档介绍该工具的使用方法 系统建模分析器 如何运行
    发表于 01-04 08:45

    仿真分析误差来源及减少建模误差的方法

    建模误差 建模误差是仿真分析中最常见的误差来源之。它主要源于物理系统与其数学模型之间的差异。在建模
    的头像 发表于 12-24 09:52 564次阅读
    仿真<b class='flag-5'>分析</b>误差来源及减少<b class='flag-5'>建模</b>误差的<b class='flag-5'>方法</b>

    VirtualLab:系统建模分析

    ,系统建模分析器。本文档介绍该工具的使用方法。 系统建模分析器 如何运行
    发表于 12-19 12:36

    一种利用CSD16327Q3实现企业固态硬盘钽电容短路保护的方法

    电子发烧友网站提供《一种利用CSD16327Q3实现企业固态硬盘钽电容短路保护的方法.pdf》资料免费下载
    发表于 10-25 10:22 0次下载
    <b class='flag-5'>一种</b>利用CSD16327Q3<b class='flag-5'>实现</b>企业固态硬盘钽电容短路保护的<b class='flag-5'>方法</b>

    linux驱动程序的编译方法是什么

    Linux驱动程序的编译方法主要包括两: 与内核编译编译成独立的内核模块 。以下是对
    的头像 发表于 08-30 14:46 795次阅读

    LIDAR激光雷达逆向建模能用到revit当中吗

    LIDAR激光雷达逆向建模一种利用激光雷达技术获取物体表面数据,然后通过计算机软件进行建模方法。在建筑行业中,这种方法可以用于建筑物的三
    的头像 发表于 08-29 17:23 645次阅读

    对放大电路的分析方法介绍

    放大电路是电子技术中非常重要的组成部分,它广泛应用于信号处理、通信、测量等领域。对于放大电路的分析,通常可以分为直流分析和交流分析情况。下面我们将
    的头像 发表于 08-07 10:08 827次阅读

    一种无透镜成像的新方法

    使用OAM-HHG EUV光束对高度周期性结构进行成像的EUV聚光显微镜 为了研究微电子或光子元件中的纳米级图案,一种基于无透镜成像的新方法可以实现近乎完美的高分辨率显微镜。 层析成像是一种
    的头像 发表于 07-19 06:20 462次阅读
    <b class='flag-5'>一种</b>无透镜成像的新<b class='flag-5'>方法</b>

    rup是一种什么模型

    RUP(Rational Unified Process,统建模语言)是一种软件开发过程模型,它是一种迭代和增量的软件开发方法。RUP是由
    的头像 发表于 07-09 10:13 1433次阅读

    神经网络在数学建模中的应用

    数学建模一种利用数学方法和工具来描述和分析现实世界问题的过程。神经网络是一种模拟人脑神经元结构和功能的计算模型,可以用于解决各种复杂问题。
    的头像 发表于 07-02 11:29 1162次阅读

    放大电路有哪三基本分析方法?举例说明

    放大电路是电子电路的重要组成部分,它起到放大信号的作用。在设计和分析放大电路时,有三基本的分析方法:传输特性分析、小信号
    的头像 发表于 02-25 15:56 3486次阅读

    gis建模与空间分析的区别

    GIS建模与空间分析是地理信息系统(GIS)领域中两个重要的概念,它们虽然有定的联系,但在目的、步骤和应用方面存在明显的区别。本文将从理论和实际应用的角度,详尽、详实、细致地对GIS建模
    的头像 发表于 02-25 14:57 1068次阅读