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

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

3天内不再提示

关于的集成外部C代码到Simulink模型分析和介绍

MATLAB 来源:djl 作者:柚籽 2019-09-16 16:36 次阅读

我原来写了一些很漂亮的 C 函数,写得非常不错,想把它集成到 Simulink 环境中来,怎么办?

点击末尾的 “阅读原文” 下载本文的案例模型

集成外部C代码到Simulink模型

要得到:

把自己编写的 C 函数集成到 Simulink 模型中

怎么做:

Simulink 提供了多种方法来集成外部的 C 代码。从简单到复杂来看,可以:

使用 Stateflow;

使用 MATLAB Function 模块;

使用 Legacy Code Tool 构造 S-fcn 模块;

自己写 S-fcn

只介绍简单的方法

1.假设已有代码 table1D.c 以及 table1D.h

table1D 是个简单的 1 维查表函数。这是它的函数原型。第1、2个输入是表格数据,第 3 个输入是表格长度数据,第 4 个输入就是要查找的 x,查到的结果作为返回值。

关于的集成外部C代码到Simulink模型分析和介绍

2. 函数调用

我现在希望在 Simulink 环境下使用这个查表函数。当前的应用场景是:在给定表格的情况下,通过输入 u 查出相应的 y 出来。

关于的集成外部C代码到Simulink模型分析和介绍

在Stateflow中,参照 .h 文件里定义的函数原型直接调用这个函数:

关于的集成外部C代码到Simulink模型分析和介绍

然后如下图说明一下各个变量:u 是这个 Chart 模块的输入,y 是 Chart 的输出, uMap,yMap,n 是固定的表格参数

关于的集成外部C代码到Simulink模型分析和介绍

在MATLAB Function模块中,需要使用到coder.ceval调用这段代码,引用传递使用 coder.rref:

关于的集成外部C代码到Simulink模型分析和介绍

跟 Stateflow 类似,在 MATLAB Function 中也需要对 m 脚本里用到的各个变量名做一个说明。

关于的集成外部C代码到Simulink模型分析和介绍

3. 在Workspace 里定义数据对象

再来看 Simulink 模型,它现在有 4 个信号

关于的集成外部C代码到Simulink模型分析和介绍

我希望控制这 4 个信号的名字以及定义方式,所以新建这 4 个信号对应的数据对象。另外,也给之前的 3 个参数定义对应的数据对象。

关于的集成外部C代码到Simulink模型分析和介绍

4.并把该模型生成代码

Ctrl + B,得到如下所示,两句函数调用的语句:

关于的集成外部C代码到Simulink模型分析和介绍

另外,为了保证模型的正确编译链接,生成代码之前还需要在源文件中 include 手写的 .h 文件。如图,要在模型.h 文件中增加这一行 include 的代码。

关于的集成外部C代码到Simulink模型分析和介绍

那这一行 include 是怎么加进去的呢?如下页面得到:

关于的集成外部C代码到Simulink模型分析和介绍

总结

使用 Stateflow 以及 MATLAB Function 模块可以很方便的集成外部的 C 代码。

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

    关注

    3

    文章

    4304

    浏览量

    62422
  • C代码
    +关注

    关注

    1

    文章

    89

    浏览量

    14286
