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

相关推荐
彬鸿科技16 小时前
bhSDR Studio/Matlab入门指南(十二):AI神经网络训练(Resnet-SE) 实验界面全解析
人工智能·神经网络·matlab·软件无线电·sdr
rit843249918 小时前
链路预测(Link Prediction)MATLAB 实现
开发语言·matlab
yugi98783818 小时前
MATLAB CNN道路特征提取实现
人工智能·matlab·cnn
yongui4783418 小时前
基于稀疏低秩分解的图像去噪MATLAB实现
开发语言·matlab
gihigo199819 小时前
MATLAB实现光谱特征波长提取
开发语言·matlab
fie888919 小时前
matlab打靶法求解两点边值优化问题
开发语言·算法·matlab
hoiii18720 小时前
基于MATLAB实现Lamb波频散曲线求解
开发语言·matlab
yu859395821 小时前
MATLAB 分支定界法(Branch and Bound)实现
开发语言·matlab
吃好睡好便好1 天前
矩阵秩的计算
人工智能·学习·线性代数·算法·机器学习·matlab·矩阵
listhi5201 天前
基于雅克比迭代法的方腔流动 MATLAB 实现
开发语言·matlab