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

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

3天内不再提示

关于利用C代码实现条件控制的分析和研究

MATLAB 来源:djl 2019-09-17 11:40 次阅读

条件控制在C代码中常用的诸如if-else, Switch-Case来表达,那么:

Simulink模型中是如何实现的呢?

又如何配置生成代码呢?

点击末尾的 “阅读原文” 下载本文的案例模型

条件控制逻辑

要得到:

if (u1 > u2)

{

y1 = u1;

}

else

{

y1 = u2;

}

或者

switch (u1)

{

case 2:

y1 = u2;

break;

case 3:

u3;

break;

default:

y1 = u4;

break;

}

怎么做:

Simulink框图模型里使用Signal Routing以及Ports&Subsystem库里对应的模块,如Switch;在Chart里则根据逻辑来构造流程图;而在MATLAB Function模块里则直接写m脚本。

if-else实例

1. 新建一个简单的Simulink模型

如图使用三种方式来实现条件判断的算法

关于利用C代码实现条件控制的分析和研究

如上图,对于Simulink来说,if-else可以使用Signal Routing库里的Switch模块。而在Chart中,则画出对应的流程图即可,如下图:

关于利用C代码实现条件控制的分析和研究

MATLAB Function则更简单,直接写m脚本。

关于利用C代码实现条件控制的分析和研究

代码生成基本配置

求解器:定步长—离散求解器

系统目标文件:ert.tlc

3. 新建数据对象

打开Model Explorer,点击菜单的Add,在Base Workspace里定义输入、输出信号同名的数据对象。通过数据对象来控制这些信号在将来生成C代码时的定义和声明。

关于利用C代码实现条件控制的分析和研究

4. 信号关联

在信号线上右键,将信号与Base Workspace的数据对象关联在一起。鼠标操作的方式,可以参考之前的帖子里的菜单截图。因为这里的信号略多,一条一条信号线的点击鼠标,略麻烦,所以可以使用命令的方式来实现:

关于利用C代码实现条件控制的分析和研究

此时,第一张模型截图中信号线上的蓝色小叉子就会出现,表示已经关联了。

5. 生成代码

Ctrl+B,生成代码。

如前面所设置的,三个模块都会得到同样的if-else的代码:

关于利用C代码实现条件控制的分析和研究

接下来看Switch的情况。

Switch实例

1. MATLAB Function

比较简单,跟之前一样按照m语言的语法写代码即可。

2. Stateflow Chart

而对于Stateflow Chart来说,如果不熟悉流程图的画法,可以使用向导自动生成特定的逻辑结构,作为参考:

关于利用C代码实现条件控制的分析和研究

在向导对应的框内填入内容,然后自动生成后边的流程图,可以根据自己的需要再进行调整。Stateflow里面,中括号里的是条件判断语句,大括号里的是执行语句。

关于利用C代码实现条件控制的分析和研究

其实从结构上来讲,得到的流程图和之前的if-else是类似,它其实也完全可以用 if-else if-else的C代码来表示。而实际上,它生成的代码也会是这样:

关于利用C代码实现条件控制的分析和研究

只不过呢,因为下图所示的选择项是会默认勾选上的:

关于利用C代码实现条件控制的分析和研究

所以生成的代码就会变成Switch的模式:

关于利用C代码实现条件控制的分析和研究

Signal Routing里有个Multiport Switch可以用来表达Switch的效果。另外,还有来自Port & Subsystem库里的Switch Case模块。

下图就是它们的用法。感兴趣的可以下载模型生成代码看看。

关于利用C代码实现条件控制的分析和研究

条件控制语句:

对于MATLAB Function,就是直接写对应的m脚本;

对于Stateflow,就是对应不同形式的流程图;

对于Simulink,就是使用对应的模块。

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

    关注

    2

    文章

    832

    浏览量

    29446
  • C代码
    +关注

    关注

    1

    文章

    89

    浏览量

    14287
