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

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

3天内不再提示

关于如何定义结构体的分析和介绍

MATLAB 来源:djl 作者:柚籽 2019-09-16 10:31 次阅读

我们来聊聊结构体。

E-Coder 在做自动代码生成的时候,在默认情况下,它会把所有的输入信号定义为一个结构体_U,把所有的输出信号定义为另一个结构体_Y,把所有的参数定义为一个结构体_P。虽然这样的结构体不一定是我们想要的,但至少,说明自动代码生成是支持结构体的。

本文并不解决“哪些情况下应该使用结构体”这个问题,这里来说说:

怎么实现我想要的结构体?

从之前的文章中我们说到,自动生成代码时,想让各种信号、参数定义和声明采用什么样的方式,都是通过数据对象 (Data Object) 来实现的。那,如果我希望把信号 a ,b,c 或者参数 k1,k2,k3 定义为一个结构体,该怎么实现呢?

构造结构体

要得到:

typdef struct {

double k1;

double k2;

double k3;

} kk_type;

kk_type kk={2.0,3.0,4.0};

怎么做:

设置数据对象的Storage Class属性为 Struct

或者使用Simulink Bus来定义新的结构体类型 outyy

举个例子

1.新建如下的简单模型并生成代码

先看一下 “正常的” 不使用结构体的情况:

关于如何定义结构体的分析和介绍

看下面这张图,定义好了对应的信号数据对象 (Simulink.Signal) u1、u2、u3、yy1、yy2、yy3,与参数数据对象(Simulink.Parameter) k1、k2、k3。

通过名字对应以及关联操作,实现关联,也就是上图中的蓝色小叉子。具体如何操作以前介绍过。

关于如何定义结构体的分析和介绍

Ctrl + B,生成代码:

关于如何定义结构体的分析和介绍

2.把参数 k1、k2、k3 放在指定的结构体 kk 里

选中数据对象 k1,k2,k3,把 StorageClass 都设置为 Struct(Custom),并指定结构体名字为 kk。这样在自动生成代码时,这几个参数会自动放入结构体 kk 中。

关于如何定义结构体的分析和介绍

看到,在生成的代码里,得到一个新的结构体类型 kk_type:

关于如何定义结构体的分析和介绍

并且,根据这几个参数的值,得到了结构体变量 kk:

关于如何定义结构体的分析和介绍

3.把信号 yy1、yy2、yy3 也放在一个输出结构体里

刚才的参数结构体是通过设置数据对象的 StorageClass 为 Struct 来实现的。而现在,以信号为例,使用另一种方式来实现这个目的: Simulink Bus。

a.首先,通过 Simulink Bus 来定义一个新的结构体数据类型 outyy:

关于如何定义结构体的分析和介绍

定义这个 Bus 的结构,里面的成员名就是最后出现在代码里的名字:

关于如何定义结构体的分析和介绍

那么此时,一个新的数据类型就构造好了。将来在生成代码时,这个新的结构体类型就是这样:

关于如何定义结构体的分析和介绍

数据类型定义好了,接着,我们就要来用它了。

b. 把 Simulink 的三个输出信号使用 Bus Creator 模块变成总线信号,取名叫 outStruct:

关于如何定义结构体的分析和介绍

设置这个 Bus Creator 模块的数据类型为刚定义好的结构体 outyy。另外,还得勾选它为非虚拟总线。那么这样,它在生成代码时,就会被当做结构体来看:

关于如何定义结构体的分析和介绍

c. 如同之前每一个 double\single 类型的信号一样,接着,也为 outStruct信号定义一个同名的数据对象 outStruct。

在 Simulink 模型上的 outStruct 信号线的属性界面上勾选关联到这个数据对象,得到蓝色小叉子。

关于如何定义结构体的分析和介绍

4. 最后生成代码

关于如何定义结构体的分析和介绍

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

    关注

    8

    文章

    7074

    浏览量

    89153
  • 数据类型
    +关注

    关注

    0

    文章

    236

    浏览量

    13637
  • 结构体
    +关注

    关注

    1

    文章

    130

    浏览量

    10852
