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

相关推荐
Evand J1 小时前
【MATLAB例程|图像滤波降噪13】局部噪声方差自适应滤波(LNR)图像降噪与效果展示。附完整例程的下载链接
图像处理·计算机视觉·matlab·滤波·代码·降噪
weixin_3077791313 小时前
C++代码实现MATLAB中的ode23t函数功能
开发语言·c++·算法·matlab
Evand J15 小时前
【MATLAB例程】二维Astar路径规划与AOA-TDOA定位仿真。完整代码,附下载链接。包运行成功,带中文注释
开发语言·matlab·路径规划·代码·定位·融合定位
路径规划6661 天前
(MATLAB代码)退火PSO融合DWA算法的船舶路径规划MATLAB实现(260915)
matlab·路径规划·船舶·dwa·pso粒子群算法
weixin_307779131 天前
C++代码实现MATLAB中的ode45函数功能
开发语言·c++·算法·matlab
菜鸟~noob2332 天前
【电子战】第15篇:混合定位——TDOA/FDOA/AOA 联合【含matlab代码】
开发语言·matlab
Evand J3 天前
【MATLAB例程,图像滤波降噪12】加权中值滑动窗口滤波(WMF)图像降噪,包含滤波质量评价。附代码下载链接
开发语言·图像处理·人工智能·计算机视觉·matlab·滑动窗口·滤波
Evand J3 天前
【MATLAB例程,图像降噪7】高斯加权滑动窗口滤波,用于图像降噪,带质量评价,附代码下载链接
开发语言·图像处理·matlab·滑动窗口·滤波·降噪·图像滤波
菜鸟~noob2334 天前
【电子战】第07篇:多普勒测向【含matlab代码】
android·开发语言·matlab
可编程芯片开发4 天前
基于压电能量收集和MPPT最大功率跟踪算法的IoT压力传感器电源系统Simulink建模与仿真
物联网·matlab·simulink·mppt·压电能量收集·iot压力传感器