Simulink与C的联合仿真调试

背景

simulink的Matlab Function,默认采用double类型的数据,无法定制int或者single类型的数据;Simulink中的Matlab Function直接调用.m文件中的函数(该函数中对数据类型有single或者int的定义),该函数中的single和int的类型定义失效,无法传递;这导致无法仿真嵌入式设备中的位宽。在Matlab Function中,下面的定义,实际的效果也是double类型。

Matlab 复制代码
persistent var;
if isempty(var)
    var = zeros(2,1,'single');
end

上述代码中,var仍旧是一个double

为仿真嵌入式中的位宽,期望采用Simulink与C语言联合仿真调试,希望仿真的同时,也能调试C C++代码。

方案

Simulink所支持的C debugger如下所示,本人采用红框中的方案。

安装

  1. 下载安装Visual Studio Code

Download Visual Studio Code - Mac, Linux, Windows

  1. 安装MATLAB Support for MinGW-w64 C/C++/Fortran Compiler

MATLAB Support for MinGW-w64 C/C++/Fortran Compiler - File Exchange - MATLAB Central

下载得到mingw.mlpkginstall文件,直接将其拖到Matlab的命令窗口,进行安装。对于Matlab 2023a/2023b/2024a/2024b,可能会提供MinGW版本选择。我用的是2022b,直接用MinGW6.3版本。

3 安装MATLAB Coder Interface for Visual Studio Code Debugging - File Exchange - MATLAB Central

下载得到vscodedebug.mlpkginstall文件,直接将其拖到Matlab的命令窗口,进行安装。

4 Visual Studio Code添加插件

在matlab命令窗口中用matlabshared.supportpkg.getSupportPackageRoot()查询要安装的插件位置,如下所示:

在Visual Studio Code中添加插件

根据查询出的插件位置,选择插件安装

安装完成后,如下所示

测试

  1. 编辑.h和.c文件
cpp 复制代码
#ifndef _TIMES_TWO_
#define _TIMES_TWO_
int timestwo(int u);

#endif
cpp 复制代码
#include "timestwo.h"

int timestwo(int u)
{
	return u*2;
}
  1. 创建Simulink仿真模型

用C Caller和convert创建如下所示的模型

配置C文件

配置C文件路径(如果C文件路径和slx工程路径不一致,就需要配置)。我这里采用相对路径,即./C来存放c文件和h文件。

使用自动填充,来包含头文件。(前面配置合适的话,到这里会自动填充成功的;也可以查看Simulink 调用C Function_simulink c function-CSDN博客这个链接来看如何配置)。

自动填充"Auto-fill from source files"成功后,说明源文件和头文件没有错误。如果有错,会在simulink中下图红框这个位置提示错误。

双击 C Caller,配置函数。先点击红框进行刷新(防止绿框中不显示函数),再从绿框中选择对应的函数名。

4 打断点

按上图所示点击后,会关联启动Visual Studio Code,如下图所示,选择Open。

配置断点

5 调试仿真

仿真来到断点处。

参考文献

Debug Custom C/C++ Code

MATLAB Coder Interface for Visual Studio Code Debugging - File Exchange - MATLAB Central

Debugging C/C++ code in Simulink >> Guy on Simulink - MATLAB & Simulink

相关推荐
88号技师3 小时前
2026年3月中科院一区SCI-贝塞尔曲线优化算法Bezier curve-based optimization-附Matlab免费代码
开发语言·算法·matlab·优化算法
t198751283 小时前
三维点云最小二乘拟合MATLAB程序
开发语言·算法·matlab
机器学习之心8 小时前
PSO-LightGBM-ABKDE粒子群算法优化轻量级梯度提升机自适应带宽核密度估计多变量回归区间预测Matlab实现
算法·matlab·回归·abkde·自适应带宽核密度估计·pso-lightgbm·粒子群算法优化轻量级梯度提升机
3GPP仿真实验室12 小时前
【MATLAB源码】CSI-RS:信道估计仿真与评估平台
开发语言·matlab
Evand J14 小时前
基于PID控制的无人机巡航仿真(Matlab代码实现)——四旋翼无人机三轴位置 + 偏航角的串级PID控制仿真
matlab·无人机·控制·pid·uav·旋翼机
好汉学技术16 小时前
如何在 MATLAB 中绘制三维线图?
matlab
88号技师18 小时前
2026年3月一区SCI-B样条曲线优化算法B-spline curves optimizer-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法
rit84324992 天前
有限元法求转子临界转速的MATLAB实现
开发语言·matlab
Matlab程序设计与单片机2 天前
【机器人最短路径规划】基于标准蚁群算法
matlab·蚁群算法·路径规划问题
Marye_爱吃樱桃2 天前
MATLAB R2024b的安装、简单设置——保姆级教程
开发语言·matlab