我试图通过Matlab Coder获得非常基本的网络功能(我需要将其转换为C代码)。但是,我尝试的所有网络类和对象都不受Coder的支持。 Matlab完全忽略了使用这个工具的网络似乎是不合理的。是否有一些通过网络发送数据的方法可以与编码器一起使用?
我更喜欢TCP,但只要与Coder兼容,UDP或其他任何实际发送/接收数据的东西都能正常工作。
答案 0 :(得分:4)
此答案假定DSP系统工具箱不可用。如果是,则可以考虑系统对象dsp.UDPSender
和dsp.UDPReceiver
。
由于最终目标是生成C代码,并且因为网络I / O通常是通过库完成的,所以一种好的方法是将执行网络I / O的外部C代码集成到MATLAB代码中。调用外部C函数的基本方法是使用coder.ceval
,并解释该过程here。
externalUDPSend
中实现了函数externalUDPSend.h/.c
。编写一个或多个使用coder.ceval
调用C(++)函数的MATLAB函数,如链接文档中所示。这些将作为外部代码的包装,并将C(++)代码公开给MATLAB。链接示例中的callfoo
之类的内容将起作用:
function y = useExternalUDP(x)
%#codegen
if coder.target('MATLAB')
% Running in MATLAB. Use standard MATLAB
% network I/O code here
...
else
% Generating code. Call external code/library
% Include header for external code
coder.cinclude('externalUDPSend.h');
% Set the type of the output. Assume double scalar
% Change the RHS to match the return type
y = 0;
y = coder.ceval('externalUDPSend',x,numel(x));
end
coder.target
,它将在MATLAB和生成的代码中工作。使用以下内容生成MEX函数:
codegen useExternalUDP -config:mex externalUDPSend.c -args ...
生成的MEX函数用作自定义代码的MATLAB接口,因此无需手动编写MEX接口。 MATLAB Coder将为您生成所有MEX接口逻辑。然后在MATLAB中测试MEX功能。测试MEX功能很重要,因为可以在MEX中检测和报告运行时错误,例如越界索引,使用不支持代码生成的功能等。这些检查将从生成的独立代码中删除。
请注意,如果您选择使用现有的网络I / O库,则可能还需要链接库,或者您可能需要修改生成的代码的构建。您可以使用coder.updateBuildInfo
或coder.ExternalDependency
在MATLAB代码中实现此目的。
file reading example显示了一些更高级的自定义代码集成工具,例如coder.ref
,coder.opaque
,并在调用外部代码时处理来自MATLAB代码的C字符串。请注意,代码生成支持MATLAB函数fprintf
和fread
,因此这个示例是有意义的,而不是执行文件I / O的必要条件。
答案 1 :(得分:1)
如果您拥有DSP系统工具箱,则系统对象dsp.UDPSender
和dsp.UDPReceiver
支持代码生成,因为它们列在comprehensive list of supported functions中。
从它们生成的代码依赖于MATLAB附带的预构建库,并将在与这些库兼容的桌面平台上运行。有关详细信息,请参阅documentation for the UDP Receive block。