收藏 人收藏

    评论

    相关推荐

    等离子定义和特征

    等离子定义 等离子是一种由离子、电子和中性粒子组成的电离气体。在这种状态下,物质的部分或全部原子被电离,即原子核与电子分离,形成了带正电的离子和自由移动的电子。这种电离状态使得等离子
    的头像 发表于 11-29 10:06 551次阅读

    结构成员的顺序会影响结构的大小吗

    相同的结构成员,如果把顺序调整一下,会不会影响结构的大小? 答案是会的,这主要跟字节对齐有关。 比如这样的结构
    的头像 发表于 11-25 16:24 207次阅读

    你是否真的了解结构占用了多少字节?

    结构成员所占内存空间大小一般情况下,如果想知道结构成员的内存占用情况需要:1、先用结构在内
    的头像 发表于 06-04 08:04 501次阅读
    你是否真的了解<b class='flag-5'>结构</b><b class='flag-5'>体</b>占用了多少字节?

    射频分析仪的工作原理和基本结构

    在通信和信息技术日益发展的今天,射频分析仪作为一种关键的测试和测量设备,发挥着不可替代的作用。它集成了射频通信系统测试与测量的所有必要功能,为无线通信网络的优化和维护提供了强有力的技术支持。本文将对射频分析仪的定义、工作原理、基
    的头像 发表于 05-14 17:23 714次阅读

    矢量信号分析仪的工作原理和基本结构

    中发挥着至关重要的作用。本文将对矢量信号分析仪进行详细的介绍,包括其定义、工作原理、基本结构以及应用等方面,旨在为读者提供全面的了解和参考。
    的头像 发表于 05-13 18:17 4115次阅读

    实时频谱分析仪的工作原理和基本结构

    的便利。本文将对实时频谱分析仪的定义、工作原理、基本结构以及应用进行详细介绍,以期为相关领域的研究和应用提供参考。
    的头像 发表于 05-13 18:15 1534次阅读

    扫频频谱分析仪的工作原理和基本结构

    扫频频谱分析仪,作为电子测量领域的重要工具,其重要性不言而喻。本文将对扫频频谱分析仪进行全面深入的解析,包括其定义、工作原理、基本结构以及在实际应用中的优势和局限性。通过本文的
    的头像 发表于 05-13 18:07 1563次阅读

    嵌入式中C语言结构基本实现

    C语言中的数组只能允许程序员定义存储相同类型数据。但是结构是C语言编程中允许您存储不同数据类型的数据。 结构定义     要想
    的头像 发表于 05-11 08:49 1065次阅读
    嵌入式中C语言<b class='flag-5'>结构</b><b class='flag-5'>体</b>基本实现

    定义了一个结构,但是分配的地址不连续,为什么?

    定义了一个结构,但是分配的地址不连续,是KEIL的问题还是我的问题?
    发表于 04-26 08:12

    成型电感发热的原因分析

    作为电子电路中非常重要的一个电感元件,它的品质和稳定性对于电路以及设备的正常运行是非常重要的。关于成型电感在使用中出现发热的情况,我们可以从以下几个方面进行分析: 1、铜损是引起一
    的头像 发表于 04-02 22:17 527次阅读

    C语言结构史上最详细的讲解【软件干货】

    的基本属性,但是当我们想表达一个事物的全部或部分属性时,这时候再用单一的基本数据类型明显就无法满足需求了,这时候C提供了一种自定义数据类型,他可以封装多个基本数据类型,这种数据类型叫结构,英文名称struct,可以使用stru
    的头像 发表于 03-28 17:52 789次阅读

    求助,关于G031ADC结构设置的几个疑问求解

    本人在使用ADC时想使用多通道模式,所以便在CUBEMX上将十九个通道全部打开(包括三个内部通道),生成代码以后详细看了一下结构的配置发现有几个疑惑, 1.ADC通道分为规则通道和注入通道,那么
    发表于 03-15 07:03

    求助,请问一个结构如何全部定义到 __attribute__ 区域?

    请问一个结构如何全部定义到 __attribute__ 区域? 例如我这里涉及到一些高速计算的缓存,计划将缓存数据存储到 __attribute__ 区域。 三个结构
    发表于 01-16 07:29

    经典 C 语言编程,结构和联合体如何共用?

    中可以 使用 sizeof 进行获取,默认为字节对齐的大小。 联合体 联合体的参数共享同一个内存地址,所占的内存大小完全是由联合体中参数类型决定字长,然后数据共享,内存共享等。 结构和联合体连用例子: 1、首先定义一个
    的头像 发表于 01-11 18:24 1412次阅读
    经典 C 语言编程,<b class='flag-5'>结构</b><b class='flag-5'>体</b>和联合体如何共用?

    结构与指针的关系

    在C语言中,结构(Struct)是一种用户自定义的数据类型,它允许您将不同类型的数据项组合在一起,以便形成一个更复杂的数据结构结构
    的头像 发表于 01-11 08:00 1013次阅读
    <b class='flag-5'>结构</b><b class='flag-5'>体</b>与指针的关系