Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

coder.load

从 MAT 文件或 ASCII 文件加载编译时常量

说明

示例

S = coder.load(filename)filename 加载编译时常量。

  • 如果 filename 是 MAT 文件,则 coder.load 将变量从 MAT 文件加载到结构体数组中。

  • 如果 filename 是 ASCII 文件,则 coder.load 将数据加载到一个双精度数组中。

coder.load 在代码生成时(也称为编译时)加载数据。如果您在生成代码后更改 filename 的内容,则更改不会反映在已生成的代码的行为中。

S = coder.load(filename,var1,...,varN) 仅从 MAT 文件 filename 中加载指定的变量。

S = coder.load(filename,'-regexp',expr1,...,exprN) 只加载与指定的正则表达式匹配的变量。

S = coder.load(filename,'-ascii') filename 视为 ASCII 文件,而不管文件扩展名如何。

S = coder.load(filename,'-mat') filename 视为 MAT 文件,而不管文件扩展名如何。

S = coder.load(filename,'-mat',var1,...,varN) filename 视为 MAT 文件,并仅从该文件加载指定的变量。

S = coder.load(filename,'-mat','-regexp', expr1,...,exprN)filename 视为 MAT 文件,并仅加载与指定的正则表达式匹配的变量。

示例

全部折叠

为函数 edgeDetect1 生成代码,该函数根据给定的归一化图像返回基于阈值检测出边缘的图像。edgeDetect1 使用 coder.load 在编译时从一个 MAT 文件加载边缘检测核。

将 Sobel 边缘检测核保存在一个 MAT 文件中。

k = [1 2 1; 0 0 0; -1 -2 -1];

save sobel.mat k

编写函数 edgeDetect1

function edgeImage = edgeDetect1(originalImage, threshold) %#codegen
assert(all(size(originalImage) <= [1024 1024]));
assert(isa(originalImage, 'double'));
assert(isa(threshold, 'double'));

S = coder.load('sobel.mat','k');
H = conv2(double(originalImage),S.k, 'same');
V = conv2(double(originalImage),S.k','same');
E = sqrt(H.*H + V.*V);
edgeImage = uint8((E > threshold) * 255);

为静态库创建代码生成配置对象。

cfg = coder.config('lib');

edgeDetect1 生成一个静态库。

codegen -report -config cfg edgeDetect1

codegencodegen\lib\edgeDetect1 文件夹中生成 C 代码。

为函数 edgeDetect2 生成代码,该函数根据给定的归一化图像返回基于阈值检测出边缘的图像。edgeDetect2 使用 coder.load 在编译时从一个 ASCII 文件加载边缘检测核。

将 Sobel 边缘检测核保存在一个 ASCII 文件中。

k = [1 2 1; 0 0 0; -1 -2 -1];
save sobel.dat k -ascii

编写函数 edgeDetect2

function edgeImage = edgeDetect2(originalImage, threshold) %#codegen
assert(all(size(originalImage) <= [1024 1024]));
assert(isa(originalImage, 'double'));
assert(isa(threshold, 'double'));

k = coder.load('sobel.dat');
H = conv2(double(originalImage),k, 'same');
V = conv2(double(originalImage),k','same');
E = sqrt(H.*H + V.*V);
edgeImage = uint8((E > threshold) * 255);

为静态库创建代码生成配置对象。

cfg = coder.config('lib');

edgeDetect2 生成一个静态库。

codegen -report -config cfg edgeDetect2

codegencodegen\lib\edgeDetect2 文件夹中生成 C 代码。

输入参数

全部折叠

文件名。filename 必须为编译时常量。

filename 可包含文件扩展名以及完整或部分路径。如果 filename 没有扩展名,load 会查找名为 filename.mat 的文件。如果 filename 的扩展名不是 .matload 会将该文件视为 ASCII 数据。

ASCII 文件必须包含由数字组成的矩形表格,并且每行中的元素数目相等。文件分隔符(每行中的元素之间的字符)可以为空格、逗号、分号或制表符。文件可包含 MATLAB® 注释(以百分比符号 % 开头的行)。

示例: 'myFile.mat'

变量的名称,指定为一个或多个字符向量或字符串标量。每个变量名称必须为一个编译时常量。使用 * 通配符来匹配模式。

示例: coder.load('myFile.mat','A*') 会加载文件中所有名称以 A 开头的变量。

指示要加载哪些变量的正则表达式,指定为一个或多个字符向量或字符串标量。每个正则表达式必须为一个编译时常量。

示例: coder.load('myFile.mat', '-regexp', '^A') 只加载其名称以 A 开头的变量。

输出参数

全部折叠

如果 filename 是 MAT 文件,则 S 是结构体数组。

如果 filename 是 ASCII 文件,则 Sdouble 类型的 m×n 数组。m 是文件中的行数,n 是一行中的值数。

限制

  • coder.load 的参数必须为编译时常量。

  • 输出 S 必须为不带下标的结构体或数组的名称。例如,不允许使用 S(i) = coder.load('myFile.mat')

  • 在用于代码生成的函数中,您不能使用 save 将工作区数据保存到文件中。代码生成器不支持 save 函数。此外,您不能将 coder.extrinsicsave 结合使用。在生成代码之前,您可以使用 save 将工作区数据保存到文件中。

提示

  • coder.load(filename) 在编译时(而不是在运行时)加载数据。如果您在生成代码后更改 filename 的内容,则更改不会反映在已生成的代码的行为中。如果您正在生成代码或者正在为 Simulink® 仿真代码,您可以使用 MATLAB 函数 load 加载运行时值。

  • 如果 MAT 文件包含不支持的构造,请使用 coder.load(filename,var1,...,varN) 仅加载支持的构造。

  • 如果您在 MATLAB Coder™ 工程中生成代码,代码生成器会为 coder.load 函数进行增量代码生成。当 coder.load 使用的 MAT 文件或 ASCII 文件发生变化时,软件会重新编译代码。

扩展功能

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。

版本历史记录

在 R2013a 中推出

另请参阅

| |