完整的示例引用数组传递给C进行处理

18视图(30天)
我让Matlab编码器有问题请允许我通过一个数组CRC计算器m文件,然后通过数组C和C做处理。
函数crc = crccalculate10 (in)% # codegen
断言(isa(三机一体,“uint8”));
断言(所有(大小(in) < =[正]));
crc = 0;
% C代码生成一个包含
coder.cinclude (“crccalculate10.h”);
%评估C函数
crc = coder.ceval (“crccalculate10”coder.rref (in), uint8(元素个数(in)));
结束
据我所知,这个问题不是在代码中,它在codegen params,尤其是args < >参数,您通常会指定哪些变量可以被传递。但我找不到任何通过的例子,我理解需要一个可变长数组。例如,它是记录在几个地方 在这里 ,缺乏codegen命令本身指定长度。和 在这里 提供固定大小的矩阵传递的一些例子,但是没有变量的大小。如果你读了编码器。varsize文档,每个例子展示了varsize操作输出变量,不输入变量。 这家伙 似乎也有类似的问题使用编码器。varsize coder.typeof。
我最好的猜测在使用使用typeof基本上涉及建立一个编码器。类型变量传递。程序将基本上,
x = [uint8 (1) uint8 (1) uint8 (1)]
coder.varsize (“x”(1正))
t = coder.typeof (x)
codegencrccalculate10 args {t} crccalculate10.c
我检查了类型和它看起来正确的给我。但同时,我试着使用编码器。varsize (t[1正])。这两种情况下导致编译错误,在不存在的一条线在我的c (? !)
错误crccalculate10.c: 19类型错误论点2“crccalculate10”;发现“int”预计无符号的指针生物炭”
不幸的是我没有一行19日在我的C源或M文件,这样编译器的输出是非常不正确的。但是,如果要我猜,coder.rref的价值(in)不是上面指定的“t”。
在这一点上我基本上已经用尽了所有我能想到的做这个工作。我可能只需要试着重装Matlab,它可能会更快一些。任何帮助将不胜感激。说,我认为这个用例,在C代码非常普遍,值得一个清晰和简洁的例子在文档中。

接受的答案

大卫·芬克”class=
大卫·芬克 2019年3月22日
谢谢你的建议!
我们正在努力改善我们的文档,这是有价值的反馈。
我看看可以帮助澄清:
  1. coder.varsize”是用在你的MATLAB函数生成代码
  2. coder.typeof“是用来创建一个类型通过“codegen”
在你的例子中,这听起来像是你想codegen参数(参数):
coder.typeof (uint8(42),[1正],[0 1])
(这可以保存在一个变量“t”在您的代码)。
[1正]指定每个维度的最大大小,和[0 1]表明,第二个维度(并不是第一个)大小可变。
基于误差(来自C编译器),似乎需要一个 无符号字符指针 作为第二个参数。然而,它被通过了 int 基于MATLAB代码,应该是通过了 uint8
crccalculate10.c 是codegen生成的C文件之一,它是C编译器发生错误的地方。添加“报告”(没有引号)codegen作为另一个参数,显示生成的文件和其他信息。
3评论
查尔斯•坎贝尔”class=
查尔斯•坎贝尔 2019年3月25日
编辑:查尔斯•坎贝尔 2019年3月25日
这个工作!这是这个问题。
如果有人发现这和正在寻找一个简明的例子,看看
  1. 通过引用的例子在这里
  2. typeof示例中提供了大卫的反应在这里,使用typeof文档在这里
  3. 确保ceval,原型和定义的功能都是相同的命名。
  4. 确保matlab函数命名为别的东西。
与这些因素应该编译。
谢谢!

登录置评。

更多的答案(0)

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!