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。

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

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

    关注

    88

    文章

    3439

    浏览量

    92375
  • 函数
    +关注

    关注

    3

    文章

    3865

    浏览量

    61307
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66736
收藏 人收藏

    评论

    相关推荐

    子函数多层调用的主要注意事项分析

    应用方案设计中,开发者经常会碰到某个子函数需要多次多级调用的情况。
    的头像 发表于 03-27 15:36 186次阅读
    <b class='flag-5'>子函数</b>多层调用的主要注意事项分析

    simulink自动生成ROS代码

    当我们用simulink完成控制程序的搭建后,我们期望下一次可以直接对ROS进行控制,而不是每次都需要启动matlab和simulink,因此我们可以使用simulink的代码生成器,
    的头像 发表于 11-15 17:53 333次阅读
    <b class='flag-5'>simulink</b>自动<b class='flag-5'>生成</b>ROS代码

    如何才能在51系统下使用类似printf这样的可变参数的子函数呢?

    增加3个字节的地址,这样就没用办法使用“...”,来传递参数了,如何才能在51系统下使用类似printf这样的可变参数的子函数呢?
    发表于 10-30 08:27

    利用Simulink自动生成STM32串口代码

    功能:利用Simulink自动生成STM32串口代码,在Keil中编译后直接下载到主芯片,实现串口通讯的功能。
    的头像 发表于 10-25 17:04 1032次阅读
    利用<b class='flag-5'>Simulink</b>自动<b class='flag-5'>生成</b>STM32串口代码

    SIMULINK下基带传输系统的设计

    电子发烧友网站提供《SIMULINK下基带传输系统的设计.pdf》资料免费下载
    发表于 10-18 09:58 1次下载
    <b class='flag-5'>SIMULINK</b>下基带传输<b class='flag-5'>系统</b>的设计

    什么是HOOK函数?HOOK函数的用途和用法

    市面上绝大多数操作系统,都存在这样一类API函数接口:HOOK函数(也叫钩子函数)。
    发表于 09-13 09:31 746次阅读
    什么是HOOK<b class='flag-5'>函数</b>?HOOK<b class='flag-5'>函数</b>的用途和用法

    C++生成Dll与回调函数测试

    描述了VS环境下,通过C++生成dll的方法,测试回调函数
    的头像 发表于 08-29 16:05 635次阅读
    C++<b class='flag-5'>生成</b>Dll与回调<b class='flag-5'>函数</b>测试

    如何使用M258访问USB DISK的FAT文件系统生成PDF

    应用程序:本样本代码演示了如何使用M258访问USB DISK的FAT文件系统生成PDF。 BSP 版本: M251/M252/M254/M254/M256/M256/M258 BSP CMSIS
    发表于 08-29 06:54

    空闲任务钩子函数详解

    空闲任务钩子函数详解 1、钩子函数 FreeRTOS中有多个钩子函数,钩子函数类似回调函数,当某个功能(
    的头像 发表于 07-30 10:57 610次阅读
    空闲任务钩<b class='flag-5'>子函数</b>详解

    MBD的Simulink使用技巧:详解代码生成中的模型与代码(2)

    上一篇文章中提到,生成嵌入式代码,必须选择定步长求解器。实际中,生成嵌入式代码几乎不会使用Simulink模型库中的连续模型,往往需要通过最简单的离散模块来实现算法模型。
    的头像 发表于 07-13 15:13 2954次阅读
    MBD的<b class='flag-5'>Simulink</b>使用技巧:详解代码<b class='flag-5'>生成</b>中的模型与代码(2)

    MBD的Simulink使用技巧:Simulink代码生成的基本概念(1)

    MATLAB/Simulink中一共提供三个代码生成的工具
    的头像 发表于 07-13 15:11 1401次阅读
    MBD的<b class='flag-5'>Simulink</b>使用技巧:<b class='flag-5'>Simulink</b>代码<b class='flag-5'>生成</b>的基本概念(1)

    操作系统生成(2)#操作系统

    操作系统
    学习硬声知识
    发布于 :2023年05月25日 18:30:28

    操作系统生成(1)#操作系统

    操作系统
    学习硬声知识
    发布于 :2023年05月25日 18:29:51

    在main函数中运行的自动机

    然后我们试图将他们组装起来,因为一开始实现的都是零件(子函数)部分,本文主要介绍在main函数中运行的自动机。
    的头像 发表于 05-23 11:18 453次阅读
    在main<b class='flag-5'>函数</b>中运行的自动机

    从配置工具/MCUxpresso为LPC553x系统生成的代码的问题求解

    嗨,我遇到了从配置工具/MCUxpresso 为 LPC553x 系统生成的代码的问题。 时钟工具不了解电源管理控制器 (PMC) 对 FRO1M 或 FRO12M 时钟的依赖性。时钟工具可以配置为
    发表于 05-22 07:29