simulink 模型的自动代码生成?
简单来说,在我们的 “大” 项目中,需要实现很多算法,其中比如 myfilter。
现在不手写c了,而是搭建simulink框图。对那些算法比c语法熟悉的人来说,这是个福音。
算法实现方便,测试方便
simulink 模型的测试验证非常重要,然而这里不讨论。
总之,算法没问题之后,通过自定代码生成工具coder“翻译”成c代码,跟手写的一样.c.h,还可以控制函数原型、数据定义、文件结构、甚至注释......
把自动生成的源文件集成到原来的项目文件中。
由各种编译器,把它们编译成不同的可执行文件,最后运行在不同的环境。
比如这里就是通过 vs 编译成 exe,很简单吧。
所以
对于代码生成的任务来说
重点在如何生成自己想要的c代码
但经常会有人问,coder支持哪些板子?
看下面这张嵌入式软件的伪代码的简单示意图。
simulink 算法模型通过 coder 生成的是蓝色部分,标准c;跟硬件打交道的底层驱动黑色部分,是手写代码。
既然叫coder,所以本质上,它的本职工作就是simulink模型到c代码这个步骤,就结束了。至于c要通过什么编译器跑到什么硬件上,跟coder没多大关系。
那么
为什么会有人问这个问题呢?
build process
coder除了把模型翻译成代码的本职工作以外,还额外张罗了一些build的任务,把c代码变成可执行文件。
为什么说张罗,而不说完成呢,因为coder本身并没有编译的功能,它会后台调用你安装了的编译器来实现 ,看下图。
比如默认下,coder会调用vc,使用它内置的相应的main文件模板,然后编译。这就是为什么每次生成代码,在当前目录下就会 “莫名其妙” 的生成一个exe程序。如果你不喜欢,那也可以 “generate code only”。
如果是上面没列的编译器,自己也可以把它集成进来,比如构造个template makefile,描述怎么编译链接变成可执行文件。
好像还是没解释所谓硬件支持的问题?
i/o drive blocks
刚才说的是后台可以调用编译器,构造main文件,生成了可执行文件,下载到硬件。
在很久很久以前,代码生成工具为一些板卡提供了i/o驱动模块库,tic2000/5000/6000,等等。
然后可以做什么?
看下面这张图,两端的in/out就换成图中的硬件驱动模块。举例的板卡的驱动库我没装,暂时拿arduino的库示意一下,提供了很多下图中红框类似的模块。
那么,中间用simulink/stateflow搭好算法,两头的输入输出端口连接上这些硬件驱动模块,后台又做好了编译工具链的支持,就可以实现传说中的支持某款硬件:一键下载到硬件上运行了。
如果使用这种方式来开发产品,这样看上去感觉真的很美好~
但是,目测,要做的额外的工作也非常多,所有的要用到的驱动都需要包裹成simulink block的形式,要自动生成所需要的main文件,等等,这也是不小的工作量。
做产品开发,使用哪种 “集成” 方式,仁者见仁。
现在就coder工具来说,这部分 “对硬件的支持” 从coder里剥离了,变成了免费的hardware support package下载。用来做做算法的原型测试也不错。
另一个经常会问的问题:
代码生成工具的效率怎么样?
虽然coder习惯叫代码生成工具,但它实际上是个代码翻译工具,把simulink模型“翻译”成c代码。
其实就跟金山词霸,谷歌翻译一样,基于你写的中文翻译成英文。
“今日天朗气清,看似极好的日子,私心想若能约上三五好友,结伴出游,陶冶性情,便是再好不过了。”
再厉害的谷歌翻译,也翻译不出这句人话:“今天不想上班。”
所以对于coder来说,也是一样,它的目标是c代码如实的反映出你搭建的simulink模型结构所表达的信息。在考虑生成的c代码效率如何时,也不能忽略simulink模型搭建的效率如何?
simulink coder生成的c代码主要用于加速桌面仿真、快速原型、以及hil测试(被控对象模型也要生成c代码)。embedded coder提供了更多的自定义的途径,生成高效率的嵌入式c代码。
但其实,对于我们用户来说,这些coder都是 “看不见” 的,没有所谓打开embedded coder工具箱的说法。
我们只需要关心选择哪一个系统目标文件(system tareget file)。罢了,下图。“无责任瞎猜一句”,为什么这些后缀名是.tlc呢?因为coder里面干翻译这个活的叫targetlanguagecompiler。
红框外的.tlc只是针对各自不同的目标稍作了些修改,完成一些额外的事。比如ert_shrlib.tlc,多做了一个工作,把生成的.c.h变成.dll。
这一个小节说人话就是:选择ert.tlc。
如果对于一些小算法你有什么高效率的实现,也可以添加进来。比如说查表,比说说针对某个特殊器件的四则运算,到时候coder就会替换你的实现方式。
当然,一些通用的提高代码效率的方法,还是可以试试。让 coder 基于它的 “经验”,给你一些通用的建议:
所以,对于代码生成的任务来说,除了选择ert.tlc,点个按钮之外,再考虑下数据管理、代码结构、文件结构......
研究人员研发出一种基于深度学习的新方法 可分析天气和驾驶员行为对电池系统性能的影响
2018年的智能音箱市场无疑是惨烈的 各方仍旧愈战愈勇
如何利用多个上下文信息来做同义实体发现问题上进行了一些新的探索
小区电动车充电桩盈利能力前景分析
采用结型场效应管加大输入电压范围电路
关于利用Simulink模型自动生成C代码的相关研究和分析
工信部支持北京等五地创建国家人工智能创新应用先导区
海外投资实力突出,汇添富业绩持续上涨的原因是什么?
走线高速信号走线的九大规则
山寨版SAKURA樱花,生产空调,上演真假“李逵”
基于ADUC7026的PID算法在基站功率控制中的应用
功能单元+工业工程,锂电装备一体化新挑战
来自5G商用的前夜的观察和思考
华为屏幕指关节操作方法及技术原理
华为P10闪存门最新消息:华为P10闪存门事件将不会再发生,打破三星限制华为要自己造
设计多层板时的重要注意事项
华为荣耀9怎么样?荣耀9和荣耀v9有什么区别?荣耀9和荣耀v9对比评测
苹果 Clips「小程序」瞄准 AR 眼镜
无人机气象监测
智能照明控制系统在建宁县医院项目的设计与应用