基于模型开发之代码集成(二)——Le…
来源:互联网 发布:js 调用java代码 编辑:程序博客网 时间:2024/05/22 00:24
Legacy CodeTool是Matlab中的一个命令行工具,它可以很方便的将已有的C代码或者C++代码(注:不支持C++对象)与模型结合起来。
可以将C或C++代码编译生成用于仿真的S-fuction;也可以生成一个封装了外部C代码参数化的S-fuction模块。使用过程非常的简便,但是也有一些限制,所以当你已有的代码不是C或者系统比较复杂,比如包含了控制器和运行环境的混合系统,关于代码的集成可能还是要求助于S-Fuctionbuilder活着手写S-fuction来解决。
好了别的不多讲,下面先简单介绍一下Legacy Code Tool的工作步骤:
1 、首先生成一个特定的Legacy CodeTool的参数集(其实也就是一个结构体变量),这个参数集指定了你要包含的C代码,头文件,以及生成s-fuction的名称等等诸多信息。
2、通过Legacy Code Tool的命令行语句调用第一步配置好的参数集变量,生成相应的S-fuction源文件;
3、通过Legacy CodeTool的命令行语句编译生成的S-fuction源文件,使其变为可动态加载的执行文件,在32位windows系统中也就是mexw32文件;
4、如果需要还可以使用Legacy CodeTool的命令行语句将上面生成s-fuction执行文件封装成simulink模块。
基本上用Legacy CodeTool来集成C代码的应用也就是上面这么四步,大致有个概念后我们实际先来看一个简单的例子,之后我们在对每一个步骤进行详细的介绍,然后再做一些复杂点的应用。
这里说的例子是matlab的help中的一个简单例子,用C语言写的将输入放大两倍的函数:
1、准备好你的C文件和相应的头文件,如下:
double doubleIt(double inVal)
{
}
#ifndef _DOUBLEIT_H_
#define _DOUBLEIT_H_
double doubleIt(double inVal);
#endif
2、定义一个Legacy Code Tool参数集变量,变量名为def,在matlab命令行中输入如下命令
legacy_code()就是matlab中Legacy CodeTool的功能函数,'initialize'是该函数其中的一个功能参数,即初始化一个参数集变量,如果上述语句在输入回车时没有打分号,可以看到matlab命令行中反馈的如下内容:
InitializeConditionsFcnS
3、针对我们这个小例子,只需要指定其中的四项:源文件、头文件、S-fuction的名字、S-fuction的输出函数,同样使用命令行的方式进行参数的配置,如果源文件和头文件在当前目录下,可以在matlab命令行中输入下面语句:
def.SourceFiles = {'doubleIt.c'};
def.HeaderFiles = {'doubleIt.h'};
def.SFunctionName = 'ex_sfun_doubleit';
def.OutputFcnSpec = 'double y1 = doubleIt(double u1)';
4、完成上述配置后,在matlab命令行输入下面的命令,生成相应的S-fuction源文件
可以看到在matlab当前工作目录下生成了相应的S-fuction源文件:ex_sfun_doubleit.c
5、然后,继续在matlab命令行输入下面的命令,对生成相的S-fuction源文件进行编译
这里要注意,必须事先配置matlab所要使用的C语言编译器,否则这一步会无法执行,一般32位matlab安装的时候会附带有一个LCC的编译器,也可以安装任何matlab可识别的编译器,然后使用mex -setup命令,按照matlab中的提示设定好默认的编译器。
在编译的过程中,Matlab的命令行中会输出相应的文字提示,例如:
###Start Compiling……
……
### Finish Compiling ex_sfun_doubleit
### Exit
6、最后,在matlab命令行输入下面的命令,可以利用前面编译的可执行文件生成一个S-fuction的simulink模块。
生成的模块如下图所示:
大家可以分别给模块加上输入信号和示波器,看一下模块运行的结果应该和C语言的意图一致。
这一部分的内容基本上来自于Matlab的Help,第二部分讲会详细介绍下legacy_code命令的使用方法和参数集中参数的含义。
- 基于模型开发之代码集成(二)——Le…
- 基于模型开发之代码集成(三)——Le…
- 基于模型开发之代码集成(四)——Le…
- 基于模型开发之代码集成(五)——Le…
- 基于模型开发之代码集成——LegacyCodeTool
- 基于模型开发之代码集成(一)
- 【Vuforia】基于Vuforia增强现实开发(二)之模型移动
- 企业持续集成成熟度模型简介之二——部署
- 基于模型开发过程之变量篇——枚举量…
- 杭电ACM 2045不容易系列之(3)—— LE…
- iphone开发中数据持久化之——模型对象归档(二)
- 基于模型设计的FPGA开发与实现:基本流程(一)之入门小例子(二):秒表
- Android开发之蓝牙(二)——基于BLE协议蓝牙模块通信
- J2ME 拼图游戏 快速开发 全过程 之代码祥解(2 )——游戏数据库与游戏模型开发
- IOS开发之—-代码块的使用(二)
- Android之Box2D学习(二)——简单的跑跳游戏模型(含代码)
- Java开发代码规范之编程规约(二)——常量定义
- Java开发代码规范之异常日志(二)——日志规约
- [转载]Freescale 16位单片机…
- 重要的#pragma声明
- Simulink建模之模型的构建风格(一…
- Simulink建模之模型的构建风格(二…
- 基于模型开发之代码集成(一)
- 基于模型开发之代码集成(二)——Le…
- 基于模型开发之代码集成(三)——Le…
- 基于模型开发之代码集成(四)——Le…
- 基于模型开发之代码集成(五)——Le…
- [转]SIMULINK与模型覆盖测试
- 抢购应用设计思路
- freescale中的RELOCATE_TO宏…
- 基于模型开发过程之变量篇——枚举量…
- 人生没有过不去的坎