|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Simulink转C代码
6 a5 J. G, m3 C4 A. s
6 J+ F2 o- }5 ~; a$ D一、Simulink 转代码设置
+ O$ _+ \; }+ b! s6 Q1. 首先建立模型。3 h6 ~* G, a% |" d1 D6 ?
2. 为每根信号线取名字(与输入输出口的名字相同)。$ k" F. X+ \" g3 o' c* P1 B+ i H
3. 为表格、常量等数据赋值(可通过变量)。检验模型是否能够运行,能够正常运行时转代码的前提。
" q: M# L& r7 f9 S: z4. 通过data object wizard的find,check all,mpt,package,create命令封装数据。4 m: e. u( \* g/ s8 b
5. 通过model explorer修改输入输出数据的类型(单片机中运行时,设定为(u)int8,(u)int16类型,可以采用继承属性Inherit: auto。)。注意包含Base workspace和自己模型下面的数据都要设定类型。
^2 C, _ R6 P5 q, I8 {5 O6. 第一次配置好configuration parameters后,不需要再次配置,至此即可generate code。! j3 k! N- W$ J- W/ C: w
5 n- s y' I8 a9 H+ u
1 |" l; U" p5 ^! B
关于configuration parameters:% X, q8 E7 v+ A1 ]
Solver:; K" p) {3 ~8 D# U% C+ N
( @4 h( X" s5 v
Data Import/Export
2 x' i' }! L( a: a5 L9 O
' S+ j3 p( b5 B0 w" g5 M1 nOptimization:
9 ~# P0 l, h4 Y/ B) D) q$ h" ?0 x9 V& _0 y6 W2 E% m8 e; F
Hardware Implementation:% B5 R; E2 ~+ _
) T9 C" n$ j7 q2 ^) A' \Code generation:
- G: S8 {# w# }' s1 ?
; f5 q R, g1 S2 y3 }Report:
3 r* C$ ?/ e9 {) Q8 A$ o! t
. ]$ b# s2 ~3 w) Q3 ~5 gComments:/ s4 x7 z+ \) ^1 V) h, \2 x8 ]& W7 S
$ K5 g5 ~/ `, U! G
InteRFace:6 I% y; V+ I: o3 r
* w4 k5 ]1 ]3 t5 j6 N( g, hTemplates:+ j$ Z( a% y( x( Z
; w2 O0 G5 {# J$ \& v: Z- _(图中的code templates是来自锡柴的,用simulink自带的templates也可以)
6 g3 q ^4 ?7 O! P$ wMemory Section:
9 ]! x5 @, t* z* o7 f0 c* f( M
二、Model configuration 说明-20170624
9 u* N7 F2 N4 g) x( k _这里阶段模型配置的3种方法:7 e9 k& F: N% g
第1种是第一章里面介绍的方法,手动逐条修改;
. S8 J' ^4 x3 ~5 x; N第2种是在原有配置基础上,export出m文件,修改后再inport;
7 `0 K8 ?5 P7 A- I
9 U3 e( K2 w9 @ s( {! M8 O& {* b
第3种则是利用simulink中自带的模块Configuration Wizard,调用rtwsampleconfig函数,函数中的具体设置可以手动更改。" E M& x0 s& J/ z; K0 B2 I
7 k( _" p3 r" v* V: X. o& n$ d6 j实际使用中,推荐第二种方法!' @+ i- E& e0 @
二、集成到目标代码里(针对codewarrior编译器)。! k7 @, F+ p/ H& n7 v/ T
1.在sources文件下新建文件RTW,将生成的xxx_ert_rtw和slprj\ert\_sharedutils文件下的.c和.h文件全部放进RTW中。$ e' h' k k9 i0 J' Q: j, Z" r
2.在codewarrior中添加RTW文件。; t/ P& _; X Y, k# L
3.在初始化中定义输入输出数据并外部声明(BP_Var_Initial.h,BP_Var_Extern.h中)。
5 U K, t. X$ q$ n! x4.为实现标定功能,将标定数据(表格等)放在RAM和Flash中。0 k$ n2 {2 Y6 V g6 d
将生成的数据定义和声明屏蔽掉。: F, e; H2 j7 h& @0 U( Y: v
在Cal_Ram.h和Cal_Flash.h中分别定义变量,在Cal_Ram_Extern.h和Cal_Flash_Extern.h中进行外部声明。放在Flash中的数据可为变量添加后缀_Flash。" C# ?* s) U; t
在FlashReadToRam()函数中将Flash中的变量值读到对应的Ram变量中。
* w/ w4 Y0 x! m3 ^, G5.在正确的位置调用生成的.c文件下的函数。
) x4 b* A) u6 Z) k7 n$ Y, B* x5 v
9 G$ Q! a* _# ` | 2 P/ o0 N! n& V2 J
7 M- H$ y4 f4 l* Z. ]/ P
0 E* s8 L# A: q |
|