-
实用文档
从
Matlab
Simulink
生成易读可重用代码
by:
吴少风
MATLAB
提供从
MATLAB
代码或
simulink
模型生成
C/
C++
代码的功能。从
MATLAB 2011b
版开始,
MATLAB
将代码生成
< br>Coder
作为单独模块发布。
MATLAB
每年更新两次,经过不断完
善,新版本的
Code
r
功能更强大。用
MATLAB
生成<
/p>
C/C++
代码具有
MATLAB
Coder
、
Simulink
Coder
、
Embedded
Coder
三个功能模块,
MATLAB
Coder
从
MATLAB
代码生成代码,
Simulink
C
oder
从
Simulink
模型生成
代码,
Embedded
Coder
结合
MATLAB
Coder
和
Simulink
p>
Coder
,
生成嵌入式代码。利用代码生
成功能,可以快速从模型生成可靠的代码,应用越来越广泛。
要生成易于阅读、重用性好的代码,
必须进行详细设置。
文中内
容以易读、
可重用为目
标,建立嵌入式代码生成的演示模型,了
解
Simulink
代码生成相关工具,介绍详细设置步
骤,最终生成容易阅读、
可重用代码,供单处理器单任务实时嵌入式系
统应用。文中的方法
为严格控制生成代码的个人总结。
以文档呈
现,
方便自己今后查看,
也希望能为其他人提供
一些方便。
1.
简单示例
本部分搭建一个简单的
PI
控制器模型,示范模型建立、设置
、生成代码的详细步骤。
1)
p>
新建嵌入式代码生成模型,
MATLAB->simulink
p>
,
New / Embedded Coder / Code
Generation System
。不选择一般
simulink
模板,可减少模型配置参数的设置。
2)
搭建如
< br>错误!未找到引用源。
所示简易模型,保存文档,设置文件名。
< br>
图
1.
一个简单示例模型
3)
点击工具栏图标
,设置模型配置参数
,应用并保存。对嵌入式应用,固定步
长,离散,可调参数,
E
RT
目标,
C
语言,设置基本固定,未
设置的地方保持默认。
?
solver options: type -- Fixed step.
solver -- Discrete.
?
optimization->signals and parameters:
?
Default
parameter behavior -- tunable.
?
Pass
reusable
subsystem
outputs
as
--
输出较多选用
structure
reference.
文案大全
实用文档
?
hardware
implementation:
按实际设
hardware
board,
device,
device
details.
?
code
generation:
?
System target file -- , Language -- C,
generate code only. code
generation
objectives.
?
comments: include comments,
默认全选,可按需要选择。
?
symbols:
命名规则设置,按各自代码规范设置。
?
interface:
设置整个模型生成代码的接口。
?
code interface
package
,可选择可重用,
Pass root
level I/O as
,模型
输入输出参数一般较多,一般
选择结构体,
structure reference
,模型
数
据、
输入、
输出通过各自独立结构体
传入参数;
part
of
model
data
struct
ure
,
一个结构体传入参数。也可选择不可重用。
?
configure
model
f
unctions
,
点击进入,
设置模
型具体的
C
原型。
get
default
configuration
,可修改模型默认
initialize/step
函
数名,及参数,各输
入输出单独作为函数参数,这与结构体传参是矛盾的,不能同时设置
。
?
code style:
设置代码风格。
?
Parentheses
括号,
--
Nominal(readability)
,按可读性优化。
?
Casting mode
强制转换方式,
Nominal.
?
Code
indentation
代码缩进,
size -- 4.
?
Code
placement:
代码放置,
可
设置变量定义或声明在单独文件还是和源代码放
一起,头文件包含是
< head.h >
还是
。
?
Data type
replacement:
数据类型替换。
4)
设置模型中每一个基本模块的属性。
包括名称、值、数据类型、采样时间等。子模块或者引用模型等这类自定义模块,除了
内
部基本模块的属性外,还要设置各自的模块属性。模块中参数等值,必须按照设计配置;
如果想使用可调参数,
则将参数设置为变量,
再设置变量值。<
/p>
生成代码模型中的模块名设置,
最好遵循目标语言的命名规则,<
/p>
因为生成代码中的一些名称可以从模块名继承。
嵌入式应用
大多无浮点单元,定点数据的设置在模块属性的代码生成栏。
将图
1
中各模块可按如下方式设置:
?
inport
,点击模块下方名称,设置模块名,将其设置为
In
;双击
模块进入模块属
性设置,
main
栏设
置编号,
编号会体现在子系统或引用模型上;
signal <
/p>
attributes
设置数据类型为定点数,
< br>16b
字长
10b
小数部分
p>
fixdt(1,16,10)
。
其它模块
设置方
法类似。
?
view->model
data
,弹出
model data
窗口。
simulink
提供的
mod
el data
窗口,
用于显示当前层级下的所有输入输出、信
号、
状态、
参数,
并将对应属性罗列成
表
格,而且表格可编辑部分属性。
文案大全
实用文档
?
Kp
增益模块,
双击模块,
输出数据类型设置为同输入,
参数数据类型设置为从
Gain
继承,
Gain
设置为
p>
Kp
。
?
在
model
data
窗口,
参数栏,
Kp
模块,
值变为
Kp
,
其后出现
create...
链接字样。
点击弹出
create new data
窗口,值选择
p>
ter
,位置选择
Base
Workspace
,创建,弹出
ter: Kp<
/p>
属性窗口,设置值为
10
,数据
类型为定点数
fixdt(1,16,10)
,
存储类型选择
ExportedGlobal
,确定。
?
Ki
增益模块,使用设置
Kp
的方法将
simulink
参数属性值设为
1
< br>。
?
File->Model
properties
,弹出模型属性窗口,选择数据栏,将数据定义到数据字
典,
选择或新建一个数据字典文件,
应用。
建立在基本工作
区的数据迁移到数据字
典保存。
后面该模型新建参数等数据,<
/p>
基本工作区的位置将被数据字典代替。
保存
在基本工作区的数据,
关闭
MATLAB
不会自动保存,
因此一些模型也采用脚本配置。
位置也可选
择模型工作区,
但保存到模型工作区的参数,
有效的存储类型会
受到限
制。
?
unit delay
单位延时,初始条件设为
0
,状态名称按实际意义
设置。
?
Outport
,数据类型可选自动。
信号名称,可到
model dat
a
窗口统一设置,该窗口中选中信号,模型区会用颜色标记
对应
标记。没有设置名称的信号,按照内部规则生成代码。
模型相
关设置,
simulink
还提供
mo
del explorer
图形界面统一管理。点击图标
打开。
5)
<
/p>
设置完成后,启用
Advisor
检查模
型设置。选择检查项目,
运行检查,修改不符合
的项目。
analysis -> model advisor
,针对模型,可选项目包括
MISRA
、
ISO26262
等。选中
by
task
,右侧点击
run
selected checks
。
analysis -> data type design -> fixed
point tool
,进入设置后,左侧选择项目,
右侧运行
检查。
code -> C/C++ code ->
code generation advisor
,针对生成代码,可选项目有空间<
/p>
效率、执行效率、可追踪性、安全预警、
MISRA C:
2012 guidelines
等。
检查项目可能会弹出一些警告,
是之前手动设置的,
这时选择
忽略。
比如内联参数有效
率,但想要用可调参数,就只能忽略检
查时的警告。
6)
点击图标
文案大全
可
,编译模型生成代码。完成后可查看报告。
实用文档
算法代码如下:
数据定义如下:
文案大全
实用文档
nk
生成代码相关工具
在“
1
简单示例”一节,介绍了代码生成的详细过程
。其中一些常用的工具及菜单,现
罗列于表
1
中。
表
1.
常用工具及菜单
图标
名称
最方便的位置
功能
Library
Browser
工具栏图标
基本模块库,搭建模型的基本元素所在库。
Model
Configuration
工具栏图标
Parameters
Mode
Data
Model
Explorer
模型配置参数,模型仿真、生成代码所依赖
的
全局规则。
菜
单
View----
列表显示当前层级模型的信号、
参数、
状态等,
p>
-Mode Data
可以在此处集中编辑。
工具栏图标
树状结构的模型管理器,
包括数据、配置、子
模块等。从树状结构可以看出,每一个模型都
单独包含数据数据、配置等元素。
根据选定项,针对模型设
计,进行检查,提供
建议。用户根据建议修改自己的模型。
<
/p>
根据选定项,针对代码生成设置,进行检查,
提供建议。用户根据
建议修改自己的模型。
Model
Advisor
工具栏图标
Model
Advisor----
图
标
下拉
Code
Generation
Advisor
Fixed-
Point
Tool
菜
单
Analysis
---- - data Type
针对定点数设计,进行检验,提供建议。用户
Design
-
可以根据建议修改自己的模型。
Fixed-Point
Tool
工具栏图标
根据配置,编译模型生成
代码。图标下拉栏还
有:编译备选子系统,嵌入式代码快速向导。
快速向导按步骤生成新配置,
并依次生成代码。
模型仿真运行。一般首先会用仿真验证模型。
Build Model
Run
工具栏图标
文案大全
实用文档
保留的默认名称
在“
1
简单示例”一节,生成的代码中出现了一些固定的名
称,这些是代码生成器保留
的默认名称,
用户不能改变。
为方便理解生成的代码,
将这些默认名称及含义列于表
1
中。
表
2.
生成代码中的默认名称
默认名称
U
Y
B
P
DW
DefaultP
Ext
含义
整个模型的输入模块
整个模型的输出模块
模块输出信号
模块参数
离散模块状态
默认参数
全局类型加的前缀
默认名称
local
rt
rtb
_T
step
含义
局部变量加的前缀
全局变量的前缀,可设置
局部模块输出的前缀,可设置
默认类型后缀,可替换
模型入口,可设置
initialize
模型初始化,可设置
4.
代码重用
该部分将搭建一个稍微复杂模型,封装参数,生成可重用代码。
1)
建立如
错误!未找到引用源。
模型。
图
2.
PID
模型
文案大全