回复:也来谈谈“先赋值后使用”!

幸福的方向

  • 帖子

    227
  • 精华

    0
  • 被关注

    16

论坛等级:侠士

注册时间:2010-04-11

普通 普通 如何晋级?

发布于 2018-01-15 21:01:18

12楼

展开查看
以下是引用emil128在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 堆栈中,会为每个数据块保留相同个数的字节,作为存放每个块所拥有的静态或局部数据。
当某个块终止时,那么它的空间随之也被重新释放出来。

指针总是指向当前打开块的第一个字节。



谢谢大侠的指正,其实当时最后那句结论自己都觉得不对,只是当时没删,也幸好没删才引出老师的指正。以前错误的认为,FC中的临时变量存储区就在FC中,FB中的临时变量存储区就在FB中,看了你们提供的资料才认识清楚。

“飞天玉虎: 嗯,每一个组织块都拥有一片自己的独立的临时本地数据存储区,该组织块下调用的功能和功能块的临时变量都位于该区域。”一并谢了,一句话切中要害。原来,在OB块中调用的FC也好,FB也好,其临时变量都来自于调用块OB。

“2、不同优先级的本地堆栈区不同,不会互相干扰。”这说的应该是不同的OB块,分别有各自的临时变量存储区,那么在不同OB块里调用执行程序时,临时变量存储区各用各的,互不影响。

  感谢指正,又总结了一下,如果有错,还请继续指正。谢谢

    

雨过分洼种瓜,旱时饮水浇麻。
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54618条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。