本帖最后由 hpp19860 于 2017-5-23 11:10 编辑
各位大神好,我刚开始入手代码生成。发现外部函数 testfun() 在状态图的位置不一样会导致产生的代码差别很大。file:///D:\Program Files (x86)\QQ\QQmsg\52747630\Image\C2C\7VI6XP9H6}L5MKU}P6`MR%P.png testfun() 函数为外部c 函数,问了几个大神大门告诉我产生这个的原因是流程调用和状态调用的差别,我想问下流程调用和状态调用是什 么意思,多谢!
调用方式一:在状态入口处调用testfun函数生成代码中会多如下部分(见图1)
生成的代码会对模型中的 i 值进行一系列的判断
if (mytest_DW.i < 2.147483648E+9) { if (mytest_DW.i >= -2.147483648E+9) {
tmp = (int32_T)mytest_DW.i;
} else {
tmp = MIN_int32_T;
}
} else {
tmp = MAX_int32_T;
}
调用方式二:在状态默认迁移处调用testfun函数生成代码中会多如下部分(见图2)
此方式中自动生成的代码没有对模型中的 i 值进行任何判断,而是直接拿来用
if (mytest_DW.is_active_c3_mytest == 0U) {
mytest_DW.is_active_c3_mytest = 1U;
mytest_DW.is_c3_mytest = mytest_IN_myfor;
testFun(mytest_B.FromWorkspace[1]);
for (i = 0; i < 6; i++) {
if (!((mytest_B.FromWorkspace[i + 1] > 8.0) || (mytest_B.FromWorkspace[i +1] < 4.0))) {
mytest_DW.yow += mytest_B.FromWorkspace[i + 1];
} else {
}
模型见附件:其中 b=2:1:10;
file:///D:\Program Files (x86)\QQ\QQmsg\52747630\Image\C2C\7VI6XP9H6}L5MKU}P6`MR%P.png
file:///D:\Program Files (x86)\QQ\QQmsg\52747630\Image\C2C\7VI6XP9H6}L5MKU}P6`MR%P.png
1.png
(11.76 KB, 下载次数: 0)
2017-5-23 10:50 上传
方式一:testfun 函数在状态如入口处调用
2.png
(11.83 KB, 下载次数: 0)
2017-5-23 10:51 上传
方式二:testfun函数在默认迁移处调用
2017-5-23 11:02 上传
点击文件名下载附件
318.62 KB, 下载次数: 4
b=2:1:10;