不要对自动生成的代码做任何手工修改,凡是想在代码中实现的,一定要通过模型和相关配置实现。
是的,我依然坚持这条坚持了近10年的原则。
那么问题来了,有人说有些算法速度太慢,比如sine运算,如果使用math库里提供的sine运算,可能很多应用都接受不了,怎么破?
我们今天就来看看工具提供给我们的代码替换功能。
通常,在工程上,对于速度要求比较高的应用里,我们不会使用数学库里的sin()做正弦运算的,更多的时候,我们会使用查表的方式,把信号变化范围你的数据做成表格,做sine运算时就调用这张表格。我们这里也假设用户可以自己写一个查表函数,函数原型如下:
double mysin(double x)
也可能会有人告诉我单片机上我们也不适用double数据类型的,好吧,我这里偷懒,就不再去设置数据类型了,设置数据类型这事大家都会做。
假设有模型如下:
选择系统目标文件为ert.tlc,默认设置下,生成的代码如下:
testcr_Y.Out1 = sin(testcr_U.In1);
我们的目标是:
将代码中的sin()替换成mysine()。
如何操作?
1. 首先做MATLAB命令窗里运行如下命令:crtool
2. 在上述界面下,Tables List里面增加myTable,然后鼠标右键在myTable上选择New Entry,继续选择Math Function,然后就是做Math Function列表里选择sin,在最右侧的面板里设置Replacement prototype,比如我们这里将名字设置为mysine。
3. 做完上述设置之后,保存为myTable.m。
4. 再使用上述界面的File菜单下的Generate Registration File生成注册文件myTableReg。
5. 回到MATLAB命令窗,运行sl_refresh_customizations。
至此,我们已经创建了代码替换表,并且将其注册到MATLAB系统。
下面打开模型文件,只需做如下设置:
Configuration Parameters面板下选择Code Generation,然后选择Code replacement library,选中myTableReg。
现在,再去生成代码,你将得到的就是这样一行代码:
testcr_Y.Out1 = mysine(testcr_U.In1);
这里面需要注意的是路径问题不要出错,还有函数的形成以及返回值的类型要和模型里的相关模块保持一致。
-
数据
+关注
关注
8文章
7197浏览量
89849 -
信号
+关注
关注
11文章
2811浏览量
77197 -
代码
+关注
关注
30文章
4841浏览量
69214
发布评论请先 登录
相关推荐
若想使用ADS8422IBPFBT是要怎么替换或运作?
TAS5630PHD这个型号跟TAS5630BPHD是不是一样?可以直接替换吗?
代码整洁之道-大师眼中的整洁代码是什么样
![<b class='flag-5'>代码</b>整洁之道-大师眼中的整洁<b class='flag-5'>代码</b>是什么样](https://file1.elecfans.com//web2/M00/05/C9/wKgZombesjCAGIWdAAHN7xWKtsQ450.png)
OPA4330能替换LMV324吗?
20.0-电磁杆的组装和实物介绍“这个是就是你想要的“-智能车电磁组 电磁循迹小车
![20.0-电磁杆的组装和实物<b class='flag-5'>介绍</b>“<b class='flag-5'>这个</b>是就是你想要的“-智能车电磁组 电磁循迹小车](https://file1.elecfans.com/web2/M00/02/F8/wKgZoma-7pOAIMfMAA5D0ea0gkE311.png)
相同贴片大小电容可以替换吗?
如何通过SOLIDWORKS教育版提高学生技能培养未来人才?
![如何通过SOLIDWORKS教育版提高学生<b class='flag-5'>技能</b>培养未来人才?](https://file1.elecfans.com//web2/M00/EE/9F/wKgaomZsEq-ARg_7AAC0EyDcJBE717.jpg)
一文看懂直插大功率电感能用贴片电感替换吗
Windows 11 22H2新版任务管理器新增启用隐藏功能
关于STM32 DMAMUX模块具体的应用示例代码
![<b class='flag-5'>关于</b>STM32 DMAMUX模块具体的应用示例<b class='flag-5'>代码</b>](https://file1.elecfans.com/web2/M00/C5/98/wKgZomYA0KWAXr1uAAActZx-jhs970.png)
评论