一、环境
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代码,实现开启或者关闭全局中断
%assign result = FEVAL(function_name, arg1, arg2, ..., argN)
//功能:调用其它函数
//function_name:调用函数名字
//arg1、arg2...:参数1、参数2...
%implements Sys_EnableIRQGlobal "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 ("get_param", blockPath,"sys_enableirqglobal")
{
%assign sys_enable = sdk_params
%if FEVAL("strcmp","%<sys_enable>","enable")
INT_SYS_EnableIRQGlobal();
%else
INT_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 parameters
if (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
双击写函数名和参数
右键编辑封装
然后再将库锁定
三、浏览器添加模块
锁定完后,刷新库就会有,移植可能会丢失,需要自行解决,目前未找到解决办法。