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

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

3天内不再提示

分享Simulink子系统生成单独的子函数的教程

MATLAB 来源:djl 作者:柚籽 2019-09-17 09:02 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

我们写 C 代码的时候,为了主程序结构清晰,通常会把具有独立功能的代码变成子函数的形式。类似的,为了 Simulink 模型结构清晰,我们在模型里也经常会用把具一片实现某种功能的模块变成子系统的形式。

那么,如果我希望这些Simulink 子系统在自动代码生成时,也能真的生成单独的子函数,该如何配置呢?

把某个子系统编程函数调用

要得到:

自动生成代码时,让某个 Simulink 子系统的算法生成单独子函数形式。

怎么做:

把该子系统变为元胞子系统 (Atomic Subsystem),并配置子系统的代码生成选项。

举个例子

1. 模型

这是在前一篇帖子最后用到的一个模型。MATLAB Function 里面写了一个循环语句,并在循环内部调用了外部子系统 func:

分享Simulink子系统生成单独的子函数的教程

它所生成的代码如下图。可以看到 Simulink 子系统 func 在生成代码后,具体的 C 代码并不会平铺在主程序里。它而是作为一个函数调用的形式出现的的 func( ):

分享Simulink子系统生成单独的子函数的教程

2. 设置

这是因为对该模块的属性做了设置,如下图。

首先右键点击模型,打开 Block Parameters 界面,首先要在 Main 的页面将子系统勾选为Atomic Subsystem。只不过在这个案例模型里,由于 func 是触发子系统,默认就是 Atomic 的。

然后,点开出现的 Code Generation 页面,将 Function packaging 配置为 Nonresusable function,主函数调用它时通过全局变量来传递数据(总之不选择 Inline 和 Auto)。

分享Simulink子系统生成单独的子函数的教程

也可以设置为 Reusable ,这时主程序调用它的时候,会通过传参的方式来进行数据传递。最后生成的代码如下图:

分享Simulink子系统生成单独的子函数的教程

模型的默认设置是 Auto,所以在这种情况下,代码生成工具会把这个子系统的算法代码写在主程序里,而不会采用函数调用的方式,如下图:

分享Simulink子系统生成单独的子函数的教程

总结

如果希望某个子系统的 C 代码单独生成一个子函数,那么:

把子系统配置为元胞子系统(Atomic Subsystem);

设置 Code Generation 属性为 Reusable 或者 NonReusable。

