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

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

3天内不再提示

关于结构体变量建模的介绍和原理

MATLAB 来源:djl 2019-09-12 09:54 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

鉴于有不少模型开发工程师缺乏 C 语言的基本概念,我这里大致说一下 C 代码中的结构体。

首先我们需要知道有结构体类型和结构体变量。

结构体类型在 C 语言中的定义如下:

struct mystruct_T

{

uint8 a;

int16 b;

uint16 c;

};

这里 mystruct_T 就是结构体类型。结构体类型是一种组合数据类型,不同于数组,结构体的元素是可以有不同数据类型的,上面的例子中 a、b、c 的数据类型各不相同。

我们可以像使用基本数据类型一样使用结构体类型去定义变量,使用结构体类型定义的变量是结构体变量,比如:

mystruct_T mystruct_var;

那么mystruct_var就是一个结构体变量,可以通过如下结构体变量右侧加点来访问结构体变量中的元素,比如:

mystruct_var.a = 30;

或者:

tmp = mystruct_var.c;

这样,我们就有了结构体类型 mystruct_T 和结构体变量 mystruct_var。

我们做一个假设,如果上述结构体里面的元素 c 不是一个单个元素,而是一个结构体变量,情况将会怎么样?比如:

struct mystruct_T

{

uint8 a;

int16 b;

substruct_T c;

};

结构体里面还套着一个结构体,于是我们就有了结构体嵌套。

我们在 C 语言中定义变量的时候,可以定义单个变量,也可以定义一个数组,比如:

int8 x[10];

结构体类型同样也可以用于定义结构体数组,比如

mystruct_T mystruct_array[10]

这样,我们就有了结构体数组。

下面我们一起看看如何在模型里建模或者配置,让生成的 C 代码里出现结构体变量、结构体嵌套和结构体数组。

开始介绍之前,请大家记住两点:

C 代码中的结构体变量跟模型中的 Bus 信号相对应

C 代码中的结构体类型跟模型中的 Bus 对象相对应

一. 结构体变量的代码实现

有模型如下:

关于结构体变量建模的介绍和原理

数据字典中有 Bus对象 myBus 定义如下:

关于结构体变量建模的介绍和原理

将 Inport 端口的数据类型设置为 myBus,Inport 的外观发生变化,变成环形。为控制结构体变量的变量名如我们所期望,在信号线上设置信号名 x、y。然后在数据字典中分别定义信号对象 x、y。将 x、y 的数据类型设置为 myBus,如下图:

关于结构体变量建模的介绍和原理

当然,x、y 的存储类设置跟非结构体代码生成一样,这里分别设置为 ImportedExtern 和 ExportedGlobal。

除此之外,还需要把 BusCreator 的输出数据类型设置为 myBus,如果你没做这个设置, Embeded Coder 会提醒你设置。

做好上述设置,以及代码生成的基本设置之后,Build 模型,代码就有了,你会发现结构体类型 myBus 的定义如下:

typedef struct

{

real_T a;

real_T b;

real_T c;

} myBus;

变量 y 的定义如下:myBus y;

变量 x 的声明如下:extern myBus x;

二. 结构体嵌套的代码实现

在上述例子中的数据字典中再定义一个 Bus 对象 subBus,如下图:

关于结构体变量建模的介绍和原理

再将 myBus 中的元素 c 的数据类型改为 subBus,模型做相应的调整如下:

关于结构体变量建模的介绍和原理

Build 模型,代码中 myBus 的定义如下:

typedef struct

{

real_T a;

real_T b;

subBus c;

} myBus;

其中 subBus 定义如下:

typedef struct

{

real_T u;

real_T v;

} subBus;

数据字典中信号对象 x 和 y 的定义跟前面的例子一样,结构体变量 x 和 y 在代码中的定义也跟前面的例子一样,整个算法的实现函数如下:

void nestStructModel_step(void)

{

y.a = K * x.a;

y.b = K * x.b;

y.c.u = K *x.c.u;

y.c.v = K *x.c.v;

}

