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

    文章

    4947

    浏览量

    73277
  • 编译
    +关注

    关注

    0

    文章

    689

    浏览量

    34970
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    C/C++条件编译

    条件编译一种编译时根据条件选择性地包含或排除部分代码的处理方法。在 C/C++ 中,
    发表于 12-05 06:21

    一种基于PWM的电压输出DAC电路设计

    误差的方法,论文给出了两从PWM到0~5V电压输出的电路实现方法,第2电路具有很高的转换精度。 纯分享帖,点击下方附件免费获取完整资
    发表于 08-04 14:58

    介绍一种直流过压保护电路

    本篇博文将详细分析一种典型的过压保护电路,探讨其工作原理、元件选择及实际应用,帮助大家深入理解如何保护电子设备。
    的头像 发表于 07-05 11:06 967次阅读
    <b class='flag-5'>介绍</b><b class='flag-5'>一种</b>直流过压保护电路

    PanDao:实际约束条件下成像系统的初始结构的生成

    “First Time Right”(FTR)方法,能够基于给定的规格与约束生成多样化的约束成像系统。结合PanDao这创新的光学制造技术(OFT)分析软件,可对面向量产的系统快速完成设计、
    发表于 05-07 08:57

    一种新型激光雷达惯性视觉里程计系统介绍

    针对具有挑战性的光照条件和恶劣环境,本文提出了LIR-LIVO,这是一种轻量级且稳健的激光雷达-惯性-视觉里程计系统。通过采用诸如利用深度与激光雷达点云关联实现特征的均匀深度分布等先进技术,以及利用
    的头像 发表于 04-28 11:18 822次阅读
    <b class='flag-5'>一种</b>新型激光雷达惯性视觉里程计系统<b class='flag-5'>介绍</b>

    一种基于分数阶 PID 直流电机调速的 AGV 控制系统

    为设计一种低成本、抗干扰、稳定可靠的 AGV,提出一种基于磁带导航的 AGV 系统。采用 Megawin 公司的80C51单片机为控制核心,以并排对称设计的霍尔传感器实现循迹和纠偏,红外光
    发表于 03-25 15:10

    一种多模态驾驶场景生成框架UMGen介绍

    端到端自动驾驶技术的快速发展对闭环仿真器提出了迫切需求,而生成式模型为其提供了一种有效的技术架构。然而,现有的驾驶场景生成方法大多侧重于图像模态,忽略了其他关键模态的建模,如地图信息、智能交通参与者等,从而限制了其在真实驾驶场景
    的头像 发表于 03-24 15:57 1524次阅读
    <b class='flag-5'>一种</b>多模态驾驶场景生成框架UMGen<b class='flag-5'>介绍</b>

    VirtualLab Fusion应用:立方体光束整形器上的全内反射(FTIR)

    边界条件来计算整个层系统的响应。 这是一种以其无条件数值稳定性而闻名的方法,因为与传统的传递矩阵不同,它避免了计算步骤中的指数增长函数。 更多信息:层矩阵S矩阵 非序列追迹 系统概
    发表于 03-04 10:02

    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 867次阅读
    使用OpenVINO™<b class='flag-5'>条件</b><b class='flag-5'>编译</b>功能,压缩Windows应用体积

    VirtualLab Fusion:系统建模分析

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

    Triton编译器的优势与劣势分析

    Triton编译器作为一种新兴的深度学习编译器,具有系列显著的优势,同时也存在些潜在的劣势。以下是对Triton
    的头像 发表于 12-25 09:07 1911次阅读

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

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

    VirtualLab:系统建模分析

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