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

    文章

    4552

    浏览量

    66642
  • 编译
    +关注

    关注

    0

    文章

    611

    浏览量

    32358
收藏 人收藏

    评论

    相关推荐

    gis建模与空间分析的区别

    进行比较和解析。 首先,GIS建模是指将现实世界的地理实体和现象通过计算机技术和方法表达出来,用数字化的方式模拟、描述和分析。GIS建模可以分为两个方面,即地理数据模型和地理过程模型。
    的头像 发表于 02-25 14:57 226次阅读

    机器人建模方法和组成

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

    一种高动态与低信噪比条件下的载波同步方法

    电子发烧友网站提供《一种高动态与低信噪比条件下的载波同步方法.pdf》资料免费下载
    发表于 11-03 11:12 0次下载
    <b class='flag-5'>一种</b>高动态与低信噪比<b class='flag-5'>条件</b>下的载波同步<b class='flag-5'>方法</b>

    ESL设计的核心——事务级建模介绍

    关于ESL的描述更多侧重于它在方法学上的抽象描述,实现ESL设计的核心是事务级建模(TLM,Transaction Level Modeling)。 要
    的头像 发表于 11-02 14:38 489次阅读

    C语言条件结构的使用方法

    的两种方法,可以实现一个逻辑条件的判断。在某些情况下,需要检查多重条件,解决这种情况可用多重if、嵌套if或switch结构来解决,本节将具体介绍
    发表于 11-02 11:27 261次阅读
    C语言<b class='flag-5'>条件</b>结构的使用<b class='flag-5'>方法</b>

    如何利用相位噪声分析程序和传递函数来降低锁相环的输出相位噪声?

    本文是关于相位噪声建模、仿真和传播在锁相环中的应用的第三部分。文章介绍了相位噪声的理论和测量方法,并探讨了相位噪声的分析
    的头像 发表于 10-27 11:42 646次阅读
    如何利用相位噪声<b class='flag-5'>分析</b>程序和传递函数来降低锁相环的输出相位噪声?

    关于相位锁定环(PLL)频率合成器的设计和分析

    本篇文章是关于相位锁定环(PLL)频率合成器的设计和分析,重点讨论了相位噪声和频率噪声的测量、建模和仿真方法。文章以设计一个假想的PLL频率合成器为例,详细
    的头像 发表于 10-26 15:30 564次阅读
    <b class='flag-5'>关于</b>相位锁定环(PLL)频率合成器的设计和<b class='flag-5'>分析</b>

    MATLAB编程在优化中的应用介绍

    机会。与前几年的高级编程语言相比,这些软件系统非常容易掌握。本书主要试图利用这种三角服务,为设计优化的研究提供一种实用的方法。这本书使用MATLAB@toillustrate并实现各种优化技术。MATLAB是股份有限公司Math
    发表于 09-21 07:07

    讲解消息分发的一种编译实现

    今天讲消息分发的一种编译实现法。
    的头像 发表于 08-23 14:38 325次阅读

    如何实现VBA编译器崩溃

    本篇文章为VBA脚本隐藏技术的最后一篇,将介绍如何在保证VBA脚本正常执行的情况下,使分析人员无法打开编译器。
    发表于 07-15 10:02 431次阅读
    如何<b class='flag-5'>实现</b>VBA<b class='flag-5'>编译</b>器崩溃

    一种基于Simulink搭建的柴油发动机建模方法

    汽油机和柴油机是目前汽车中最为广泛使用的动力源。其中,本期带来基于Simulink搭建的柴油发动机建模方法
    发表于 06-29 11:26 1449次阅读
    求<b class='flag-5'>一种</b>基于Simulink搭建的柴油发动机<b class='flag-5'>建模</b><b class='flag-5'>方法</b>

    有没有一种方法可以在没有任何自动编译器的情况下完全以汇编语言编写LPC812代码?

    你好。有没有一种方法可以在没有任何自动编译器的情况下完全以汇编语言编写 LPC812 代码? 最好是,如果这可以通过 IDE 完成而无需手动配置链接器。
    发表于 05-22 07:22

    技术分享 | RK3568开发板 buildroot编译配置

    启扬智能RK3568开发板提供两文件系统,一种是Debian,另外一种是BuildRoot。在使用过程中,有些客户需要添加属于自己的软件包,所以在此分享启扬RK3568关于Build
    发表于 05-12 08:59

    有没有一种方法可以在“附加板管理器 URL”中指定旧版本?

    总而言之, 我有个在 ESP8266 上使用 painlessMesh 的项目。 已经工作了好几个月了。 不幸的是,最新版本的 8266 内核导致 painlessMesh 编译错误。 有没有一种方法可以在“附加板管理器 UR
    发表于 05-08 08:25

    常用UML建模工具介绍

    模型化和可视化支持,包括由需求分析到规格,到构造和配置。 面向对象的分析与设计(OOA&D,OOAD)方法的发展在80年代末至90年代中出现了一个高潮,UML是这个高潮的产物。它不仅统一
    的头像 发表于 05-05 11:09 2096次阅读