从MATLAB生成C代码的乐趣
MATLAB与C代码的比较:一个乘法示例
推荐的三步迭代工作流
为代码生成准备算法。 检查并修改MATLAB代码,以介绍低级C代码所需的实现注意事项,并使用MATLAB 支持的语言和函数 代码生成。 使用默认设置测试MATLAB代码是否可以生成代码。 通过生成和执行MEX文件来检查运行时错误。 如果成功,请转至下一步。 如果没有,请重复步骤1,直到可以生成MEX函数。 生成C代码或保留步骤2中的MEX函数。 您可以迭代MATLAB代码来优化生成的C代码(外观、内存和速度)或MEX函数(性能)。
实施限制
内存分配。 在MATLAB中,内存分配是自动的。 在C代码中,内存分配是手动的,可以静态分配(使用 静止的 ),动态(使用 malloc公司 ),或在堆栈上(使用局部变量)。 基于数组的语言。 MATLAB提供了一组丰富的数组操作,可以对数值算法进行简明编码。 C代码需要显式 对于 -循环来表示相同的算法。 动态键入。 MATLAB会在代码运行时自动确定数据类型和大小。 C需要对所有变量和函数进行显式类型声明。 多态性。 MATLAB函数可以支持许多不同的输入类型,而C需要固定的类型声明。 在顶层,您必须指定预期的C函数声明。
使用生成的代码:四个用例
将MATLAB算法作为源代码或库集成到大型软件项目中,例如在PC和服务器上运行的自定义模拟器或软件包(请参阅下面的视频“使用MATLAB编码器将代码集成到Visual Studio”) 在ARM等嵌入式处理器上实现并验证MATLAB算法 ® 处理器和移动设备(请参阅下面的视频,“使用MATLAB编码器部署到iPhone和iPad应用程序”) 将MATLAB算法原型化为PC上的独立可执行文件(参见下面的视频“使用MATLAB生成原型的可执行文件”) 通过生成调用编译的MEX函数来加速MATLAB代码的计算密集型部分(参见下面的视频“使用MATLAB编码器加速图像压缩算法”)
行业成功案例
贝克休斯动力与遥测小组 根据序列预测算法生成DLL,并将其集成到PC上运行的地面解码软件中,该软件使井下数据能够在钻井操作期间快速可靠地解码。 多尔萨维 从运动分析算法中生成C++代码并将其编译成DLL,然后将其集成到运行在PC上的C#应用程序中,该应用程序分析运动员的运动以诊断损伤。 VivaQuant公司 根据心律监测算法生成定点C代码,并为ARM Cortex-M处理器编译。 德尔福 生成了汽车雷达传感器对准算法的C代码,并将其编译为ARM10处理器。 呼吸 根据声学呼吸监测算法生成C代码,并为iPhone应用程序、Android应用程序和基于云的服务器软件编译。
多核能力代码生成和其他优化方法
测试生成的代码
自动化工作流