matlab——simulink学习(5向NXP库中添加新模块)

发布于:2025-08-07 ⋅ 阅读:(32) ⋅ 点赞:(0)

一、环境

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
在这里插入图片描述
双击写函数名和参数
在这里插入图片描述

右键编辑封装
在这里插入图片描述
在这里插入图片描述
然后再将库锁定

三、浏览器添加模块

锁定完后,刷新库就会有,移植可能会丢失,需要自行解决,目前未找到解决办法。


网站公告

今日签到

点亮在社区的每一天
去签到