不要对自动生成的代码做任何手工修改,凡是想在代码中实现的,一定要通过模型和相关配置实现。
是的,我依然坚持这条坚持了近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文章
7048浏览量
89076 -
信号
+关注
关注
11文章
2791浏览量
76807 -
代码
+关注
关注
30文章
4790浏览量
68654
发布评论请先 登录
相关推荐
评论