FC功能的形参占用的内存地址在其主调函数(例如0B1中调用FC)的L堆栈吗?如何查看?
OB中的L堆栈向FC功能传递参数,指的是实参赋值形参的,对吗?
问题补充:
@zhangli0,谢谢,不过您没说明白啊。主要是指针的指针在主调函数的L堆栈,所以想搞清楚非point和any指针的形参占用的内存地址在哪儿.
最佳答案
堆栈去是公用的一段内存,不存在说是 被调用方用的是调用方的堆栈。既然堆栈是公用的,所以说形参使用之前,包括temp使用之前一定要赋值,不然你都不知道里面到底存的是什么值。当FC的形参赋了实参后,打个比方FC的L0.0指向的是I0.0,那么L0.0中存储的是I.0的地址也就是指针,说到底,指针也是一串数值,只不过这串数值被翻译为一个变量的地址。当一个FC1调用另一个FC2,把 FC1的形参赋值给FC2 的形参做实参的话,ob1又调用FC1把M0.0给了FC1的形参 ,那么最终还是能指向M0.0。相当于FC2 的形参对应的L0.0区里面存的是FC1的形参对应的L0.0区的地址,但是这个地址不是固定的是会变的,因为你不知道下一次会使用L堆栈区里的哪一个具体的内存地址。
提问者对于答案的评价:
感谢两位的热心回答。
FC在实际运行时,针对输出形参(数据块)的处理其实都是在对该V区进行处理,在FC结束调用后,不管在FC中有没有对该V区进行实质性处理,该V区的内容均会被拷贝至另一个存储区,比如L区,该L区与实参区对应,但不在同一区,此时并一直等到本次OB循环结束,该L区内容都不会被拷贝至实参区,所以这个时候实参区的内容还不会有变化。
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc349522.html