首页 文章

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

提问于
浏览
1

我正在创建一个模拟,我将自己移植到另一种语言 . 所以我不需要使用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 回答

  • 1

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

    EDIT following discussion in the comments

    以下应该有效:

    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
    

相关问题