主要内容

不透明编码器

在生成的代码中声明变量

描述

y=编码器(类型)声明一个变量Y使用指定的类型,并且在生成的代码中没有初始值。

  • Y可以是一个变量或一个结构字段。

  • MATLAB®代码无法设置或访问Y,但外部C函数可以接受Y作为论据。

  • Y可以是:

    • 论据编码器,编码器编码参考

    • 输入或输出参数到塞瓦尔编码员

    • 用户编写的MATLAB函数的输入或输出参数

    • 代码生成所支持的MATLAB工具箱函数子集的输入金宝app

  • 赋值的Y在生成的代码中声明另一个具有相同类型的变量。例如:

    y=编码器。不透明('int');z=y;
    声明一个变量Z类型int在生成的代码中。

  • 您可以指定Y从另一个使用不透明编码器或从使用不透明编码器。变量必须具有相同的类型。

  • 你可以比较Y到另一个使用不透明编码器或从使用不透明编码器。变量必须具有相同的类型。

实例

y=编码器(类型,价值)指定的类型和初始值Y

实例

y=编码器(___“大小”,大小)指定的大小(以字节为单位)Y。您可以使用前面的任何语法指定大小。

实例

y=编码器(___“HeaderFile”,头饰)指定包含类型定义的头文件。代码生成器生成#包括生成的代码中需要该语句的头文件的语句。您可以使用前面的任何语法指定头文件。

例子

声明指定初始值的变量

为函数生成代码勇敢的返回1.如果召唤我的乐趣成功。此函数使用不透明编码器声明变量x1带类型int初始值0. 任务x2=x1宣布x2类型和初始值为的变量x1

写一个函数勇敢的

作用y=valtest%编码基因%声明x1为一个初始值为“0”的整数x1 = coder.opaque (“int”,'0');%声明x2与x1具有相同的类型和初始值x2=x1;x2=coder.ceval(“我的乐趣”);%通过比较x1的值来测试调用“myfun”的结果如果x2==x1 y=0;其他的y=1;终止终止

声明指定初始值和头文件的变量

生成MATLAB函数的代码文件测试它使用fopen/fread/fclose. 此函数使用不透明编码器声明存储所用文件指针的变量的步骤fopen/fread/fclose。调用不透明编码器声明变量F带类型文件*,初始值无效的,和头文件

编写一个MATLAB函数文件测试

作用缓冲区=文件测试%#编码基因%将“f”声明为初始值为“NULL”的不透明类型“FILE*”%指定包含file *类型定义的头文件;f=编码器(“文件*”,“空”,“头文件”,' < stdio . h >”);%以二进制模式打开文件f=编码器.ceval(“福彭”,cstring('filetest.m'),装运箱(“rb”));%从文件中读取,直到到达文件末尾并放入%内容进入缓冲区n=int32(1);i=int32(1);buffer=char(零(18192));虽然n>0%默认情况下,MATLAB转换常量值%在生成的代码中加倍%因此插入了到int32的显式类型转换。n=coder.ceval(“弗瑞德”coder.ref(缓冲区(i)), int32 (1),...int32(numel(缓冲区)),f;i=i+n;终止塞瓦尔编码员(“fclose”,f);缓冲区=剥离区(缓冲区);在MATLAB字符向量的末尾添加一个C终止字符'\0'作用y=cstring(x)y=[x字符(0)];%删除所有字符13 (CR),但保留字符10 (LF)作用缓冲区=带材(缓冲区)j=1;对于i=1:numel(缓冲区)如果缓冲区(i)~=char(13)缓冲区(j)=缓冲区(i);j=j+1;终止终止缓冲区(i)=0;

比较使用不透明编码器

比较使用不透明编码器测试是否成功打开文件。

使用不透明编码器声明变量无效的带类型文件*初始值无效的

