Advertisement

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

阅读量:
d77977af03be363038259ae24d185df5.png

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

64fc9acb47046d21b9a1f36faebd1d6b.png

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

a75ab8a4e22a67529ceacae5e5e6d610.png

本文主要参照书《SIMULINK仿真与代码生成技术入门到精通》

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

c2b1e1f4afdb6b3a715889e9b4d60b30.png

图15 信号线命名

点击如图16选项,进入代码设置界面。

2396bd3a55dc0ea5960e4b7b795995f1.png

图16 进入设置界面

如图17中点击“System target file”右侧的“Browse”,如图选择“Embedded coder”。

853d2be70386514ad92b958140bbc121.png

图17 硬件选项

其中的Toolchain setting 设置为下图所示。

cf54cb9e8bfaedc01402ebb37b86e083.png

图18 Toolchain setting

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

9278de40df97cb8e61eb1a954a4dc67a.png

图18 Custom Code

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

da85122376894670d90e2c5cac43b198.png

图19 Code placement

同理,如图选中如下图选项

e4ef5904467050ab5c008df8fa3f2512.png

图20 Code placement

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

3756333538f65502878d34336095fd1d.png

图21 设置检查选项

最后点击“Build model”,生成代码如下图

fcb8520701c08e9829801f345f5878c6.png

图22 代码生成图

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

210b28d4af1e0865dab8d74756fdc96f.png

图23 Model Configuration Parameters配置界面图

5.1 模型的解算器Solver
模型解算器solver页面,如下图

543a087370f2c95bc4470bb21ea3b7bc.png

图24 Solver图

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

09cc5f930bb9b3f900db030c0d52408a.png

图25 Hardware Implementation图

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

01570ff8204bc6102031cbed2b2063af.png

图26 Code Generation图

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

86497fa70e4044d39fd5000e82e3a128.png

图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:
如上图所示.

b375f23a8279afcd4b06247fe9ec82e8.png

图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:

e9a21084a19e8b8b1cf0bedc992e94f3.png

图29 Symbols图

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

daaa8664e8591498e11afdbf1cfdad57.png

图30 Custom Code图

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

a058fcc24b713152db519aab419ff3ad.png

图31 Interface图

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

e5e1348487fac1f282077b3d95acc267.png

图32Code Style图

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

67edd057b2f387693fddd0630e849f66.png

图33 Verification图

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

6cb12196e10d7f372f840d4a8c21add1.png

图34 Template图

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

f53a1d9186e10e4156fb2ea836b7bd75.png

图35 Code Placement图

1f7d1bd74b89ae048a3637d369796b22.png

图36 Data Type Replacement图

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

970b942a8dadf5146788d8a585bf07e9.png

图37 Memory Sections图

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

9a4e4ac7267e8e7b10b79c5f1d34a168.png

图38代码生成报告图

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

df53c1d48bb2d3967d80e36a04b71773.png

图39 TSP-STM32模块图

点击Simulation设置中的Model Configuration Parameters参数项并进入代码生成配置界面中

210b28d4af1e0865dab8d74756fdc96f.png

图40 Model Configuration Parameters配置界面图

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

543a087370f2c95bc4470bb21ea3b7bc.png

图41 Solver图

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

b9918f3b8ad1b8cf398cb72a629d48ef.png

图42 Code Generation图

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

950a1f946de509549bcc68997d6cab89.png

图43 STM32子标签图

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

b5d3468f36f0d79c2e55986849d1fade.png

图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代码转换关系

6bec04d6ec097e584106db25201184ae.png

图45 STM32 Project Files图

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

658e8ae3444ac8b30ca46922a918d38b.png

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

1f10ba5f8c1cb45340f0ee87a3ce7919.png

图24 matlab代码生成后的主函数

由此可见,在转化后的代码中提升可读性方面

欢迎指正讨论,转载请注明,认同请点赞。

全部评论 (0)

还没有任何评论哟~