回复:问一问自己做子程序自动分配背景数据的人。

holdkcsxyz

西门子1847工业学习平台

  • 帖子

    1560
  • 精华

    24
  • 被关注

    162

论坛等级:至圣

注册时间:2015-06-03

钻石 钻石 如何晋级?

发布于 2025-08-26 12:23:11

16楼

展开查看
以下是引用芳季在2025-08-26 09:14:48的发言 >15楼

你是每一个子程序都使用连续的地址的吗?即使被调用了不知道多少次?我还在消化。

以下是引用holdkcsxyz在2025-08-25 12:02:18的发言 >9楼:1如果没用到向导或者...

引用9楼详细内容:

1如果没用到向导或者库且子程序只有一个接口指针

 

A任意一个子程序里只有一个接口一级指针;则很容易找出子程序自身的干涉区:m==公共栈字节数+n个私有区*每个私有区栈字节数;子程序接口指针是&VBxx则这个子程序占用区是: VBxx到VBxx+m.

 

B子程序里除了自身的接口一级指针外,还有二级指针则如下图,变量表里的#从寄存址是一个二级指针;此时m==公共栈字节数26个字节+n私有从站数12个*每个从站占用的栈字节23字节+{2*(N1读从寄存数+N2读从寄存数...+Ni读从寄存数)+4*(N1写从寄存数1+N2写从寄存数...+Ni写从寄存数)}大括号内是二级指针涉及的堆字节数;此时子程序接口指针是&VBxx则这个子程序占用区是: VBxx到VBxx+m.

 


2如果有向导或者库还要计算向导以及库的内存占用区


3对于强类型语言,如果向导和库也是A或者B那样的类似函数指针接口式的构成,则所有的占用区都可以方便的计算出来,动态数组集合等预留的存储区也可以编译时就算出预留的方便动态扩展的占用字节数.


是的

编程者人工让这个子程序占用V区是连续,即使有二级指针也可以连续.


这样不管调用几次都可以很清晰的算出V区占用,并且可以在子程序的第一个NET就计算出来V区占用.


每调用一次子程序就要为调用的子程序分配一个新的接口地址,编译时就能立刻计算出V区占用.


新增加一个内部的私有逻辑,#全局循环也会递增1,立刻重算这个子程序新的V区占用.


涉及物理IO可以在子程序内部设计变量:物理IO接口指针比如#物理I区首地址指针---公共只读;#物理Q区首地址指针---公共只读;

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有8947条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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