主要内容

生成reentrant c代码MATLAB代码

关于本教程

学习目标

本教程向你展示如何:

  • 从MATLAB生成重圈代码®不使用持久或全局数据的代码。

  • 从MATLAB代码自动生成C代码。

  • 在命令行定义函数输入属性。

  • 指定代码生成属性。

  • 生成可用于查看和调试MATLAB代码的代码生成报告。

笔记

这个例子在Windows上运行®只要。

先决条件

要完成此示例,请安装以下产品:s manbetx 845

  • MATLAB

  • Matlab Coder™

  • C编译器

    MATLAB编码器定位并使用受支持的已安装编译器。万博1manbetx有关支持的编译器的当前列表,请参见万博1manbetx万博1manbetx支持和兼容的编译器在MathWorks®的网站。

    您可以使用墨西哥人设置更改默认编译器。看更改默认编译器

所需的文件

类型 名称 描述
函数代码 matrix_exp.m MATLAB功能使用泰勒序列计算输入矩阵的矩阵指数,并返回计算的输出。
C的主要功能 c 调用重写代码。

本地复制文件

将教程文件复制到本地工作文件夹。

  1. 例如,创建一个本地工作文件夹,c: \编码器\工作

  2. 改变matlabroot \ \工具箱\编码器\例子帮助文件夹。在matlab命令提示符下,输入:

    Cd (fullfile(docroot, 'toolbox', 'coder', 'examples'))

  3. 复制reentrant_win文件夹到本地工作文件夹。

    您的工作文件夹现在包含教程的文件。

  4. 将MATLAB当前文件夹设置为包含本教程文件的工作文件夹。在matlab命令提示符下,输入:

    光盘工作

    工作包含文件的工作文件夹的完整路径。

关于这个例子

这个例子需要特定于Microsoft的库®Windows操作系统,因此只能在Windows平台上运行。这是一个简单的多线程示例,不使用持久数据或全局数据。两个线程调用MATLAB函数matrix_exp使用不同的输入数据集。

Matrix_exp.m的内容

当您生成可重用的、可重入的代码时,MATLAB编码器万博1manbetx支持动态分配:

  • 对于堆栈来说函数变量太大

  • 持续的变量

  • 全局变量

MATLAB编码器生成一个头文件,primary_function_name_types.h,您必须在使用生成的代码时包含。此标题文件包含以下结构:

  • primary_function_namestackdata.

    包含用户分配的内存。将指针传递给此结构作为使用它的函数的第一个参数:

    • 直接(该函数使用结构中的字段)

    • 间接(函数将结构传递给被调用的函数)

    如果算法使用持久数据或全局数据,则primary_function_namestackdata.结构还包含指向的指针primary_function_namepersistentdata.结构。如果包含这个指针,则必须向每个调用函数传递一个形参。

  • primary_function_namepersistentdata.

    如果您的算法使用持久性或全局变量,MATLAB编码器为它们提供单独的结构。内存分配结构包含指向此持久数据结构的指针。由于您对持久性和全局变量有一个单独的结构,因此可以为这些变量分配一次内存并将其与所有线程共享。但是,如果线程没有通信,则可以为每个线程分配这些变量的内存。

提供C主要功能

要调用reentrant代码,请提供一个主要功能:

  • 包含生成的头文件matrix_exp.h.这个文件包括生成的头文件,matrix_exp_types.h.

  • 对于每个线程,为堆栈数据分配内存。

  • 调用matrix_exp_initialize管家功能。有关更多信息,请参见生成部署代码

  • 呼叫matrix_exp

  • 呼叫matrix_exp_terminate

  • 释放堆栈数据存储器。

c的内容

配置构建参数

您可以使用代码生成配置对象启用生成重写代码。

  1. 创建配置对象。

    cfg = coder.config('exe');

  2. 启用重换代码生成。

    cfg。MultiInstanceCode = true;

生成C代码

调用Codegen.函数生成C代码,有以下选项:

  • -Config.传入代码生成配置对象CFG.

  • c在编译中包含此文件。

  • 报告创建代码生成报告。

  • - args.指定使用示例数据的输入参数的类别,大小和复杂性。

-config CFG main.c -report matrix_exp. exem参数的(160160)

Codegen.生成C可执行文件,matrix_exp.exe.,在当前文件夹和C代码中/ codegen / exe / matrix_exp子文件夹。因为您选择了生成报告,Codegen.提供到报表的链接。

查看生成的C代码

Codegen.生成头文件matrix_exp_types.h.,定义了matrix_expStackData全球结构。该结构包含的局部变量太大而无法放入堆栈中。

要查看此头文件:

  1. 单击查看报告链接以打开代码生成报告。

  2. 在生成的文件列表中,单击matrix_exp_types.h.

/ * * matrix_exp_types.h * *代码生成功能的matrix_exp * * /的ifndef __MATRIX_EXP_TYPES_H__ # define __MATRIX_EXP_TYPES_H__ / *包含文件* / # Include " rtwtypes.h " / *类型定义* /的ifndef typedef_matrix_expStackData # define typedef_matrix_expStackData typedef struct {struct{双F [25600];双Y [25600];双X [25600];} f0;} matrix_expStackData;#endif /*typedef_matrix_expStackData*/ #endif /*代码生成结束(matrix_exp_type .h) */

运行代码

验证示例在Windows平台上运行并调用代码。

%这个例子只能在Windows平台上运行,如果~ispc错误('这个例子需要特定于Windows的库,只能在Windows上运行');端系统(“matrix_exp.exe”)

可执行文件运行并报告完成。

要记住的要点

  • 创建一个主要功能:

    • 包含生成的头文件,primary_function_name_types.h.此文件定义了primary_function_namestackdata.全球结构。该结构包含的局部变量太大而无法放入堆栈中。

    • 对于每个线程,为堆栈数据分配内存。

    • 呼叫primary_function_name_初始化

    • 呼叫primary_function_name

    • 呼叫primary_function_name_terminate.

    • 释放堆栈数据存储器。

  • 使用-Config.选项将代码生成配置对象传递给Codegen.函数。

  • 使用- args.选项以在命令行指定输入参数。

  • 使用报告选项创建代码生成报告。

了解更多

了解关于生成的代码API的更多信息

生成可重用代码的API

在没有持久或全局数据上的unix调用重圈代码®

呼叫重击代码,没有持久或全局数据(仅限UNIX)

在Windows上调用具有持久数据的重新输入代码

调用重换代码 - 使用持久性数据多线程(仅限Windows)

在UNIX上使用持久数据调用可重入代码

呼叫重换代码 - 使用持久性数据多线程(仅限UNIX)