Gre*_*age 4 c matlab mex matlab-coder
我的目标是使用C代码和Matlab代码的混合,并最终通过使用Coder工具在C中运行整个事物.我找到了两种方法将C结合到Matlab中,编写一个Mex文件,并在C程序中使用coder.ceval.
除了调用语法之外,这两种方法有什么区别吗?
我将比较使用MATLAB Coder创建手写MEX文件以使用集成自定义C代码coder.ceval.
在这两种情况下,都可以生成一个MEX文件,您可以像在任何其他MATLAB函数中一样在MATLAB中调用它.将使用mex您编写的C源代码中的命令编译手写MEX函数.随着MATLAB编码器的MEX文件会从通过调用C代码MATLAB代码自动生成coder.ceval使用无论是codegen命令或MATLAB编码器应用程序.
(注意我全部使用C,但C++也可以用于MEX文件)
mxArray值和本机C类型之间手动移动数据.您需要使用MEX库和C/C++ Matrix Library来执行此操作.如果coder.ceval使用,可以从MATLAB代码自动生成MEX文件,为您执行此数据编组.double和single值给定的输入,则必须为每个输入类型生成一个MEX文件.mxArrayMATLAB提供的值中检索数据,就可以编写任意C代码来操作它.coder.ceval要求您编写MATLAB Coder兼容的MATLAB代码,以使用它提供的外部代码接口调用C函数.对于具有简单接口的函数,例如采用数字数组,字符串等的函数,这可以很简单.对于那些采取其他数据类型,更先进的工具,如coder.opaque,coder.cstructname和自定义枚举的定义,必须使用这可能需要一段时间.需要权衡为MATLAB Coder开发此接口的成本与学习和使用第一个项目中提到的MATLAB库的成本.coder.ceval,目标可以简单地从MEX更改为独立目标,如静态或动态库或可执行文件.使用手写的MEX文件,通常会考虑C代码,以便MEX接口mexFunction与C功能内核分开.然后,可以在MEX之外调用此内核.如果您计划使用MATLAB Coder,则必须以某种方式将MATLAB Coder代码与此内核集成.如果代码最终与MATLAB Coder一起使用,则当目标是MEX需要使用时,使用Coder调用MEX文件coder.extrinsic.它们也不能在独立目标中直接调用.相反,在coder.ceval使用传统C开发环境生成代码或使用传统C开发环境生成代码之后,需要在生成代码期间将MEX文件底层的C计算内核与生成的代码集成.
coder.ceval比使用MEX文件更容易或更难地集成外部C代码,将MEZ文件暴露给MATLAB,然后将MATLAB Coder生成的代码与MEX文件下的计算内核集成在一起?| 归档时间: |
|
| 查看次数: |
869 次 |
| 最近记录: |