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

    文章

    4733

    浏览量

    68294
  • 编译
    +关注

    关注

    0

    文章

    650

    浏览量

    32792
收藏 人收藏

    评论

    相关推荐

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

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

    一种简单高效配置FPGA的方法

    本文描述了一种简单高效配置FPGA的方法,该方法利用微处理器从串行外围接口(SPI)闪存配置FPGA设备。这种方法减少了硬件组件、板空间和成本。
    的头像 发表于 10-24 14:57 313次阅读
    <b class='flag-5'>一种</b>简单高效配置FPGA的<b class='flag-5'>方法</b>

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

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

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

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

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

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

    一种无透镜成像的新方法

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

    rup是一种什么模型

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

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

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

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

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

    gis建模与空间分析的区别

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

    介绍建模方式

    据量大,而是指样本的完备性。还有就是大数据或者AI被专业学者或者行业工程师所诟病的就是,纯粹的数据驱动搞不出所以然出来,需要领域知识(即Domain Knowledge)的协助。此外,还有第三建模方式就是混合驱动,即基础物理模型加上数据驱动的方式。下文详细
    的头像 发表于 01-23 10:48 1491次阅读

    一种简单易行的可编程振荡器构建方法

    本文介绍一种简单易行的可编程振荡器构建方法,其中振荡频率和幅度可以通过使用digiPOT来彼此独立地调节。
    发表于 01-15 10:05 215次阅读
    <b class='flag-5'>一种</b>简单易行的可编程振荡器构建<b class='flag-5'>方法</b>

    SaberRD状态机建模工具介绍)什么是状态机建模

    状态机建模是使用状态图和方程式的手段,创建基于混合信号的有限状态机模型的一种建模工具。
    的头像 发表于 12-05 09:51 1612次阅读
    SaberRD状态机<b class='flag-5'>建模</b>工具<b class='flag-5'>介绍</b>(<b class='flag-5'>一</b>)什么是状态机<b class='flag-5'>建模</b>

    机器人建模方法和组成

    URDF:机器人建模方法 ROS是机器人操作系统,当然要给机器人使用啦,不过在使用之前,还得让ROS认识下我们使用的机器人,如何把个机器人介绍给ROS呢? 为此,ROS专门提供了
    的头像 发表于 11-22 16:30 855次阅读
    机器人<b class='flag-5'>建模</b><b class='flag-5'>方法</b>和组成

    基于几何分析的神经辐射场编辑方法

    《Interactive NeRF Geometry Editing with Shape Priors》 [1]提出了一种基于几何分析的交互式神经辐射场编辑方法
    的头像 发表于 11-20 16:56 537次阅读
    基于几何<b class='flag-5'>分析</b>的神经辐射场编辑<b class='flag-5'>方法</b>