主要内容

指定初始化、输出和终止行为

setupImplstepImpl 方法通过钩子将 C/C++ 函数关联到 System object™。有关创建 C/C++ 设备驱动代码的详细信息,请参阅编写硬件特定的 C/C++ 代码。将数字引脚初始化为输出只需在模型初始化时完成一次。因此,MW_gpioInit 函数在 setupImpl 中调用。为了更新数字输出引脚的逻辑状态,从 stepImpl 方法调用 MW_gpioWrite。在终止时,从 releaseImpl 方法调用 MW_gpioTerminate 以释放硬件资源。按照以下步骤更新您在选择 System object 模板中创建的 DigitalWrite System object 的初始化、输出和终止代码节。

  1. 在 MATLAB® 编辑器中,打开 DigitalWrite.m 类文件。

  2. 使用以下代码更新 setupImpl 方法。

    methods (Access=protected)
        function setupImpl(obj) %#ok<MANU>
            if isempty(coder.target)
                % Place simulation setup code here
            else
                % Call C-function implementing device initialization
                coder.cinclude('MW_gpio.h');
                coder.ceval('MW_gpioInit', 9, 1);
            end
        end
        ...
    end

    coder.ceval 函数执行对 digitalio_arduino.h 中 C 包装函数的调用。coder.ceval 的第二个和第三个参量分别是硬件引脚编号和引脚模式值。

  3. 使用以下代码更新 BuildInfo 方法。

    methods (Static)
        ...
        function updateBuildInfo(buildInfo, context)
            if context.isCodeGenTarget('rtw')
                % Update buildInfo
                srcDir = fullfile(fileparts(mfilename('fullpath')),'src'); %#ok     
                includeDir = fullfile(fileparts(mfilename('fullpath')),'include');                 
                addIncludePaths(buildInfo,includeDir);
                % Use the following API's to add include files, sources and linker flags
                addSourceFiles(buildInfo,'MW_gpio.c', srcDir);
            end
        end
        ...
    end
  4. 使用以下代码更新 stepImpl 方法。

    methods(Access=protected)
        ...
        function stepImpl(obj,u) %#ok<INUSD>
            if isempty(coder.target)
                % Place simulation setup code here
            else
                % Call C-function implementing device output
                coder.ceval('MW_gpioWrite', 9, u);
            end
        end
        ...
    end
  5. 使用以下代码更新 releaseImpl 方法。

    methods(Access=protected)
        ...
        function releaseImpl(obj) %#ok<MANU>
            if isempty(coder.target)
                % Place simulation termination code here
            else
                % Call C-function implementing device termination
                coder.ceval('MW_gpioTerminate', 9);
            end
        end
        ...
    end

在下一节中,您将在 MATLAB 命令行上测试 System object

另请参阅

| |