Fortran Coder

查看: 738|回复: 3
打印 上一主题 下一主题

[混编] IVF可以正常运行的代码在simulink中出现数值对不上的错误

[复制链接]

6

帖子

2

主题

0

精华

入门

F 币
41 元
贡献
12 点
跳转到指定楼层
楼主
发表于 2024-3-11 10:53:45 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我在尝试把一个Fortran77写成的大型代码打包成一个S函数放在simulink中调用,目前可以正常生成.mexw64文件和S函数,编译正常通过不会报错。但是实际运行simulink时MATLAB会崩溃。通过在Fortran代码里写输出文件的方式定位到问题所在,发现是Fortran中的实参并没有传递给子程序,子程序中对应的量是乱值。这种情况需要怎么解决呢?
在VISUAL STUDIO下,原Fortran代码是可以正常运行的,但是实际运行就会出现变量的值对不上的问题。
由于Fortran代码比较老,有很多不规范的写法,比如未经声明就使用变量,形参实参变量类型不一致。但很神奇的是在IVF中可以正常运行,只有放到MATLAB里才发现有问题。
VS里有设置项目属性的方式,可以忽略数组上限,不检查例程交互,默认变量初值为0之类的,把这些都关闭后,Fortran代码也会出错。但是打开后就能正常运行。MATLAB里有没有类似的可以设置这种属性的地方?
下面是出错地方的例子,排查掉很多了,但如果继续这么排查下去,不知道要多久。
图中的L2按道理应该是0,1,但是实际MATLAB运行中的值是很大的一个整数

错误2.png (22.96 KB, 下载次数: 101)

子程序内

子程序内

错误1.png (16.36 KB, 下载次数: 103)

子程序外

子程序外
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
沙发
发表于 2024-3-11 14:24:09 | 只看该作者
一般是接口不匹配造成的,matlab默认8字节整型,数据类型和fortran不一样。

6

帖子

2

主题

0

精华

入门

F 币
41 元
贡献
12 点
板凳
 楼主| 发表于 2024-3-11 14:47:09 | 只看该作者
li913 发表于 2024-3-11 14:24
一般是接口不匹配造成的,matlab默认8字节整型,数据类型和fortran不一样。

但是出错的地方还在Fortran内部,还没到和MATLAB进行交互。举个例子就是用子程序算个1+1=2,出来后把2传给MATLAB,但是进入子程序后变成了321546856+152438215这种乱值。我试过写成INTEGER*8,但是似乎也没用

6

帖子

2

主题

0

精华

入门

F 币
41 元
贡献
12 点
地板
 楼主| 发表于 2024-3-31 16:15:04 | 只看该作者
问题解决了,是只要在子程序变量声明的地方加一个“SAVE”就不会出现变量值对不上的问题了
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-22 22:19

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表