微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么即使我设置了 DataTypeReplacement = 'CBuiltIn',MATLAB Coder 也不生成 C 内置类型?

如何解决为什么即使我设置了 DataTypeReplacement = 'CBuiltIn',MATLAB Coder 也不生成 C 内置类型?

我有一个 MATLAB (R2020b) 函数,我正在尝试使用 MATLAB Coder 将其转换为(与 Linux 兼容的)C 程序。该函数接受 3 个字符串参数,如下所示:

function func1(a,b,c)

我希望生成的 C 函数接受 3 个 char* 参数:

extern void func1(const char *a,const char *b,const char *c);

为了完成这项工作,我通过这个脚本运行 MATLAB Coder:

cfg = coder.config('dll','ecoder',false);
cfg.GenerateReport = true;
cfg.ReportpotentialDifferences = false;
cfg.GenerateComments = false;
cfg.RuntimeChecks = true;
cfg.GenCodeOnly = true;
cfg.HardwareImplementation.TargetHWDeviceType='Generic->64-bit Embedded Processor (LP64)';
cfg.DataTypeReplacement = 'CBuiltIn';

%% Define argument types for entry-point 'func1'.
ARGS = cell(1,1);
ARGS{1} = cell(3,1);
ARGS{1}{1} = coder.typeof('X',[Inf Inf],[1 1]);
ARGS{1}{2} = coder.typeof('X',[1 1]);
ARGS{1}{3} = coder.typeof('X',[1 1]);

%% Invoke MATLAB Coder.
codegen  -config cfg func1 -args ARGS{1} -c

运行脚本后,得到的函数签名为:

extern void func1(const emxArray_char_T *a,const emxArray_char_T *b,const emxArray_char_T *c);

尽管我已经明确设置了 cfg.DataTypeReplacement = 'CBuiltIn',但 MATLAB Coder 似乎生成了 MathWorks typedef 而不是 built-in C data types

我的问题是 - 为什么?我该如何解决这个问题以生成内置数据类型?

解决方法

遗憾的是,从 MATLAB Coder R2021a 开始,不支持为可变大小的字符串生成采用 char* 的代码。目前,当使用可变大小的字符串时,MATLAB Coder 始终生成采用 emxArray_char_T*(用于 C 代码生成)或 coder::array(用于 C++ 代码生成的默认值)的代码。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。