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