本教程向你展示如何:
从MATLAB生成重圈代码®不使用持久或全局数据的代码。
从MATLAB代码自动生成C代码。
在命令行定义函数输入属性。
指定代码生成属性。
生成可用于查看和调试MATLAB代码的代码生成报告。
笔记
这个例子在Windows上运行®只要。
要完成此示例,请安装以下产品:s manbetx 845
MATLAB
Matlab Coder™
C编译器
MATLAB编码器定位并使用受支持的已安装编译器。万博1manbetx有关支持的编译器的当前列表,请参见万博1manbetx万博1manbetx支持和兼容的编译器在MathWorks®的网站。
您可以使用墨西哥人设置
更改默认编译器。看更改默认编译器.
类型 | 名称 | 描述 |
---|---|---|
函数代码 | matrix_exp.m |
MATLAB功能使用泰勒序列计算输入矩阵的矩阵指数,并返回计算的输出。 |
C的主要功能 | c |
调用重写代码。 |
将教程文件复制到本地工作文件夹。
例如,创建一个本地工作文件夹,c: \编码器\工作
.
改变matlabroot \ \工具箱\编码器\例子帮助
文件夹。在matlab命令提示符下,输入:
Cd (fullfile(docroot, 'toolbox', 'coder', 'examples'))
复制reentrant_win
文件夹到本地工作文件夹。
您的工作文件夹现在包含教程的文件。
将MATLAB当前文件夹设置为包含本教程文件的工作文件夹。在matlab命令提示符下,输入:
光盘工作
工作
包含文件的工作文件夹的完整路径。
这个例子需要特定于Microsoft的库®Windows操作系统,因此只能在Windows平台上运行。这是一个简单的多线程示例,不使用持久数据或全局数据。两个线程调用MATLAB函数matrix_exp
使用不同的输入数据集。
当您生成可重用的、可重入的代码时,MATLAB编码器万博1manbetx支持动态分配:
对于堆栈来说函数变量太大
持续的变量
全局变量
MATLAB编码器生成一个头文件,primary_function_name
_types.h
,您必须在使用生成的代码时包含。此标题文件包含以下结构:
primary_function_name
stackdata.
包含用户分配的内存。将指针传递给此结构作为使用它的函数的第一个参数:
直接(该函数使用结构中的字段)
间接(函数将结构传递给被调用的函数)
如果算法使用持久数据或全局数据,则primary_function_name
stackdata.
结构还包含指向的指针primary_function_name
persistentdata.
结构。如果包含这个指针,则必须向每个调用函数传递一个形参。
primary_function_name
persistentdata.
如果您的算法使用持久性或全局变量,MATLAB编码器为它们提供单独的结构。内存分配结构包含指向此持久数据结构的指针。由于您对持久性和全局变量有一个单独的结构,因此可以为这些变量分配一次内存并将其与所有线程共享。但是,如果线程没有通信,则可以为每个线程分配这些变量的内存。
要调用reentrant代码,请提供一个主要
功能:
包含生成的头文件matrix_exp.h
.这个文件包括生成的头文件,matrix_exp_types.h.
.
对于每个线程,为堆栈数据分配内存。
调用matrix_exp_initialize
管家功能。有关更多信息,请参见生成部署代码.
呼叫matrix_exp
.
呼叫matrix_exp_terminate
.
释放堆栈数据存储器。
您可以使用代码生成配置对象启用生成重写代码。
创建配置对象。
cfg = coder.config('exe');
启用重换代码生成。
cfg。MultiInstanceCode = true;
调用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.
提供到报表的链接。
Codegen.
生成头文件matrix_exp_types.h.
,定义了matrix_expStackData
全球结构。该结构包含的局部变量太大而无法放入堆栈中。
要查看此头文件:
单击查看报告
链接以打开代码生成报告。
在生成的文件列表中,单击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的更多信息 |
|
在没有持久或全局数据上的unix调用重圈代码® |
|
在Windows上调用具有持久数据的重新输入代码 |
|
在UNIX上使用持久数据调用可重入代码 |