MATLAB与C读书笔记_matlab与c读书笔记

2020-02-28 其他范文 下载本文

MATLAB与C读书笔记由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“matlab与c读书笔记”。

基于C进行dSPACE仿真的技术路线

dSPACE关联于MATLAB的Simulink,由Simulink提供计算模块,dSPACE提供Realtime Interface(RTI)的形式模块化输入输出端口。MATLAB基于Simulink的Realtime Workshop编译生成目标机器可执行代码,并下载到dSPACE中执行。

C与MATLAB联系密切,MATLAB提供了多种利用C实现高效、快速运算编程的方法,并能实现针对不同平台的可执行代码生成和优化。不断升级完善的Realtime Workshop以及Realtime Workshop Embedded Coder保证了C代码可以稍作修改即直接载入处理器执行运算,并且得到了DO178B、IEC61508认证,在航空航天和国防领域有广泛应用。配合Simulink的Model Advisor检查模型代码,使模型易于改进。MATLAB提供的Model Reference可以将模块独立处理,采用增进式代码修改,适合于大型系统的模块化设计。

本文需要探讨的问题是如何利用大量已有的C文件进行dSPACE仿真。因此,将首先介绍MATLAB中与C有关的External Interfaces和S-Function,然后再根据这些介绍寻找较为简捷的实现方案。

1、External Interfaces

提供MATLAB与外部程序和设备进行输入输出通讯的接口。

1)Mat文件

MATLAB的数据文件即Mat文件,它可以实现数据在平台之间的转移或外部程序与MATLAB的数据传递。MATLAB提供了一些前缀为mat的函数,可以在C中直接调用。通过专用的API编译,Window环境下为matlabroot bin win32 mexopts *engmatopts.bat,编译在cmd窗口执行。

2)共享库(Shared Libraries)

Windows环境下共享库是动态链接文件,后缀为.dll,用C等编写,在MATLAB中调用。利用loadlibrary()和unloadlibrary分别完成动态链接文件的装载和卸载,装载完成后可以使用calllib()函数在MATLAB中调用动态库中函数。

3)Mex文件

Mex是MATALAB Eexcutable的缩写,类似于共享库,Mex文件可以在MATLAB命令行中直接调用。Mex主要应用于

A、直接使用已经编写的C程序,而不需重新编写m文件;

B、对运算性能要求较高的应用场合。

MATLAB有四种Mex文件:

1、源Mex文件,用C书写的代码;

2、二进制Mex文件,MATLAB中执行的动态链接进程;

3、Mex函数库,即能够在MATLAB中使用的API库;

4、Mex编译脚本,将源Mex文件转换成二进制Mex文件的MATLAB函数。

源Mex文件中,需要将原C文件中的main改写成需要使用的函数名,源Mex文件一般包括三个部分:gateway进程、计算进程和处理器宏。计算进程即编写的计算函数,其后,要按规定格式编写用于建立gateway进程的mxfunction,主要是变量传递和解释,需调用mex.h文件。编译采用mex functionname.c的命令形式,编译后的函数可以像众多MATLAB内建函数一样直接调用。

2、MATLAB S-Function

在MATLAB中可以用m文件、C、C++、Ada和Fortran等编写Simulink模块,其中C、C++、Ada和Fortran编写的S-Function以Mex文件的形式进行编译。

以m文件编写的S-Function有Level1和Level2之分,其中Level2可以调用更加丰富的S-Function的API资源,并且支持代码生成(手动书写,适合于dSPACE与RTI)。

以C Mex形式编写的S-Function具有最大的灵活性和功能性,支持面向应用对象编译(Target Language Compiler TLC)的代码生成,该代码自动生成,不需要手动添加编译文件,可以将算法写成C Mex的形式,也可以构建一个wrapper S-Function去调用C/C++/Fortran代码。MATLAB提供了编写C Mex S-Function的模板文件sfuntmpl_doc.c和用户界面S-Function Builder。

MATALB还提供一个Legacy Code Tool(继承代码工具?)用于创建能够调用C和C++的S-Function,同样支持TLC,但能够利用的API有限,适用于仅计算输出而不计算状态的Legacy Code。

需要注意的是,C Mex S-Function不支持总线输入输出,对模型参考也不完全支持;S-Function Builder则不支持总线输入输出、向量、多速率采样、输入输出数量变化等。除上述以代码区分S-Function类型外,S-Function也可以分为Noninlined和Wrapper and Fully Inlined两种。前者即C Mex S-Function,dSPACE提供的应用说明Implementation Guide主要是针对C Mex S-Function。后者是基于TLC代码生成,多个文件相互独立。

1)使用已有的C文件构建S-Function

对已经存在的C程序文件,在Simulink中有3种方法:

A、Wrapper S-Function。

