不要对自动生成的代码做任何手工修改,凡是想在代码中实现的,一定要通过模型和相关配置实现。
是的,我依然坚持这条坚持了近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文章
7317浏览量
94108 -
信号
+关注
关注
11文章
2903浏览量
79773 -
代码
+关注
关注
30文章
4947浏览量
73277
发布评论请先 登录
别只把RJ45直通头当“网线连接器”!这些隐藏场景和玩法太实用
内联函数介绍
C语言的printf基本用法介绍
皮线光缆的“硬核技能”:抗弯曲、耐环境、易施工
关于系统链接脚本的介绍
嵌入式需要掌握哪些核心技能?
Ansible代码上线项目实战案例
企业和个人基于业务知识和代码库增强的大模型生成代码实践
AI时代:不可替代的“人类+”职业技能
贴片电阻和插件电阻可以替换吗?

关于代码替换这个隐藏技能的介绍和分享
评论