向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代碼,實現開啟或者關閉全局中斷
%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();%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
雙擊寫函數名和參數
右鍵編輯封裝
然后再將庫鎖定
三、瀏覽器添加模塊
鎖定完后,刷新庫就會有,移植可能會丟失,需要自行解決,目前未找到解決辦法。