Simulink 自动代码生成:手写代码替换生成代码Code Replacement Tool使用

目录

前言

代码替换库操作步骤

代码生成验证

总结


前言

在实际工程开发过程中,Simulink生成的代码都是构建的算法实现的,纯软件实现,生成的代码大多也是直接在CPU上运行的。实际还有一些MCU集成了像Cordic,协处理器等。有些代码就需要放在特定的函数里执行,或者直接调用硬件的资源进行计算。除非是MCU和Matlab有深度合作,把硬件资源做成模块直接使用。如下是STM32G4的硬件资源库,可以在Simulink环境建模。这需要和工具链进行深度集成。

如果是没有深度集成的MCU则可以考虑替换掉生成的代码,采用芯片官方提供的库函数或者自己手写的库函数。

这里举个例子:

 下图是一个调用硬件Cordic实现Sin函数的计算,目的是在仿真结束后生成的Sin函数用的是这部分手写代码。不用查表法或者软件Cordic来计算,提升软件效率。这里就需要用到Matlab的Code Replacement Tool。 

代码替换库操作步骤

1.在工作空间的命令窗口输入crtool命令,弹出如下窗口

 新建一个Table,选择Function,这里面可以选择三角函数或者其他的计算公式。

 设置函数名,和手写的函数名一样,再设置函数的数据类型,其他的默认配置就可以。

 

把手写代码的路径添加进来

 把刚刚的Function再复制一份如下:

 配置好后点一下Validate entry,最后点保存,把生成的.m保存在当前的工作空间。

 生成注册文件

1.在 Code Replacement Tool 中,选择 File > Generate registration file

2.在 Generate registration file 对话框中,编辑对话框字段以匹配下图,然后点击 OK

 Table list和保存的名字一样,其他的自定义即可。

 保存到当前工作空间,如下表示创建成功

 

 命令窗口输入指令:RTW.TargetRegistry.getInstance('reset');

 

按照下面的步骤,配置Code replacement libraries:选择配置好的sin test. 

 

在仿真模型的替换Trigonometric模块,如下

 运行仿真,查表和用的模块仿真效果相同。

 

代码生成验证

 Sin模块生成的代码是我们定义的代码名。

 生成的代码也包含了main.h

 

 

总结

用这种方式可以结合手写代码,也可以把硬件资源用起来而不需要芯片和Matlab进行深度的集成,只是硬件接口需要保证接口函数的准确,不然生成的代码可能运行不正确,这里只举了一个例子,没有进行Cordic的验证。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/155244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WinEdt 11.1编辑器的尝鲜体验

WinEdt 11.1编辑器的尝鲜体验 2023年5月19日,WinEdt 11.1版本发布了,相比WinEdt 10.3, 最新版更加漂亮,更加友好,更加好用了! 最大的改变是WinEdt 11.1 有了自带的WinEdtPDF阅读器,所以不再需要下载第三方…

ros2工作空间

我们先不管ros2工作空间是什么样子的,如果是我自己来搞一个工作空间,我一定是这样安排 一个文件夹用来放自己存放的文件,。。。。。。。。。。对应src文件夹 一个文件夹用来放编译后的文件,。。。。。。。。。。。对应intall文件…

模型微调技术

Parameter Efficient Fine Tuning (PEFT)和Low Rank Adaptation (LoRA)是2种非常重要的模型微调方法。这两种方法只微调模型的一小部分(额外的)参数,同时冻结预训练模型的大部分参数,从而大大降低了计算和存储成本。尤其是LoRA&am…

day61 layui和分页原理

昨日内容回顾 choices参数的使用 一般用在什么场景:当被存储的字段数据可能被列举完毕的时候一般会使用choices参数 性别 学历 来源 工作经验等 一般情况下不在数据表中直接存储中文,存数字、存字母来做映射 # 怎么使用 gender_choices ((1, 男),(2…

Weakly Supervised Visual Question Answer Generation

目录 一、论文速读 1. 1 论文概要总结 相关工作 主要贡献 论文主要方法 实验数据 未来研究方向 二、论文精度 2.1 论文试图解决什么问题? 2.2 论文中提到的解决方案之关键是什么? 2.3 用于定量评估的数据集是什么?代码有没有开源&a…

各语言语法

一些语法格式的特点&#xff1a; Html: <></> xx”” json: { “”:””, } 数组中可以嵌套对象&#xff0c;数组 css: xx{ //代表某些符号&#xff0c;比如. xxx:yyy; } JS 1.function test( ){ } 2.Const testfunction( ){ } //定义…

无法将RELEASE.pom上传到nexus的解决办法

在我们搭建私服仓库的时候&#xff0c;会将依赖放到私有仓库上管理&#xff0c;但是我最近在depoly的时候发现有个pom文件无法上传&#xff1a;其名字为xxxxx.2.5.0.RELEASE.pom&#xff0c;上传上去始终有问题&#xff0c;经过多次尝试可使用以下命令&#xff1a; 先将xxxxx.…

