指定初始化、输出和终止
setupImpl 和 stepImpl 方法通过钩子将 C 函数关联到 System object™。将数字引脚初始化为输出只需在模型初始化时完成一次。因此,MW_gpioInit 函数在 setupImpl 中调用。为了更新数字输出引脚的逻辑状态,从 stepImpl 方法调用 MW_gpioRead。在终止时,从 releaseImpl 方法调用 MW_gpioTerminate 以释放硬件资源。按照以下步骤更新您在选择 System object 模板中创建的 DigitalRead System object 的初始化、输出和终止代码节。
在 MATLAB® 编辑器中,打开
DigitalRead.m类文件。使用以下代码更新
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.cinlcude('MW_gpio.h'); coder.ceval('MW_gpioInit', 9, 0); end end ... end
coder.ceval函数执行对MW_gpio.h中 C 包装函数的调用。coder.ceval的第二个和第三个参量分别是 ARM® Cortex®-A 硬件板引脚编号和值。使用以下代码更新
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
使用以下代码更新
stepImpl方法。methods(Access=protected) ... function y = stepImpl(obj) %#ok<MANU> y = double(0); if isempty(coder.target) % Place simulation output code here else % Call C-function implementing device output y = coder.ceval('MW_gpioRead', 9); end end ... end
与
DigitalWriteSystem object 不同,DigitalReadSystem object 的stepImpl方法定义输出y,后者是选定引脚的逻辑值。使用以下代码更新
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
在下一节中,您将对您的 System object 设置输出端口属性。