回复:子程序的使用

醉书生

  • 帖子

    718
  • 精华

    25
  • 被关注

    18

论坛等级:侠士

注册时间:2004-06-13

普通 普通 如何晋级?

发布于 2008-02-04 07:07:48

0楼

“变量不能重复使用或使用前必须赋值”这个规定不知是从哪里来,这完全是一个错误的规定。事实上编程是不可能避免变量重复使用的,任一个变量,完全可以任意赋值,编程者需要了解的是这个变量何时会被改变?是否会被自己代码以外的程序所改变?
比如一条最简的加法指令:


习惯用梯形图的人可能很少会意识到 VW10 实际上被赋值了两次
如何来理解“变量何时会改变”这句话呢?在中断程序中用到的变量不可做中间变量这个贴子中已有说明
“变量会被自己代码以外的程序改变”?这个主要涉及的是局部变量和累加器了。局部变量存在一个不确定初始值的问题,所以需要有明确的代码初始化才能使用它的值。累加器则比较特别,因为可能在任何地方使用它们,比如下面的代码是很不可靠的:
movw vw0,ac0
+i vw2,ac0
call sbr0, ... // 假设这里输出了一个值到 vw4
/i vw4,ac0
movw ac0,qw0
QW0 中的值是很不可靠的,因为我们不知道子程序 sbr0 是否会改变 AC0 的值
这种问题犹其是在使用第三方无源码的库时要特别要注意,不要在连续使用累加器的中间调用不明子程序,比如上面的示例代码应该将 CALL 指令放到最前面去
顺序说一下,西门子的官方库很多子程序中都使用了累加器而未作说明,这是很不负责任的。我们自己发布库的时候要形成习惯对资源的使用加以说明,比如我个人发布的库一般会有类似下面的说明:
资源占用:
累加器:AC0,AC1,(自动保存与恢复)
V 内存:连续 280 字节
生命存在的方式只有两种:腐烂或燃烧
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33276条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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