打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
怎样生成我想要的C代码系列 | 集成外部C代码到Simulink模型

作者简介

柚籽,MATLAB中文论坛(http://www.ilovematlab.cn) 超级版主,MATLAB/Simulink高级应用工程师,同济大学机械电子工程专业硕士学位,专注于物理系统的建模仿真,在论坛回答问题超过1700个,分享大量Simulink应用学习资源

我原来写了一些很漂亮的 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,查到的结果作为返回值。

2. 函数调用

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

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


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


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


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


3. 在Workspace 里定义数据对象

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

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

4. 并把该模型生成代码

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


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

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

总结

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
怎样生成我想要的 C 代码系列(8)
控制策略模型建模规范(总则)
MATLAB Simulink和Stateflow的控制算法建模指南-MAB 5.0 1-100页(MAAB)
在 MATLAB 和 Simulink 中设计制导系统
Matlab/Simulink建模规范(1)— 命名规范
基于模型的嵌入式C代码的实现与验证 测控论文 自动化论文 测控技术文库
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服