有些时候在生成代码后,可能需要和外部代码(如手写代码或其他工具生成的代码)进行集成,此时我们可做以下准备工作:

  1. 确保模型输入输出接口正确
  2. 确保入口函数可被调用
  3. 多个模型生成的代码集成到一个工程里
  4. 代码文件存储管理:代码打包、代码存放位置管理

下面以官方提供的模型ETC_Controller为例说明
在这里插入图片描述
在这里插入图片描述

模型输入输出接口

如果模型中的input是从workspace中读取数据的,embedded coder是不会把这部分生成到代码中的,如下图,打开model properties查看模型的callback。
在这里插入图片描述
从下图可知,模型打开前(PreLoadFun)前会加载Kp、Ki、Ts和padel、angle等数据:
在这里插入图片描述
并且configset中的data import/export设置为:
在这里插入图片描述
这种从workspace中读取的import数据(pedal,angle)并不会生成到代码中:
在这里插入图片描述

手动调用入口函数
之前介绍过,主函数中有3个入口函数(entry point function),

extern void piCtrl_integ_initialize(void);	// initialization entry point
extern void piCtrl_integ_step(void);	// routine entry point
extern void piCtrl_integ_terminate(void);	// termination entry point

如果想用手写代码调用这3个函数,需要在手写代码中#include “model.h”。
另外在ert_main.c中只调用piCtrl_integ_initialize()和piCtrl_integ_terminate(),并不会用周期性中断调用piCtrl_integ_step()。
在这里插入图片描述
在这里插入图片描述
我们可以做一些改动,手写一些代码进行调用,比如在原代码ert_main.c的基础上进行如下修改:
在这里插入图片描述
修改好后在work folder中用cmd命令打开控制台,输入:

cd model_ert_rtw	// 更改文件路径
model.bat	// 编译新的exe文件(把修改后的ert_main.c编译进去)
cd ..	// 更改文件路径
model.exe	// 执行exe

则会出现:模拟周期中断调用后的结果输出。要说明一点,这里是借用Visual Studio或者MinGW进行编译链接的。
在这里插入图片描述
这里有个补充,当在configset中做如下设置后,每次生成代码时ert_main.c会都被覆盖。
在这里插入图片描述

多个模型生成的代码集成到一个工程里
当多个模型生成代码需要放到一个工程中时(并行开发时常出现这种情况),有些文件是最需包含一次的如rtwtype.h。此时可以通过如下设置把共享文件分离出来以便管理。该选项会把共享文件放在\slprj\ert_sharedutils里。
在这里插入图片描述
代码打包
该选项可把需要IDE进行集成(编译链接)的代码文件打包好,以便管理。
在这里插入图片描述
在这里插入图片描述
如果代码已经生成好了,想进行打包,可在command窗口敲入以下命令进行打包压缩

// buildInfo.mat在model_ert_rtw文件夹中,每次生成代码都出现
load('buildInfo.mat')	
packNGo('buildInfo.mat')	// packNGo('buildInfo.mat',‘packType’,‘hierarchical’)

代码存放位置管理
代码生成后一般存放在model_ert_rtw文件夹中,但也可以修改其存放位置,在command窗口敲入以下命令:

Simulink.fileGenControl('set','CodeGenFolder','newFolder')
Simulink.fileGenControl('set','CodeGenFolder','newFolder','CreateDir','ture')

如果想更改编译、仿真或代码生成过程中缓存文件的存放位置(一般默认存放在\slprj文件夹中),可在command窗口敲入以下命令:

Simulink.fileGenControl('set','Cachefile','newFolder','CreateDir','ture')

如果想要查看当前设置的文件存放路径,,可在command窗口敲入以下命令:

Simulink.fileGenControl('getConfig')
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