如何在Simulink中关闭代码生成? (独立代码生成不支持该功能)

时间:2013-07-18 14:04:36

标签: matlab code-generation simulink matlab-coder

我正在创建一个模拟,我将自己移植到另一种语言。所以我不需要使用Simulink的代码生成功能。如何让它试图让代码生成关闭?

例如,我在MATLAB Function块中有以下代码:

function OutImage = ResizeCropPad(InImage, Width, Height)
%#codegen

    %coder.extrinsic('imresize');

    % resizing to defined height
    scale = Height/size(InImage,1);
    InImage = imresize(InImage, scale);

    % cropping to defined width
    if Width<size(InImage,2)
        padarray(InImage, [0 size(InImage,2)-Width], 0, 'both');
    elseif Width>size(InImage,2)
        b = floor((Width-size(InImage,2))/2);
        InImage = InImage(:,b:b+Width-1,:);
    end

    OutImage = InImage;

并且它给出了错误

  

独立代码不支持“imresize”功能   代。请参阅coder.extrinsic的文档以了解您的情况   可以在模拟中使用此功能。

如果我取消注释coder.extrinsic('imresize')行,我会收到新错误

  

预期是逻辑,char,int,fi,single或double。找到了   mxArray。 MxArrays从调用MATLAB解释器返回   并且在表达式中不受支持。它们可能只用于   任务的右侧和外在的参数   功能

使用if解决第11行。

为什么呢?是否可以完全禁用代码生成,例如在模型级别?

1 个答案:

答案 0 :(得分:1)

在调用coder.extrinsic('imresize');函数之前,您需要取消注释InImage行并声明/初始化imresize变量。有关详细信息,请参阅Converting mxArrays to Known Types

在评论中讨论后编辑

以下内容应该有效:

function OutImage = ResizeCropPad(InImage, Width, Height)
%#codegen

    coder.extrinsic('imresize');

    % resizing to defined height
    scale = Height/size(InImage,1);
    OutImage = InImage;
    OutImage = imresize(InImage, scale);

    % cropping to defined width
    if Width<size(OutImage,2)
        padarray(OutImage, [0 size(OutImage,2)-Width], 0, 'both');
    elseif Width>size(OutImage,2)
        b = floor((Width-size(outImage,2))/2);
        OutImage = OutImage(:,b:b+Width-1,:);
    end