STL代码解读:加入队列(ATT)代码块

这个代码块是跟前期解读的FIFO块配合使用,当时看到那个代码块,只有出队列的功能,今天找到这入队列的代码块,解读一下。当年这个代码我是抄到本子上

这个代码块是跟前期解读的FIFO块配合使用,当时看到那个代码块,只有出队列的功能,今天找到这入队列的代码块,解读一下。当年这个代码我是抄到本子上,一行行在后面加注释的。

接口与源码

STL代码解读:加入队列(ATT)代码块

数据接口

STL代码解读:加入队列(ATT)代码块

STL源码

代码解读

1、L P##TABLE

2、LAR1

将指针的地址载入地址寄存器1,此时地址寄存器存储的是table的实参地址。

3、L W#16#0

4、L W [AR1,P#0.0]

5、==I

6、JZ IF01

判断指针第一个字是否为0(0则不是DB块,非零就是DB块编号),如果不是DB块则跳转到第9行标签处执行。

7、T #BLOCK_NO

8、OPN DB [#BLOCK_NO]

如果指针指向的是DB块,就打开DB块。

9、IF01: NOP 0

10、L D [AR1,P#2.0]

11、LAR1

将指针的后4个字节(就是1个跨区域的32位指针)载入累加器1,此时地址寄存器存储的是队列的存储空间。

12、L W [AR1,P#0.0] //队列的长度

13、L W [AR1,P#2.0] //当前队列存储的数量

14、>I

15、JCN FAIL

如果队列满了则跳转到29行位置,队列没满从16行继续执行。

16、L 1

17、+I

18、T W [AR1,P#2.0]

将当前队列的存储数量加1。

19、L 1

20、+I

21、SLD 4

存储数量加1左移4位,就是队列末尾位置跟队列开头位置的指针偏移。

22、TAR1

23、+D

24、LAR1

将地址寄存器1存储的指针位置定位到队列的末尾。

25、L #DATA

26、T W [AR1,P#0.0]

将INPUT接口区要加入队列的数值#DATA存入队列的末尾。

27、SET

28、JU SBR

29、FAIL: CLR

30、SBR: SAVE

27-30行处理程序块的ENO。

当队列满的时候从第29行执行,ENO位无输出。

当正常存入数值时,执行第27、28、30行,使能输出ENO。

总结:块需要在调用时应采用上升沿调用,将输入的值放到队列的最后位置,并将队列当前计数加1。队列的第一个位置(字)是队列的长度,第二个字是当前队列的长度,从第三个字开始存储数据。与这个指令配合使用的还有FIFO,LIFO指令。


如果大家有代码需要解读,欢迎私信给我,我是山东王建设,专注于西门子STL代码解读,期待您的收藏与关注。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/9908.html

(0)
上一篇 2023年 4月 22日 下午11:53
下一篇 2023年 4月 22日 下午11:53

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信