当前位置:网站首页>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初始化函数的结尾处加入代码,不管放置在哪都只执行一次。
边栏推荐
- 破茧|一文说透什么是真正的云原生
- Oracle modify database character set
- Read Day5 30 minutes before going to bed every day_ All key values in the map, how to obtain all value values
- Fragmenttabhost implements the interface of housing loan calculator
- Matplotlib swordsman line - first acquaintance with Matplotlib
- VIM operation command Encyclopedia
- Chrome视频下载插件–Video Downloader for Chrome
- 自定义Redis连接池
- 数构(C语言)——第四章、矩阵的压缩存储(下)
- 因上努力,果上随缘
猜你喜欢

微服务实战|手把手教你开发负载均衡组件

Number structure (C language) -- Chapter 4, compressed storage of matrices (Part 2)

记录一下初次使用Xray的有趣过程

Matplotlib剑客行——布局指南与多图实现(更新)

kinect dk 获取CV::Mat格式的彩色RGB图像(openpose中使用)

Watermelon book -- Chapter 5 neural network

Chrome浏览器标签管理插件–OneTab

企业级SaaS CRM实现

Typora installation package sharing

互联网API接口幂等设计
随机推荐
Break the cocoon | one article explains what is the real cloud primordial
Say goodbye to 996. What are the necessary plug-ins in idea?
Beats (filebeat, metricbeat), kibana, logstack tutorial of elastic stack
MySQL error: unblock with mysqladmin flush hosts
Idea view bytecode configuration
How to use pyqt5 to make a sensitive word detection tool
Watermelon book -- Chapter 5 neural network
Matplotlib swordsman line - layout guide and multi map implementation (Updated)
Creation and jump of activity
Microservice practice | Eureka registration center and cluster construction
Required request body is missing:(跨域问题)
What are the waiting methods of selenium
C语言之到底是不是太胖了
微服务实战|原生态实现服务的发现与调用
Microservice practice | fuse hytrix initial experience
Pool de connexion redis personnalisé
西瓜书--第六章.支持向量机(SVM)
机器学习实战:《美人鱼》属于爱情片还是动作片?KNN揭晓答案
Matplotlib剑客行——布局指南与多图实现(更新)
Matplotlib swordsman line - first acquaintance with Matplotlib