与Matlab Coder的基本联网

时间:2015-07-27 18:38:31

标签: matlab network-programming matlab-coder

我试图通过Matlab Coder获得非常基本的网络功能(我需要将其转换为C代码)。但是,我尝试的所有网络类和对象都不受Coder的支持。 Matlab完全忽略了使用这个工具的网络似乎是不合理的。是否有一些通过网络发送数据的方法可以与编码器一起使用?

我更喜欢TCP,但只要与Coder兼容,UDP或其他任何实际发送/接收数据的东西都能正常工作。

2 个答案:

答案 0 :(得分:4)

此答案假定DSP系统工具箱不可用。如果是,则可以考虑系统对象dsp.UDPSenderdsp.UDPReceiver

由于最终目标是生成C代码,并且因为网络I / O通常是通过库完成的,所以一种好的方法是将执行网络I / O的外部C代码集成到MATLAB代码中。调用外部C函数的基本方法是使用coder.ceval,并解释该过程here

推荐步骤

  1. 编写C(++)函数,实现您需要的行为或查找提供必要功能的C库。假设我们在文件externalUDPSend中实现了函数externalUDPSend.h/.c
  2. 编写一个或多个使用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
    
  3. 开发您的项目。调用包装器函数,由于使用了coder.target,它将在MATLAB和生成的代码中工作。
  4. 使用以下内容生成MEX函数:

    codegen useExternalUDP -config:mex externalUDPSend.c -args ...
    

    生成的MEX函数用作自定义代码的MATLAB接口,因此无需手动编写MEX接口。 MATLAB Coder将为您生成所有MEX接口逻辑。然后在MATLAB中测试MEX功能。测试MEX功能很重要,因为可以在MEX中检测和报告运行时错误,例如越界索引,使用不支持代码生成的功能等。这些检查将从生成的独立代码中删除。

  5. 生成独立代码,让MATLAB Coder将其编译为库或将代码部署到外部IDE并在那里编译。
  6. 集成外部库/封装依赖项

    请注意,如果您选择使用现有的网络I / O库,则可能还需要链接库,或者您可能需要修改生成的代码的构建。您可以使用coder.updateBuildInfocoder.ExternalDependency在MATLAB代码中实现此目的。

    进一步阅读

    file reading example显示了一些更高级的自定义代码集成工具,例如coder.refcoder.opaque,并在调用外部代码时处理来自MATLAB代码的C字符串。请注意,代码生成支持MATLAB函数fprintffread,因此这个示例是有意义的,而不是执行文件I / O的必要条件。

答案 1 :(得分:1)

如果您拥有DSP系统工具箱,则系统对象dsp.UDPSenderdsp.UDPReceiver支持代码生成,因为它们列在comprehensive list of supported functions中。

从它们生成的代码依赖于MATLAB附带的预构建库,并将在与这些库兼容的桌面平台上运行。有关详细信息,请参阅documentation for the UDP Receive block