另外,不仅可以将子系统的代码放在单独的子函数里,还可以配置放在单独的文件(在配置菜单里指定文件名即可)里。

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

    关注

    90

    文章

    3707

    浏览量

    96765
  • 函数
    +关注

    关注

    3

    文章

    4406

    浏览量

    66839
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    MXAM常见问题解答:从配置到报告生成#simulink模型测试 #simulink

    Simulink
    北汇信息POLELINK
    发布于 :2025年11月14日 11:48:38

    使用Simulink自动生成浮点运算HDL代码(Part 1)

    引言 想要实现浮点运算功能,如果自己写Verilog代码,需要花费较多的时间和精力。好在Simulink HDL Coder工具箱提供了自动代码生成技术。下图展示了HDL Coder如何生成浮点运算
    发表于 10-22 06:48

    rtthread线程出现异常了,有没有什么钩子函数能够定义用户操作?

    线程出现异常了,有没有什么钩子函数能够定义用户操作????
    发表于 09-18 06:36

    迅为RK3568开发板新增topeet子系统-在产品中新增子系统

    build/subsystem_config.json文件中增加名为topeet的子系统,在3.4节已经新建了topeet 文件夹存放子系统代码。添加 topeet 子系统进行一个登记,说明
    发表于 06-16 10:43

    迅为RK3568开发板驱动指南GPIO子系统GPIO子系统API函数的引入

    迅为RK3568开发板驱动指南GPIO子系统GPIO子系统API函数的引入
    的头像 发表于 05-29 14:05 834次阅读
    迅为RK3568开发板驱动指南GPIO<b class='flag-5'>子系统</b>GPIO<b class='flag-5'>子系统</b>API<b class='flag-5'>函数</b>的引入

    迅为RK3568驱动指南GPIO子系统 GPIO操作函数实验

    迅为电子RK3568开发板驱动指南GPIO子系统 GPIO操作函数实验
    的头像 发表于 05-28 15:24 1046次阅读
    迅为RK3568驱动指南GPIO<b class='flag-5'>子系统</b> GPIO操作<b class='flag-5'>函数</b>实验

    迅为RK3568开发板驱动指南GPIO子系统三级节点操作函数实验

    迅为RK3568开发板驱动指南GPIO子系统三级节点操作函数实验
    的头像 发表于 05-26 15:39 1267次阅读
    迅为RK3568开发板驱动指南GPIO<b class='flag-5'>子系统</b>三级节点操作<b class='flag-5'>函数</b>实验

    RK3568驱动指南|第十二篇 GPIO子系统-第135章 GPIO子系统与pinctrl子系统相结合实验

    RK3568驱动指南|第十二篇 GPIO子系统-第135章 GPIO子系统与pinctrl子系统相结合实验
    的头像 发表于 05-23 13:47 748次阅读
    RK3568驱动指南|第十二篇 GPIO<b class='flag-5'>子系统</b>-第135章 GPIO<b class='flag-5'>子系统</b>与pinctrl<b class='flag-5'>子系统</b>相结合实验

    飞凌嵌入式ElfBoard ELF 1板卡-input子系统之input子系统简介

    在Linux系统中,Input子系统是一个用于处理输入设备的软件框架。它提供了一种统一的接口和机制,使得各种输入设备(如键盘、鼠标、触摸屏、游戏手柄等)能够与Linux系统进行交互。Input
    发表于 04-15 10:27

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-Pinctrl和GPIO子系统之GPIO子系统

    软件控制设备上的GPIO信号。在Linux的GPIO子系统中,提供了一组API函数来管理和操作GPIO引脚。以下是一些常用的GPIO子系统API函数:gpio_request():请求
    发表于 03-25 13:29

    飞凌嵌入式ElfBoard ELF 1板卡-Pinctrl和GPIO子系统之GPIO子系统

    软件控制设备上的GPIO信号。在Linux的GPIO子系统中,提供了一组API函数来管理和操作GPIO引脚。以下是一些常用的GPIO子系统API函数:gpio_request():请求
    发表于 03-24 15:41

    window 10系统生成的安装包程序在win7上运行,我生成时也选了配置win7,但是还是报需要win10以上配置系统

    window 10系统生成的安装包程序在win7上运行,我生成时也选了配置win7,但是还是报需要win10以上配置系统,怎么解决啊
    发表于 01-02 14:33

    Simulink与 Simscape的结合使用

    。用户可以利用 Simulink 进行系统建模、仿真、测试和验证,以及生成代码。 Simscape 简介 Simscape 是一个用于创建基于物理的模型的仿真环境。它提供了一个库,包含各种物理组件,如机械、电气、液压和热力
    的头像 发表于 12-12 09:31 2693次阅读

    Simulink与 MATLAB 的结合使用 Simulink中的信号处理方法

    在工程和科学研究中,信号处理是一个重要的领域,涉及到信号的采集、分析、处理和生成。MATLAB 提供了丰富的信号处理工具箱,而 Simulink 提供了一个直观的图形界面,使得复杂的信号处理系统可以
    的头像 发表于 12-12 09:25 2193次阅读

    Simulink自定义模块开发教程 Simulink 在控制系统中的应用

    在控制系统的设计和分析中,Simulink 提供了一个强大的工具集,允许工程师通过图形化界面快速构建和测试复杂的系统模型。然而,Simulink 的标准库可能不包含所有特定的功能,这时
    的头像 发表于 12-12 09:21 3115次阅读