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的验证。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡洛斯伊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值