主要内容

为持久变量生成代码

这个例子展示了如何从一个MATLAB®函数生成一个墨西哥人的函数,compute_average,使用持久变量。它说明你之前必须明确持久的状态变量使用函数来计算一组新的值的平均值。

这个示例还展示了如何初始化和终止状态的持久性变量相同的MATLAB函数独立生成的代码。你必须明确持久的状态变量在生成的代码使用函数来计算一组新的值的平均值。

先决条件

这个例子没有先决条件。

关于compute_average函数

compute_average.m函数使用了两个持久性变量,累计金额和数量的值添加到目前为止,这样你就可以调用一次函数与一个值。

类型compute_average
% y = compute_average (x) %这个函数接受一个输入标量值“x”,并返回到目前为止平均%值。函数y = compute_average (x) % # codegen断言(isa (x,“双”));%输入标量双%声明两个持久性变量“总和”和“问”。持续的问总和;%在第一次调用我们需要初始化变量。如果isempty(总和)金额= 0;问= 0;结束%计算累计金额和数量的值。和=和+ x;问=问+ 1; % Return the current average. y = sum / cnt;

% # codegen指令表明MATLAB代码是用于代码生成。

生成墨西哥人的功能

首先,使用命令生成一个墨西哥人的功能codegen其次是MATLAB文件的名称来编译。

codegencompute_average
代码生成成功。

默认情况下,codegen生成一个墨西哥人命名函数hello_world_mex在当前文件夹。这允许您测试MATLAB代码和墨西哥人功能和比较结果。

函数运行的墨西哥人

(10 + 20 + 100)/ 3 = 43.3333

compute_average_mex (10)
ans = 10
compute_average_mex (20)
ans = 15
compute_average_mex (100)
ans = 43.3333

明确持久的内部状态变量

明确持久变量使用清晰的墨西哥人命令。

清晰的墨西哥人

再次运行墨西哥人函数来计算一组不同的值的平均值

(10 + 20 + 30 + 40)/ 4 = 25

compute_average_mex (10)
ans = 10
compute_average_mex (20)
ans = 15
compute_average_mex (30)
ans = 20
compute_average_mex (40)
ans = 25

明确持久的内部状态变量独立生成的代码

持久的状态变量独立生成的代码是通过调用启动和终止函数的主要功能。这些函数是由代码生成器生成的。这些文件codegen目录中。

您可以编辑主文件的例子中,c调用启动和终止功能。例如:

类型c
/ * *文件:主要。c * / / * * / #包括“主要包括文件。h compute_average # include。h compute_average_terminate # include。h compute_average_initialize # include。h " / *函数声明* /静态双argInit_real_T(无效);静态孔隙main_compute_average(无效);/ *函数定义* / / * *参数:void *返回类型:双* /静态双argInit_real_T (void){返回0.0;}/ * *参数:void *返回类型:void * /静态孔隙main_compute_average (void){双y;/ *初始化函数compute_average输入参数。* / / *调用入口点“compute_average”。 */ y = compute_average(argInit_real_T()); } /* * Arguments : int argc * const char * const argv[] * Return Type : int */ int main(int argc, const char * const argv[]) { (void)argc; (void)argv; /* Initialize the entry-point function. */ compute_average_initiatlize(); /* Invoke the entry-point functions. You can call entry-point functions multiple times. */ main_compute_average(); /* Terminate the application. */ compute_average_terminate(); /*Once the application is terminated, the state of the persistent variables is cleared. */ /* Re-initialize the entry-point function. */ compute_average_initialize(); /* You can run the application for a new set of values.*/ main_compute_average(); /* Terminate the application after your process is complete.*/ compute_average_terminate(); return 0; } /* * File trailer for main.c * * [EOF] */

正如您可以看到的,c文件已经被编辑调用终止功能,compute_average_terminate ()持久的状态变量。一套新的计算是通过调用运行compute_average_initialize ()main_compute_average ()新设置的值。