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

    文章

    3591

    浏览量

    93593
  • 函数
    +关注

    关注

    3

    文章

    4304

    浏览量

    62428
  • 代码
    +关注

    关注

    30

    文章

    4746

    浏览量

    68348
收藏 人收藏

    评论

    相关推荐

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

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

    FPGA仿真黑科技\"EasyGo Vs Addon \",助力大规模电力电子系统仿真

    可以轻松地将其与各种硬件和协议连接,增强测试系统的灵活性。二、产品亮点▍超强FPGA芯片与接口配置,助力大规模电力电子系统仿真EasyGo Vs Addon支持的PXIe 7891搭载全新
    发表于 10-23 18:18

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

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

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

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

    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 3701次阅读
    <b class='flag-5'>Simulink</b>自动<b class='flag-5'>生成</b>代码现阶段的学习笔记

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

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

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

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

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

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

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

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

    简述智能制造系统的组成 智能制造系统子系统包括哪些

    智能制造系统是一种基于先进技术和智能化的制造方式,它包括多个子系统,每个子系统都扮演着重要的角色。下面详细介绍智能制造系统的组成和各个子系统
    的头像 发表于 01-19 10:36 2568次阅读

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

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

    HAL库常用函数汇总

    1,系统函数HAL_Delay原型:voidHAL_Delay(uint32_tDelay);作用:利用滴答定时器生成系统延迟函数参数:D
    的头像 发表于 11-29 08:00 3164次阅读
    HAL库常用<b class='flag-5'>函数</b>汇总