恭喜,你发布的帖子
发布于 2018-01-15 10:04:35
9楼
楼主实验做的是对的,可结论我看不懂。
“块调用结束临时变量不会释放,释放的是一些局部变量”???
什么是临时变量?什么是局部变量?各是什么地址类型?
1、每一个优先级都拥有属于自己的本地堆栈区(L区),所有运行在该优先级下的OB、FB、FC的Temp都属于该区域。
2、不同优先级的本地堆栈区不同,不会互相干扰。这是西门子从系统角度保证了各中断程序和主程序间的堆栈数据安全。
3、每次调用FB或FC其temp区域的本地堆栈地址由系统指定,调用结束释放(只是不再占用,并不清零)。所以FB或FC的调用可能会使用重合的本地堆栈,这也就是为什么temp不能跨周期传递的原因,于是所有需要跨周期传递的自保、边沿都不能用temp。
L 堆栈永远以地址“0”开始。
在 L 堆栈中,会为每个数据块保留相同个数的字节,作为存放每个块所拥有的静态或局部数据。
当某个块终止时,那么它的空间随之也被重新释放出来。
指针总是指向当前打开块的第一个字节。
请填写推广理由:
分享
只看
楼主