matlab——simulink学习(5向NXP库中添加新模块)
向NXP库中添加新的函数模块
- 一、环境
- 二、库添加模块
- 1.打开文件夹
- 2.创建文件
- 3.添加S-Function
- 三、浏览器添加模块
一、环境
Windows10、MATLAB R2022b、安装NXP的S32K1XX系列工具包
二、库添加模块
1.打开文件夹
在文件系统中找到安装工具包的位置,用文件资源管理器打开。
找到你需要修改的模块(路径一般为C:\Users\Administrator\AppData\Roaming\MathWorks\MATLAB Add-Ons\Toolboxes\NXP_MBDToolbox_S32K1xx\mbdtbx_s32k\blocks)
2.创建文件
进入对应的模块文件夹后,新建两个文件。修改后缀名。分别为.tlc文件(用于调用NXP驱动库的脚本语言,及函数的实现)、.c文件(封装模块的内部参数配置,如模块的输出个数、输入个数、是否为离散型等信息)
.tlc代码,实现开启或者关闭全局中断
%implements lpuart_s32k_set_buffer "C"%% Copyright (c) 2022 NXP.
%% All rights reserved.%function Outputs(block, system) Output%if FEVAL("mbd_s32k_is_codegen_compatible", CompiledModel.Name)%assign blockPath = LibGetBlockPath(block)%assign sdk_params = FEVAL ("Sys_EnableIRQGlobal", blockPath){%assign sys_enable = sdk_params.sys_enableirqglobal%if FEVAL("strcmp","%<sys_enable>","enable")INT_SYS_EnableIRQGlobal();%elseINT_SYS_DisableIRQGlobal();%endif}}%endif
%endfunction
.c代码
/* File: Sys_EnableIRQGlobal.c */
#define S_FUNCTION_NAME Sys_EnableIRQGlobal
#define S_FUNCTION_LEVEL 2#include "simstruc.h"static void mdlInitializeSizes(SimStruct *S) {ssSetNumSFcnParams(S, 0); // No parametersif (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) {return; // Parameter mismatch}if (!ssSetNumInputPorts(S, 0)) return;if (!ssSetNumOutputPorts(S, 0)) return;// ssSetNumInputPorts(S, 0); // No input port// ssSetInputPortWidth(S, 0, 0); // Scalar input// ssSetInputPortDirectFeedThrough(S, 0, 0); // No direct feedthrough// ssSetNumOutputPorts(S, 0); // No output port// ssSetOutputPortWidth(S, 0, 0); // Scalar output// ssSetNumContStates(S, 0); // No continuous state// ssSetNumSampleTimes(S, 1); // One sample time
}
static void mdlInitializeSampleTimes(SimStruct *S) {
}static void mdlOutputs(SimStruct *S, int_T tid) {
}static void mdlTerminate(SimStruct *S) {
}
// static void mdlInitializeSampleTimes(SimStruct *S) {
// ssSetSampleTime(S, 0, CONTINUOUS_SAMPLE_TIME); // Continuous sample time
// ssSetOffsetTime(S, 0, 0.0);
// }// static void mdlOutputs(SimStruct *S, int_T tid) {
// real_T *x = ssGetContStates(S); // Continuous state
// real_T *u = ssGetInputPortSignal(S, 0); // Input signal
// real_T *y = ssGetOutputPortSignal(S, 0); // Output signal// *y = *x; // Output is the state
// }// static void mdlDerivatives(SimStruct *S) {
// real_T *x_dot = ssGetdX(S); // Derivative of state
// real_T *u = ssGetInputPortSignal(S, 0); // Input signal// *x_dot = *u; // Derivative equals input
// }#ifdef MATLAB_MEX_FILE
#include "simulink.c"
#else
#include "cg_sfun.h"
#endif
然后在matlab命令行mex编译.c文件(没得MinGW64自行下载)。
3.添加S-Function
在任意地方,选择lpuart模块右键,跳转至库链接
解锁库,并添加S-Function
双击写函数名和参数
右键编辑封装
然后再将库锁定
三、浏览器添加模块
锁定完后,刷新库就会有,移植可能会丢失,需要自行解决,目前未找到解决办法。