手写C S-Function和TLC文件,要求对S-Function的深入了解。

在Wrapper函数同一般的S-Function一样,主要有mdlInitializeSizes()、mdlInitializeSampleTimes()、mdlOutputs()、mdlTerminate()等方法,其中在mdlOutputs()方法中调用已经编写好的C程序,该C程序按照标准C书写。

完成Wrapper函数的编写后,在MATLAB命令窗口运行mex命令编译即可。

此外还需要编写TLC文件才能生成RTW代码,TLC文件基于m编写,基本的函数有BlockTypeSetup和Outputs。Wrapper和TLC文件都可以参考MATLAB提供的模板进行编辑。

B、S-Function Builder。

通过GUI界面编辑,自动生成S-Function和TLC文件,不强调对S-Function的熟练掌握。需要创建声明已有C文件的库函数,并在Builder面板的Libraries中指定对应的C文件和需引用的库文件。此外需要调整初始化、输入和输出等一些参数。完成配置后,点击Build按钮即生成S-Function、Wrapper和TLC三个文件。

C、the Legacy Code Tool。

通过命令在MATLAB Workspace中定义S-Function,无需掌握S-Function的知识。其基本命令如下:

def = legacy_code('initialize');

def.SourceFiles = {'doubleIt.c'};//源C文件

def.HeaderFiles = {'doubleIt.h'};//库文件

def.SFunctionName = 'legacy_wrapsfcn';//S-Function名称 def.OutputFcnSpec = 'double y1 = doubleIt(double u1)';def.SampleTime = [-1,0];

legacy_code('sfcn_cmex_generate', def);

legacy_code('compile', def);

legacy_code('sfcn_tlc_generate', def);

通过the Legacy Code Tool与通过S-Function Builder生成的S-Function不同:Builder生成的结果中,已有的C文件被wrapper函数调用,而Legacy Code Tool则直接调用已有的C文件;通过Builder面板可以定义S-Function的输入输出变量名称,而Legacy Code Tool中仅取默认的y和u。

2)使用C编写S-Function

S-Function的基本结构是:

#define//函数名

#include//函数头

mdl*()//调用API方法

#ifdef…endif//尾部声明

S-Function的API方法均已mdl开头,如mdlInitializeSizes()。编写好的S-Function使用mex命令进行编译。

3、结论

综合上述介绍,比较简单的使用已有C文件进行dSPACE仿真的技术路线有以下3种:

1).C文件→Mex编译脚本mexfunction→二进制Mex文件(.mexw32)→Simulink S-Function模块。

2).C文件→the Legacy Code Tool→C S-Function和TLC文件→.mexw32文件→Simulink S-Function模块。

3).C文件→S-Function Builder→.mexw32文件→Simulink S-Function模块。

其中,the Legacy Code Tool允许Simulink直接调用C代码,比C S-Function易用。当然,C S-Function更加灵活,功能更加丰富。

对于只计算输出的函数,可以直接利用the Legacy Code Tool。而对于需要计算微分方程的函数,则不能简单的直接利用原有的C文件,需要考虑是单独编译微分方程数值计算方法,还是使用MATLAB自身的ODE方法。

需要注意的是,dSPACE不支持M/C++/Fortran/Ada编写的S-Function,因此已有的C文件必须用C编写。

c语言读书笔记

C语言读书笔记——读《C程序设计》笔记一学期对《c语言程序与设计》的学习与应用使我对c语言产生了浓厚的兴趣。C语言程序与设计是一门实践性很强的课程,不可能只靠听课和看......

c语言读书笔记

Vc++读后感闲来无事,跑来图书馆,突然被一本名叫《致程序员之家论坛的所有会员》的书把我的注意力吸引过去了,于是我用心的读起来了。下面这些是我做的一些笔记。应该掌握程序运......

matlab与sql总结

总结一个星期前老师给了一个任务,要求用GUI做成一个simulink仿真界面,通过matlab与SQL的连接,然后把仿真结果存到sql里建的数据库里。从一开始什么都不懂,到现在可以用GUI做一个......

Matlab 与线性代数教案

Matlab 与线性代数一、 Matlab 入门:1.启动、退出、运行: 2.窗口介绍: 3.基本符号: =:赋值符号[ ]:数组定义符号 , 区分列 函数参数分隔符 ; 区分行 取消运行显示 % 注释标记: 具......

matlab

MATLABMATLAB是矩阵实验室(Matrix Laboratory)之意。除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。MATLAB的基本数据单......

《MATLAB与C读书笔记.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
MATLAB与C读书笔记
点击下载文档
相关专题 matlab与c读书笔记 读书笔记 matlab matlab与c读书笔记 读书笔记 matlab
[其他范文]相关推荐
[其他范文]热门文章
下载全文