很显然,结构体嵌套,对应到模型中,就是 Bus 嵌套。

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

    关注

    30

    文章

    4941

    浏览量

    73151
  • 变量
    +关注

    关注

    0

    文章

    615

    浏览量

    29371
  • 结构体
    +关注

    关注

    1

    文章

    131

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    关于NFC镍锌铁氧体片的介绍

    关于NFC镍锌铁氧体片的介绍
    的头像 发表于 12-04 10:52 53次阅读
    <b class='flag-5'>关于</b>NFC镍锌铁氧体片的<b class='flag-5'>介绍</b>

    为什么不建议用匿名结构

    说起匿名结构,想必大家第一感觉就是看着好高大上的名字,但实际上也就那样。 typedef struct { union { struct { uint8_t bit_0:1
    发表于 12-04 07:39

    使用typede的f优势介绍

    可以让代码更加清晰简洁使用typedef,我们可以在定义一个结构、联合、枚举变量时,省去关键字struct,让代码更加简洁。 typedef struct student { char
    发表于 11-26 08:15

    常用变量介绍

    extern:用在全局变量上表示该变量在其他文件中已经定义;用在函数上作用同全局变量; static:用在全局变量上,和非静态全局变量相比,
    发表于 11-21 07:05

    C语言结构使用

    有时候需要将不同类型的数据组合为一个整体,以便于引用。例如,一名学生有学号、姓名、性别、年龄等属性,如果针对每个属性都单独定义一个变量,那么当有多名学生时变量就难以分清。结构就是用来
    发表于 11-12 08:30

    【产品介绍】Altair MotionView支持多仿真与优化软件

    AltairMotionView支持多仿真与优化AltairMotionView革新了多仿真、可视化和优化。与AltairMotionSolve相结合,可提高工程生产力并加速设计迭代。凭借
    的头像 发表于 09-19 17:02 607次阅读
    【产品<b class='flag-5'>介绍</b>】Altair MotionView支持多<b class='flag-5'>体</b>仿真与优化软件

    定义IO初始化结构

    由上述IOPORT相关功能的枚举类型我们可以知道,在对IOPORT模块进行初始化时需要根据情况配置它们。因此我们定义一个IOPORT初始化的结构类型IOPORT_Init_t,它的成员包括了由上述所有枚举类型所声明的变量,因此
    的头像 发表于 07-16 16:26 1107次阅读

    TechWiz LCD 2D应用:不同结构下的VT曲线

    我们可以在TechWiz LCD 2D软件中调整电极的宽度,锥度,厚度和位置。 1. 案例结构 2. 建模过程 2.1在TechWiz LCD 2D中创建结构 2.2将com电极两个掩膜的宽度均
    发表于 06-13 08:44

    渗压计在混凝土结构中的安装指南

    在现代土木工程和岩土工程中,渗压计是监测混凝土结构体内孔隙水压力变化的重要工具。南京峟思公司生产的渗压计因其高精度和可靠性而被广泛应用于各种工程监测项目中。一、渗压计在混凝土结构中的应用价值渗压计
    的头像 发表于 05-28 10:55 383次阅读
    渗压计在混凝土<b class='flag-5'>结构</b><b class='flag-5'>体</b>中的安装指南

    程序设计与数据结构

    《程序设计与数据结构》重点阐述了三大方向内容: 1. C语言学习中的痛点:针对当前工程师在C语言学习中的痛点,如指针函数与函数指针,如何灵活应用结构等。从变量的三要素(
    发表于 05-13 16:45

    概伦电子先进器件建模平台BSIMProPlus介绍

    BSIMProPlus是一款技术先进的半导体器件SPICE模型建模平台,在其多年的产品历史中一直保持在半导体行业SPICE建模市场和技术的领先地位,被众多集成电路制造和设计公司采用作为标准SPICE建模工具。
    的头像 发表于 04-16 09:03 1257次阅读
    概伦电子先进器件<b class='flag-5'>建模</b>平台BSIMProPlus<b class='flag-5'>介绍</b>

    TechWiz LCD 2D应用:不同结构下的VT曲线

    我们可以在TechWiz LCD 2D软件中调整电极的宽度,锥度,厚度和位置。 1. 案例结构 2. 建模过程 2.1在TechWiz LCD 2D中创建结构 2.2将com电极两个掩膜的宽度均
    发表于 02-06 10:18

    VirtualLab:系统建模分析器

    ,系统建模分析器。本文档介绍该工具的使用方法。 系统建模分析器 如何运行建模分析器 系统建模分析器 例1:光束清理滤波器 示例 – 光
    发表于 01-14 09:45

    TechWiz LCD 3D应用:表面反射(底面)

    TechWiz软件可以考虑显示面板每层的多次反射来计算表面反射,之前我们曾介绍关于外部光源的反射,本例将介绍关于底部(即从背光源一侧发出)的光源的反射的计算 使用Surface
    发表于 12-26 08:56

    VirtualLab Fusion应用:用于抑制高衍射级次的角滤波光栅

    ,以抑制不需要的高衍射阶数。为此,首先分析了光栅的角度灵敏度。 最后,通过使用 VirtualLab Fusion 进行仿真,显示了对不期望的高衍射级次的抑制效果。 建模任务 volume
    发表于 12-09 12:51