合信论坛

快捷导航
查看: 3059|回复: 1

中断程序里需谨慎使用主程序直接计算后寄存器的值

[复制链接]

17

主题

47

帖子

4万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
40663
发表于 2018-11-21 16:30:46 | 显示全部楼层 |阅读模式
本帖最后由 xudajun 于 2018-11-21 16:31 编辑

请先看如下程序。
主程序:
企业微信截图_15427882778471.png
中断OB2:
企业微信截图_15427883947512.png

如果VD100为98,VD104为11,正常情况我们肯定都会认为,VD112和VD116寄存器值都应该为109;
但实际情况却不是这样。
企业微信截图_1542788566499.png
VD116是98,为什么呢?而且不管是西X子还是合信的执行结果都是一样,大家可能都会很困惑。

其实我们把梯形图语言转换成STL语言,就可以发现这个玄机。
企业微信截图_15427887885680.png
计算指令在执行时,都是分成两句STL指令来执行的。
VD100加VD104,实际执行时是先将VD100赋值给VD108,然后VD104再与VD108相加。
中断可能发生在两句STL语句之间,所以VD108的值有可能等于VD100,而不是一定VD100和VD104的计算值。

所以根据以上的执行结果,在写中断程序时,如果要引用主程序计算之后的值,应该把计算之后的值MOV给另一个寄存器,然后在中断中调用MOV后的值。

4

主题

9

帖子

193

积分

版主

Rank: 7Rank: 7Rank: 7

积分
193
发表于 2018-12-5 16:46:06 | 显示全部楼层
学习了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

客服热线
400-700-4858 周一至周五:09:00 - 18:00
深圳市南山区打石一路深圳国际创新谷6栋A座9层

深圳市合信自动化技术有限公司(简称“合信技术”)成立于2003年,高新技术企业,专注于工业自动化产品的研发、生产、销售和技术服务,依靠高质量、高性能的自动化控制产品与方案为客户创造最大价值,立志于成为全球领先的工业自动化解决方案供应商。

Archiver|手机版|小黑屋|COTRUST Inc. ( 粤ICP备13051915号 )

GMT+8, 2022-5-24 20:30 , Processed in 0.075078 second(s), 23 queries .

快速回复 返回顶部 返回列表