最后生成神么格式的代码_手把手教你代码生成(下):SIMULINK代码生成

FrancisZhao:专栏文章列表以及一些说明zhuanlan.zhihu.com

FrancisZhao:手把手教会代码生成(上):MATLAB代码生成

本文主要参照书《SIMULINK仿真与代码生成技术入门到精通》
Simulink coder 和 Matlab coder 生成代码的方式存在差异。特别地,在代码生成的输入输出定义方面有明确限制:前者无法将输入输出定义为诸如结构体等复杂类型;仅限于矩阵形式。同样地将函数封装为 MATLAB Function 块时,请配置输入输出端口设置。具体操作步骤如下:右击端口1并选择 Block parameter对话框,在 Port dimensions字段中设置相应的输入格式,在本例中请将 Port dimensions字段设置为 [4 1]。此外需要对模型中的信号线进行命名以提高代码可读性。

图15 信号线命名
点击如图16选项,进入代码设置界面。

图16 进入设置界面
如图17中点击“System target file”右侧的“Browse”,如图选择“Embedded coder”。

图17 硬件选项
其中的Toolchain setting 设置为下图所示。

图18 Toolchain setting
如图18,点击“Custom Code”选项并将最上方的选项框打勾

图18 Custom Code
点击其中的“Code placement”选项,如下图选中最后一个选项。

图19 Code placement
同理,如图选中如下图选项

图20 Code placement
如图21所示,在选项设置页面中打开"Code generate advisor"选项。勾选此项目后,请运行"Run Select Checks"以生成检查结果,并根据检查报告进行必要的设置修改。

图21 设置检查选项
最后点击“Build model”,生成代码如下图

图22 代码生成图
Simulink环境下的代码生成参数配置设置,在进行Simulink至目标硬件移植的过程中,则需对Configuration Parameters进行相应的配置设置。通过这些设置参数可以控制和管理模型的代码生成方式、编码规范以及相关的运行环境要求。其中最为关键的是确定合适的求解器类型以及相关的目标文件规范;此外还需要明确系统的硬件实现要求。

图23 Model Configuration Parameters配置界面图
5.1 模型的解算器Solver
模型解算器solver页面,如下图

图24 Solver图
在Solver选项中,“类型”设置为固定步长;在Solver选项中,“求解器”选择离散型的原因是模型的状态并非连续性特征;在Solver选项中,“固定步长大小”设置为自动模式,在STM32代码生成过程中,默认配置外设或内核定时器中断周期作为步长值,在硬件芯片上实现统一时间间隔的操作算法

图25 Hardware Implementation图
H/W board的选择被指定为None,无需指定具体的操作系统

图26 Code Generation图
在Code Generation模块中,默认设置下会指定ert.tlc参数以实现嵌入式代码的编译。

图27 Report图
Generate an HTML-format code generation report.
Automatically open the generated report.
Generate static code metrics, including program size and memory usage statistics.
Configure the Comments subtag settings as follows:
如上图所示.

图28 Comments图
Add/insert comments, which will automatically insert annotations into the code. Comments associated with Simulink blocks or Stateflow objects will carry links to corresponding model files in the project. 5.3.4 Symbols sub-label configuration, as shown in the following figure:

图29 Symbols图
代码生成遵循特定命名规范,在无特别指示的情况下应予以保留。

图30 Custom Code图
旨在允许用户提供自定义的源代码路径

图31 Interface图
Code replacement library集成于目标语言的数学函数和操作函数库,并实现自动连接;

图32Code Style图
CodeStyle决定了代码生成的风格设定,并且这种设定不会直接影响到实际的编码操作。
在第5.3.8节中设置了Verification子标签的配置参数。

图33 Verification图
Code profiling: 该功能可用于决定是否需要测量程序运行时长、函数运行时长以及相关变量名。
Code coverage for SIL or PIL: 该部分的功能包括计算SIL和PIL的覆盖率,并提供相关的设置选项。
5.3.9 Template subtag configuration: 请参阅下图以获取配置Template子标签的相关细节。

图34 Template图
编码模板:决定代码段生成顺序,默认设置

图35 Code Placement图

图36 Data Type Replacement图
Data Type Replacement:用于自定义数据类型名称的设置,默认情况下将保持原有数据类型命名规则;5.3.12 Memory Sections子标签相关配置,请参考下文图解说明

图37 Memory Sections图
Memory Sections: 配置函数、常数、输入/输出、数据和参数的存储段;这些设置只影响存储的方式以及它们是否为固定或变量存储,并不会对实际的数据类型产生任何影响。Code Generation中Function Packaging 被选中时,则可以选择相应的函数及其内部数据存储段进行配置;5.3.13 Code Generation reporter,请参考下图:

图38代码生成报告图
内容概述:涵盖所选各部分内容报告。
模型文件:包含模型的具体实现及其需要用到的标准库。
子系统文件:涵盖各子系统的源码和相关头文件。
基于STM32F7平台的Simulink代码生成配置
采用Simulink Coder实现一键式生成STM32F7嵌入式程序具有简便高效的特点。
本文选择基于STM32-MAT/TARGET作为开发工具导入至Simulink环境进行深入研究。
本文重点阐述基于STM32-MAT/TARGET平台下的Simulink建模与代码生成配置。
通过将 STM\rm{M}32-MAT/TARGET导入至 Simulink 环境可直接调用相应的模块功能(如图所示)。

图39 TSP-STM32模块图
点击Simulation设置中的Model Configuration Parameters参数项并进入代码生成配置界面中

图40 Model Configuration Parameters配置界面图
必须配合至少三部分以生成嵌入式代码:包括模型的解算器Solver、系统目标文件(stm32.tlc)以及硬件实现规定(Hardware Implementation)。 模型解算器Solver页面如图所示。

图41 Solver图
在Solver选项中,Type设置为Fixed-step;Solver选项中选择了离散求解器的原因是因为STM32并非连续状态;Code Generation模块中系统目标文件的选择如图所示。

图42 Code Generation图
在配置窗格中选择stm32.tlc时,在Code Generation标签页下方的功能选项子标签也会相应发生变化,并新增更多功能选项标签(如图所示),这些新增的子标签将被放置于方框内。

图43 STM32子标签图
在Code Generation部分中涉及STM32子标签的配置方案。通过路径配置选项中设置相应的文件位置,请参考下述图形。

图44 STM32 Options图
下载应用模块:是否启用STM32CubeMX的功能以生成工程?
通过" STM ̲̄̄̃̃̂̂ ̄̂ ̃̂Path Update"功能可自动生成项目文件夹位置信息以支持自动生成项目文件夹位置信息以支持
在"Installed Full Path"设置项中指定完整的安装目录为ST\ \ \MAT-TARGET驱动程序安装目录为ST\ \ \MAT-TARGET驱动程序安装目录
在"Model configuration (ioc) Full Path"设置项中指定完整路径为基于STM\ \ \CubeMex构建的应用层硬件模型完整路径为基于STM\ \ \CubeMex构建的应用层硬件模型
通过" STM ̅̅ Project Files"子标签可自动生成与Matlab矩阵相关的C代码转换关系

图45 STM32 Project Files图
getBuffPtr变量是一个由STM32-MAT/TARGET提供的C函数,在此函数中将MATLAB矩阵转换为对应的C指针变量,并支持附加功能的引入。研究领域涉及Matlab与Simulink对比分析

图23 simulink代码生成后的主函数

图24 matlab代码生成后的主函数
由此可见,在转化后的代码中提升可读性方面
欢迎指正讨论,转载请注明,认同请点赞。