收藏 人收藏

    评论

    相关推荐

    阿里云开源Qwen2.5-Coder代码模型系列

    Qwen2.5-Coder-32B-Instruct,在代码生成领域取得了显著成就。据官方介绍,该模型在EvalPlus等十多个主流的代码生成基准测试中,均刷新了开源
    的头像 发表于 11-14 11:28 275次阅读

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

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

    新的 MathWorks 硬件支持包支持从 MATLAB 和 Simulink 模型高通 Hexagon 神经处理单元架构的自动化代码生成

    ® 和 Simulink® 模型的自动化代码生成流程。在提高数据准确度和标准合规性的同时,也提升开发人员的工作流效率。使用 MathWorks 软件和基于模型的设计,工程师能够
    的头像 发表于 09-23 11:59 211次阅读

    介绍FIR滤波模型的建立,分4个步骤

    本帖介绍FIR滤波模型的建立,分以下几个步骤: 选定滤波结构:低通、高通、带通、带阻; 选定合适的窗函数,常见的有hamming、hanning、blackman、ExactBlackman
    发表于 09-04 09:08

    【《大语言模型应用指南》阅读体验】+ 俯瞰全书

    的大语言模型设计技术人员阅读,主要包括大语言模型的优化方法、Agent系统调优以及模型的安全技术。 展望篇分析了大语言模型的发展前景,
    发表于 07-21 13:35

    导入keras或者onnx模型cubeai进行分析,为什么会报错?

    请问我导入keras或者onnx模型cubeai进行分析,为什么会报错,而且没有报错内容,cubeai版本9.0.0。换成8.1.0版本后报错内容是invalid network。该怎么入手解决。
    发表于 07-03 07:55

    Vivado 使用Simulink设计FIR滤波器

    领域都有着广泛的应用。 Vivado自带的FIR滤波器IP核已经很好用,这里借FIR滤波器的设计,介绍Simulink图形设计编程方法。Simulink可以使设计更直观,使硬件资源得到更为高效的利用
    发表于 04-17 17:29

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

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

    电路仿真软件simulink的工作原理

    Simulink是MATLAB的一个模块,它采用图形化的方式来创建动态系统模型并进行仿真分析Simulink的工作原理主要基于模块化的建模和仿真方式。
    的头像 发表于 03-29 15:21 1516次阅读

    使用CUBEAI部署tflite模型STM32F0中,模型创建失败怎么解决?

    看到CUBE_AI已经支持STM32F0系列芯片,就想拿来入门嵌入式AI。 生成的模型很小,是可以部署F0上的,但是一直无法创建成功。 查阅CUBE AI文档说在调用create函数前,要启用
    发表于 03-15 08:10

    如何提高Simulink仿真性能呢?有哪些使用技巧?

    无论模型的复杂程度如何,每个 Simulink 用户都希望提高仿真性能。本文介绍了许多实用技巧和技术,来帮助您在仿真工作流中获得最佳的性能。
    的头像 发表于 01-18 10:01 949次阅读
    如何提高<b class='flag-5'>Simulink</b>仿真性能呢?有哪些使用技巧?

    使用仿真模型进行拓扑分析

    过去,仿真的基础是行为和具有基本结构的模型,它们主要适用于简单集成电路技术中使用的器件。但是,当涉及功率器件时,这些简单的模型通常无法预测与为优化器件所做的改变相关的现象。现在,通过
    的头像 发表于 01-05 10:04 880次阅读
    使用仿真<b class='flag-5'>模型</b>进行拓扑<b class='flag-5'>分析</b>

    SaberRD调用外部C程序仿真步骤

    Saber不仅支持MAST语言和VHDL-AMS语言建立模型,也支持C语言建立器件模型,这对熟悉C语言编程的用户带来了很大的方便和实用。采用C
    的头像 发表于 12-06 14:17 1032次阅读
    SaberRD调用<b class='flag-5'>外部</b><b class='flag-5'>C</b>程序仿真步骤

    任意单片机基于simulink模型开发方式

    使用Arduino在simulink中搭建的LED闪烁的一个例子如图1所示,相比之前C语言代码实现的方式,这里没有写一行代码就实现了LED闪烁。读者有没有感觉这种开发方式即简单又方便,
    的头像 发表于 11-30 15:27 760次阅读
    任意单片机基于<b class='flag-5'>simulink</b><b class='flag-5'>模型</b>开发方式

    从HumanEvalCoderEval: 你的代码生成模型真的work吗?

    本文主要介绍了一个名为CoderEval的代码生成大模型评估基准,并对三个代码生成模型(CodeGen、PanGu-Coder和ChatGP
    的头像 发表于 11-25 15:55 1649次阅读
    从HumanEval<b class='flag-5'>到</b>CoderEval: 你的<b class='flag-5'>代码</b>生成<b class='flag-5'>模型</b>真的work吗?