空=编码器。不透明(“文件*”,“空”,“头文件”,' < stdio . h >”);

使用赋值来声明另一个变量ftmp具有与相同的类型和值无效的

ftmp=null;ftmp=coder.ceval(“福彭”, [“testfile.txt”,char(0)][“r”,char(0)];

比较变量。

如果ftmp==null%错误条件终止

使用声明的变量类型的强制转换不透明编码器

此示例演示如何向使用不透明编码器. 功能卡斯托不透明调用C运行时函数strncmp顶多比较N字符串的字符s1s2N字符串中较短的字符数。若要为strncmp输入恩西泽特,函数强制转换N到C类型尺寸并将结果赋给恩西泽特.函数使用不透明编码器要申报的恩西泽特。在使用输出之前复述strncmp,函数强制转换复述到MATLAB类型int32并将结果存储在Y

编写以下MATLAB函数:

作用y=不透明(s1,s2)% <0 -第一个不匹配的字符在s1中的值小于s2中的值%0-两个字符串的内容相等%>0-第一个不匹配的字符在s1中的值大于s2中的值%%#编码基因编码员()n=min(numel(s1),numel(s2));%将要比较的字符数转换为大小\u tnsizet=cast(n,“喜欢”,coder.不透明(“尺寸”,'0'));%返回值为int类型retval=coder.不透明(“int”);retval=coder.ceval(“strncmp”,cstr(s1),cstr(s2),nsizet);%将不透明返回值转换为MATLAB值y=铸造(返回,“int32”);%--------------作用sc=cstr(s)%C的MATLAB字符向量的NULL终止sc=[s,char(0)];

生成MEX函数。

编码基因卡斯托不透明-args{空白(3),空白(3)}报告

使用输入调用MEX函数“abc”“abc”

castopaque_mex (“abc”,“abc”)
ans=0

输出是0因为字符串是相等的。

使用输入调用MEX函数“abc”“阿布德”

castopaque_mex (“abc”,“阿布德”)
ans = 1

输出是-1因为第三个角色D第二个字符串中的字符大于第三个字符C在第一个字符串中。

使用输入调用MEX函数“阿布德”“abc”

castopaque_mex (“阿布德”,“abc”)
ans=1

输出是1.因为第三个角色D中的第一个字符串大于第三个字符C在第二个字符串中。

在MATLAB工作区中,您可以看到Yint32

声明指定初始值和大小的变量

声明Y为初始值为0的4字节整数。

y=编码器(“int”,'0',“尺寸”, 4);

输入参数

全部崩溃

生成代码中的变量类型。类型必须是编译时常量。类型必须是:

  • 内置C数据类型或头文件中定义的类型

  • 支持赋值复制的C类型金宝app

  • C声明中的合法前缀

例子:“文件*”

生成代码中变量的初始值。价值必须是编译时常量。请指定不依赖于MATLAB变量或函数的C表达式。

如果您不提供初始值价值,在使用变量之前初始化该变量的值。若要初始化使用不透明编码器:

  • 从另一个变量中指定一个值,该变量的类型与使用不透明编码器或从使用不透明编码器

  • 从外部C函数中指定一个值。

  • 使用将变量的地址传递给外部函数编码器

指定一个价值那是那种类型指定。否则,生成的代码可能会产生意外的结果。

例子:“空”

生成代码中变量的字节数,指定为整数。如果不指定大小,则变量的大小为8字节。

数据类型:仅有一个的|双重的|int8|int16|int32|int64|uint8|uint16|uint32|uint64

包含定义的头文件的名称类型头饰必须是编译时常量。

对于系统头文件,请使用尖括号。

例子:' < stdio . h >”产生#包括

对于应用程序头文件,请使用双引号。

例子:“foo.h”产生#包括“foo.h”

如果省略尖括号或双引号,代码生成器将生成双引号。

例子:‘foo.h’产生#包括“foo.h”

在构建配置参数中指定包含路径。

例子:cfg.CustomInclude='c:\myincludes'

提示

  • 指定一个价值那是那种类型指定。否则,生成的代码可能会产生意外的结果。例如,以下不透明编码器声明可能会产生意外的结果。

    y=编码器。不透明('int','0.2')

  • 不透明编码器声明变量的类型。它不实例化变量。您可以在后面的MATLAB代码中使用它来实例化变量。在下面的例子中,赋值fp1塞瓦尔编码员实例化fp1

    %声明文件类型的fp1*fp1=编码器(“文件*”);%创建变量fp1fp1 = coder.ceval (“福彭”, [“testfile.txt”,char(0)][“r”,char(0)];

  • 在MATLAB环境下,不透明编码器返回中指定的值价值如果价值如果未提供,则返回空字符向量。

  • 您可以比较使用以下两种方法声明的变量:不透明编码器或从使用不透明编码器。变量必须具有相同的类型。下面的示例演示如何比较这些变量。比较使用coder.opaque声明的变量

  • 为了避免在生成的代码中包含多个相同的头文件,请将头文件括在条件预处理器语句中#ifndef#恩迪夫。例如:

    #ifndef MyHeader_h #define MyHeader_h  #endif . define MyHeader_h  #endif . define MyHeader_h
  • 你可以使用MATLAB铸造函数将变量强制转换为使用不透明编码器使用铸造具有不透明编码器仅适用于数字类型。

    强制转换由声明的变量不透明编码器对于MATLAB类型,可以使用B=铸件(A型)语法。例如:

    x=编码器。不透明('size_t','0');x1=cast(x,'int32');

    您也可以使用B=铸造(A,'like',p)语法。例如:

    x=编码器。不透明('size_t','0');x1=cast(x,'like',int32(0));

    将MATLAB变量强制转换为声明的变量类型不透明编码器,您必须使用B=铸造(A,'like',p)语法。例如:

    x=int32(12);x1=coder.不透明('size_t','0');x2=cast(x,'like',x1));

    使用铸造具有不透明编码器要为生成正确的数据类型,请执行以下操作:

    • 使用调用的C/C++函数的输入塞瓦尔编码员

    • 分配给使用调用的C/C++函数的输出的变量塞瓦尔编码员

    如果没有此强制转换,则可能在代码生成期间收到编译器警告。

扩展能力

C / c++代码生成
使用Matlab®编码器生成C和C++代码™.

GPU代码生成
使用GPU编码器为NVIDIA®GPU生成CUDA®代码™.

在R2011a中引入