当前位置: 首页 > news >正文

Simulink与C的联合仿真调试

背景

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

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

2. 安装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文件

#ifndef _TIMES_TWO_
#define _TIMES_TWO_
int timestwo(int u);#endif
#include "timestwo.h"int timestwo(int u)
{return u*2;
}

2. 创建Simulink仿真模型

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

配置C文件

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

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

双击 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

相关文章:

  • 业务校验工具包-validate-utils介绍
  • 【数据可视化-39】2009-2019年亚马逊50大畅销书数据集可视化分析
  • 【网络原理】 网络编程套接字
  • 探索排序算法的奥秘(上):冒泡排序、选择排序、插入排序
  • Babel、core-js、Loader之间的关系和作用全解析
  • 【Google Colab】利用unsloth针对医疗数据集进行大语言模型的快速微调(含跑通原代码)
  • 科技打头阵,创新赢未来——中科视界携千眼狼超高速摄像机亮相第三届科交会
  • 二叉树的前序、中序和后序遍历:详解与实现
  • FastAPI系列06:FastAPI响应(Response)
  • 信号量函数
  • 计算机网络全栈精讲:从 TCP/UDP 原理到 Socket 编程与 HTTP 协议实战(含代码实现)
  • Matlab 报错:尝试将 SCRIPT vl_sift 作为函数执行:
  • Linux 【杂谈】基础知识(一)
  • 双目RealSense系统配置rs_camera.launch----实现D435i自制rosbag数据集到离线场景的slam建图
  • 贪心算法-860.柠檬水找零-力扣(LeetCode)
  • Linux系统编程:信号量Semaphore详解 (IPC)
  • vue3中ref在js中为什么需要.value才能获取/修改值?
  • C++:STL——list
  • 可以隐藏列的表格
  • 单片机 + 图像处理芯片 + TFT彩屏 复选框控件
  • 钟声:美以芬太尼为借口滥施关税,纯属“内病外治”
  • 出国留学、来华留学呈现双增新趋势,“00后留学生个性鲜明”
  • 俄总统助理:普京与美特使讨论了恢复俄乌直接谈判的可能性
  • 财政部、证监会:加强对会计师事务所从事证券服务业务的全流程监管
  • 美施压拉美国家选边站队,外交部:搞阵营对抗注定失败
  • 从息屏24小时到息屏1小时,姚明在深圳开启落地试点