收藏 人收藏

    评论

    相关推荐

    技术干货驿站 ▏深入理解C语言:掌握C语言条件判断,从if到switch的应用

    在编程中,条件判断语句是控制程序流程的核心元素之一。它们使得程序能够根据不同的输入和状态,做出相应的决策。特别是在C语言中,条件判断语句的使用极为广泛,涵盖了从简单的if语句到更复杂的
    的头像 发表于 11-09 01:10 173次阅读
    技术干货驿站 ▏深入理解<b class='flag-5'>C</b>语言:掌握<b class='flag-5'>C</b>语言<b class='flag-5'>条件</b>判断,从if到switch的应用

    hex文件如何查看原c语言代码

    是处理器可以直接执行的指令,而 C 语言代码则是人类可读的高级编程语言代码。 然而,如果你想要从 .hex 文件中获取一些有用的信息或者对程序进行分析,你可以考虑以下几种方法: 反汇编
    的头像 发表于 09-02 10:37 1521次阅读

    利用CLB实现基于硬件的同步整流控制

    电子发烧友网站提供《利用CLB实现基于硬件的同步整流控制.pdf》资料免费下载
    发表于 08-31 09:44 0次下载
    <b class='flag-5'>利用</b>CLB<b class='flag-5'>实现</b>基于硬件的同步整流<b class='flag-5'>控制</b>

    实现不失真测量应满足哪些条件

    实现不失真测量是科学研究和工程实践中的一个重要问题。不失真测量是指在测量过程中,测量结果能够真实、准确地反映被测量对象的特性,不受测量方法、测量设备、测量环境等因素的影响。为了实现不失真测量,需要
    的头像 发表于 08-19 14:24 1047次阅读

    实现有源逆变必须满足哪些条件

    实现有源逆变,即让一个电力电子装置在输出端产生与输入端电压同频率、同相位的电流,同时能够向电网回馈能量,需要满足一定的条件。以下是对实现有源逆变所需满足条件
    的头像 发表于 08-14 10:31 1391次阅读

    利用Swap模式实现代码回滚操作

    前面介绍了MCUboot的基础知识,您可通过上方链接回顾历史文章,上次介绍了Swap模式,本次着重介绍利用Swap模式实现代码回滚操作。在某些应用场景中,可能新版本的Firmware存在bug而需要返回至上一次的固件。
    的头像 发表于 06-19 15:45 1168次阅读
    <b class='flag-5'>利用</b>Swap模式<b class='flag-5'>实现代码</b>回滚操作

    实现智能制造的重要条件是什么

    智能制造是工业4.0的核心,它通过高度集成的信息技术和自动化技术,实现生产过程的智能化、自动化和网络化。实现智能制造的重要条件有很多,以下是一些关键因素的详细分析: 技术创新 技术创新
    的头像 发表于 06-07 15:42 1542次阅读

    HarmonyOS实战开发-合理选择条件渲染和显隐控制

    开发者可以通过条件渲染或显隐控制两种方式来实现组件在显示和隐藏间的切换。本文从两者原理机制的区别出发,对二者适用场景分别进行说明,实现相应适用场景的示例并给出性能对比数据。 原理机制
    发表于 05-10 15:16

    关于STM32 DMAMUX模块具体的应用示例代码

    有人通过公众号微信留言,询问是否有关于STM32 DMAMUX模块具体的应用示例代码。同时,个人也发现,虽然STM32片内的DMAMUX不是什么新模块,似乎还是很多人并不太熟悉。这里借机聊聊这方面的内容,重点演示相关功能的实现
    的头像 发表于 03-25 09:15 2326次阅读
    <b class='flag-5'>关于</b>STM32 DMAMUX模块具体的应用示例<b class='flag-5'>代码</b>

    STM32G4如何利用ADC-DMA对全桥电路实现闭环控制

    ,希望各位大佬分享下相关控制代码进行学习参考,或者大佬指导下该怎样学习,引一下路,谢谢(目前卡在了利用ADC采样值控制芯片输出)。
    发表于 03-22 06:40

    AN50019:MOSFET封装的热边界条件研究

    电子发烧友网站提供《AN50019:MOSFET封装的热边界条件研究.pdf》资料免费下载
    发表于 12-19 15:59 0次下载
    AN50019:MOSFET封装的热边界<b class='flag-5'>条件</b><b class='flag-5'>研究</b>

    实战经验 | 数据意外变化导致条件判断流程异常

    关键词:数据意外变化导致条件判断流程异常 目录预览 1、问题描述 2、问题分析 3、小结 01 问题描述 用户使用的 MCU 型号是 STM32H750VB。  在客户的代码中有多个条件
    的头像 发表于 12-07 10:00 468次阅读

    利用SCR步进指令实现流水灯循环点亮

    在以往介绍西门子smart文章中,提到过流水灯的写法,有用循环位移字[ROL(R)_B]节来实现,有利用定时器(TON)来实现。今天我们利用SCR步进指令来
    的头像 发表于 12-04 09:15 2116次阅读
    <b class='flag-5'>利用</b>SCR步进指令<b class='flag-5'>实现</b>流水灯循环点亮

    if函数多个条件并列怎么输入

    3 :执行代码块 在上述示例中,条件1、条件2和条件3都需要被满足,才能执行if语句后面的代码块。如果其中任何一个
    的头像 发表于 12-03 10:31 3700次阅读

    case怎么使用多个条件

    在编写代码时,我们经常需要根据不同的条件来执行不同的操作。在Python中,我们可以使用 if 语句来实现这一目的。 if 语句允许我们设置多个条件,并且根据不同的
    的头像 发表于 11-30 14:34 1150次阅读