2024测试工程师必学的Jmeter:利用jmeter插件收集性能测试结果汇总报告和聚合报告

利用jmeter插件收集性能测试结果 汇总报告&#xff08;Summary Report &#xff09; 用来收集性能测试过程中的请求以及事务各项指标。通过监听器--汇总报告 可以添加该元件。界面如下图所示 汇总报告界面介绍&#xff1a; 所有数据写入一个文件&#xff1a;保存测试结果到本地…

阿里云服务器公网带宽如何修改?

阿里云服务器公网带宽不够用有哪些解决方法&#xff1f;可以更改带宽或带宽临时升级&#xff0c;更改带宽是永久公网带宽&#xff0c;带宽临时升级可以选择升级时间段&#xff0c;也可以绑定弹性公网EIP来修改公网带宽&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云服务…

ZYNQ_project:LCD

模块框图&#xff1a; 时序图&#xff1a; 代码&#xff1a; /* // 24h000000 4324 9Mhz 480*272 // 24h800000 7084 33Mhz 800*480 // 24h008080 7016 50Mhz 1024*600 // 24h000080 4384 33Mhz 800*480 // 24h800080 1018 70Mhz 1280*800 */ module rd_id(i…

解决java在idea运行正常,但是打成jar包后中文乱码问题

目录 比如&#xff1a; 打包命令使用utf-8编码&#xff1a; 1.当在idea中编写的程序,运行一切正常.但是当被打成jar包时,执行的程序会中文乱码.产生问题的原因和解决方案是什么呢? 一.问题分析 分别使用idea和jar包形式打印出System中所有的jvm参数---代码如下: public static…

【设计模式】行为型设计模式

行为型设计模式 文章目录 行为型设计模式一、概述二、责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;三、命令模式&#xff08;Command Pattern&#xff09;四、解释器模式&#xff08;Interpreter Pattern&#xff09;五、迭代器模式&#xff08;Iterato…

Stable Diffusion专场公开课

从SD原理、本地部署到其二次开发 分享时间&#xff1a;11月25日14&#xff1a;00-17&#xff1a;00 分享大纲 从扩散模型DDPM起步理解SD背后原理 SD的本地部署:在自己电脑上快速搭建、快速出图如何基于SD快速做二次开发(以七月的AIGC模特生成系统为例) 分享人简介 July&#…

HelpLook VS Zendesk:哪种知识库软件更适合您的业务

为任何组织创造一个开放且协作的环境至关重要。然而&#xff0c;高水平的员工每周可能会花费多达30个小时处理电子邮件和协作&#xff0c;对他们的工作效率产生了重大影响。 为了解决这个挑战&#xff0c;建立一种高效的信息共享方法至关重要&#xff0c;不会妨碍团队的生产力…

福州大学《嵌入式系统综合设计》实验三:多媒体开发基础编程

一、实验目的 本实验基于搭建好的开发环境和硬件环境&#xff0c;通过编写简单的通信实验&#xff0c;验证开发环境&#xff0c;掌握多媒体开发编程基础&#xff0c;包括SOCKET编程、多线程编程和线程同步知识。 二、实验内容 基于套接字、多线程、同步锁机制实现多媒体文件…

循环链表3

插入函数——插入数据&#xff0c;在链表plsit的pos位置插入val数据元素 位置pos&#xff08;在无特别说明的情况下&#xff09;是从0开始计数的 要改变链表结构&#xff0c;就要依赖前驱&#xff0c;每个前驱的next存储着下一个数据结点的地址&#xff0c;也就是依靠前驱的ne…

netty整合websocket(完美教程)

websocket的介绍&#xff1a; WebSocket是一种在网络通信中的协议&#xff0c;它是独立于HTTP协议的。该协议基于TCP/IP协议&#xff0c;可以提供双向通讯并保有状态。这意味着客户端和服务器可以进行实时响应&#xff0c;并且这种响应是双向的。WebSocket协议端口通常是80&am…

敏捷需求管理

敏捷需求管理是一种以敏捷方式进行需求收集、分析和确认的方法。它强调持续不断的需求迭代和交付&#xff0c;以适应快速变化的市场和业务需求。 敏捷需求管理的主要特点包括&#xff1a; 以用户故事为核心&#xff1a;敏捷需求管理以用户故事为核心&#xff0c;将用户需求作…

FPGA——IP核 基础操作

FPGA——IP核 基础操作 IP核例化模块时钟IP核RAM IP核 IP核例化模块 找到模版 加入代码中 时钟IP核 配置模式功能 配置输入时钟 输出配置 RAM IP核

JavaScript 常用符号

JavaScript是一门基础性的编程语言&#xff0c;常用于web开发中。JS中有许多特殊的符号&#xff0c;这些符号的用法十分重要&#xff0c;直接影响代码的正确性和可读性。在日常编写中&#xff0c;我们会频繁使用以下几个符号。 一、等于号&#xff08;&#xff09; 等于号在JS…