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

    文章

    3616

    浏览量

    93763
  • 函数
    +关注

    关注

    3

    文章

    4332

    浏览量

    62666
  • 代码
    +关注

    关注

    30

    文章

    4790

    浏览量

    68653
收藏 人收藏

    评论

    相关推荐

    Simulink与 Simscape的结合使用

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

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

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

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

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

    Matlab/Simulink/Stateflow建模开发及仿真测试

    matlab 模拟仿真 熟悉Matlab/Simulink/Stateflow建模开发及仿真测试,熟悉V模型开发流程。 熟悉自动代码生成,能够编写或者配置自动代码生成脚本。
    发表于 10-24 17:23

    RTOS中钩子函数的用途及用法

    在很多操作系统中,都存在这样一类API函数接口:HOOK函数(也叫钩子函数)。
    的头像 发表于 10-23 16:25 280次阅读
    RTOS中钩<b class='flag-5'>子函数</b>的用途及用法

    如何由系统函数求频率响应

    频率响应函数表征了测试系统对给定频率下的稳态输出与输入的关系,可以通过系统函数(或称为传递函数)来求解。以下是由
    的头像 发表于 10-18 09:32 1250次阅读

    PRU子系统特性比较

    电子发烧友网站提供《PRU子系统特性比较.pdf》资料免费下载
    发表于 09-03 11:13 0次下载
    PRU<b class='flag-5'>子系统</b>特性比较

    simulink动态系统建模仿真-第9章

    电子发烧友网站提供《simulink动态系统建模仿真-第9章.ppt》资料免费下载
    发表于 07-26 11:47 1次下载

    IAR库函数中断服务程序中无法调用子函数是为什么?

    为什么在中断服务函数里无法调用?定义的变量也不能用!求大神帮忙解决问题!子函数怎么写,写到哪,才能用?实在是不知道怎么办了。
    发表于 05-08 08:01

    Simulink自动生成代码现阶段的学习笔记

    在车载控制器的软件开发中,simulink的身影几乎随处可见,主要是在控制算法和控制逻辑的实现。平时看同事点点点就生成代码了,看起来很简单,但是实际操作起来确各种磕磕绊绊。 下面记录了一下步骤作为现阶段的学习笔记吧。
    的头像 发表于 04-17 10:56 3920次阅读
    <b class='flag-5'>Simulink</b>自动<b class='flag-5'>生成</b>代码现阶段的学习笔记

    CUBEMX配置文件系统生成工程时提示有误是什么原因导致的?

    使用CUBEMX配置文件系统准备生成工程时提示有误,如果忽略提示强行生成工程时编译倒是也没问题。
    发表于 04-16 07:44

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

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

    在做simulink+tasking自动代码生成时,编译找不到底层文件是为什么?

    在做simulink+tasking自动代码生成时,编译找不到底层文件,将文件添加进去后,会出现RT或NRT等重复定义
    发表于 02-20 08:06

    simulink常用模块有哪些 simulink模块执行顺序

    Simulink是一个基于图形的仿真环境,广泛应用于动态系统和控制设计的多领域建模和仿真。
    的头像 发表于 02-18 17:18 4397次阅读

    DC2100B/A能不能支持MATLAB/simulink自动代码生成

    1、硬件方面,微控制器是主要有几种,计算能力如何,可以支持类似MPC的算法吗?能不能扩展DSP的控制器? 2、软件方面,能不能支持MATLAB/simulink自动代码生成
    发表于 01-11 06:56