当前位置:网站首页>2837xd 代码生成——总结篇
2837xd 代码生成——总结篇
2022-07-02 06:35:00 【Quikk】
2837xd 代码生成——总结篇
代码生成是一个很庞大的体制,花了好久大致理清楚了调理。本文也会就之前没有提到的Simulink Coder进行实测解释用法。
1 代码生成的产生
代码生成技术的产生是近年来,不断流行的MBD(model basic design)进行催生演化出来的重要的环节。目前越来越多的算法需要通过CAE进行分析,然后开发产品。如何能够快速将设计的model转变成产品成为了软件工程师攻克的主要方向之一,如果能够从模型直接生成代码会减少很多不必要的人力和物力对底层的重复开发。
2 代码生成流程
代码生成技术在现阶段主要分程:1)需求分析 2)模型设计 3)仿真验证 4)转换为产品
需求分析这里不做详细解释,不是现阶段的研究重点。
模型设计主要是根据需求进行建模,仿真和验证算法是否符合需求。
仿真验证主要分为SIL(软件在环)、PIL(处理器在环)、HIL(硬件在环)三大块进行测试。
1)SIL主要负责验证model仿真和生成的代码运算结果在PC端进行验证是否结果一致。
2)PIL是指将生成的代码烧写到处理器设备(DSP、ARM等),然后将运算结果进行回传到PC端,PC端将其运算结果和model的仿真结果进行对比检验是否有误差。
3)HIL是利用更加复杂的外部硬件,进行模拟被控制对象。控制器使用DSP或ARM烧录好程序。观测外部硬件是否能够达到期望效果。这一步完成后,证明所设计的控制器能够较好的完成控制任务。下一步就能上实物平台进行实物实验了。
3 代码生成的一点补充
详细的代码生成已经在前面的文章进行了摸索式前进。还有一块内容是Simulink提供了官方的库Simulink Coder进行兼容添加自己的已经写好的文件。这一方面可以很好的提供某些模块没有涉及到的功能进行代码使用,同时可以进行兼容已经是验证过的c语言算法。
Simulink Coder库中有一个Custom Code,其中包含若个库文件:
这里摘录一段官方文档的表格:官方链接
其中主要我感觉有实际作用的是,下面做了测试发现:
1)System Initialize:不管是模块内部还是顶层模块上的System Initialize模块。都只在系统初始化函数中执行一次。
2)Model Source:会在生成的.c文件的对应部位加入所写的代码,一般是函数的声明与实现部分。
3)Model Header:会在生成的.h文件的对应部位加入所写的代码,一般是函数的定义、数据类型的定义。
4)System Updata与System Output:都会在步长函数中每个步长都会执行,Output中代码段会先于Updata进行执行。放在哪个模块就会在哪个模块的函数部分进行执行。Ouput的header和body都会在该子模块的最开始加入代码,即先于模块执行,Output的bottom会在该子模块的结尾加入代码,即执行完模块后执行。而Updata模块会在子模块内容都执行完毕之后(包括Output的bottom执行完毕)分别执行header、body、bottom处的代码。
5)System Start与System Enable: System Start会在初始化函数的开头加入代码,不管放置在哪都只执行一次。System Enable初始化函数的结尾处加入代码,不管放置在哪都只执行一次。
边栏推荐
- 记录下对游戏主机配置的个人理解与心得
- Solution to amq4036 error in remote connection to IBM MQ
- [go practical basis] gin efficient artifact, how to bind parameters to structures
- MySQL multi column in operation
- Oracle modifies tablespace names and data files
- Microservice practice | declarative service invocation openfeign practice
- Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedd
- Knowledge points are very detailed (code is annotated) number structure (C language) -- Chapter 3, stack and queue
- [go practical basis] how to customize and use a middleware in gin
- 企业级SaaS CRM实现
猜你喜欢
Creation and jump of activity
微服务实战|微服务网关Zuul入门与实战
Typora安装包分享
Flink - use the streaming batch API to count the number of words
Navicat remote connection MySQL reports an error 1045 - access denied for user 'root' @ '222.173.220.236' (using password: yes)
Matplotlib swordsman - a stylist who can draw without tools and code
Watermelon book -- Chapter 6 Support vector machine (SVM)
FragmentTabHost实现房贷计算器界面
Timed thread pool implements request merging
微服务实战|原生态实现服务的发现与调用
随机推荐
微服务实战|声明式服务调用OpenFeign实践
MySQL事务
Who is better for Beijing software development? How to find someone to develop system software
Timed thread pool implements request merging
Idea view bytecode configuration
idea查看字节码配置
微服务实战|熔断器Hystrix初体验
A detailed explanation takes you to reproduce the statistical learning method again -- Chapter 2, perceptron model
hystrix 实现请求合并
Methods of classfile
BugkuCTF-web16(备份是个好习惯)
Number structure (C language -- code with comments) -- Chapter 2, linear table (updated version)
JDBC回顾
图像识别-数据增广
JVM指令助记符
Actual combat of microservices | discovery and invocation of original ecosystem implementation services
ClassFile - Attributes - Code
Oracle modify database character set
一次聊天勾起的回忆
C语言之数据插入