技术论坛

 分享西门子堆栈的问题

返回主题列表
作者 主题
手机用户20190429403175
游民

经验值: 63
发帖数: 3
精华帖: 0
楼主    2021-02-21 14:55:34
主题:分享西门子堆栈的问题

想实现西门子的堆栈功能,即收到某一位信号上升沿时,将某一具体值放入堆栈中,同时将堆栈中最顶层的数据拿出来存入另一个存储器,实现先进后出的循环排队输出功能,求各位大神帮忙!!


最佳答案

这个用SCL语言实现起来比较简单。主要是把思路理清楚。
题目要求是有请求时,存一个取一个。
思路:
根据当前队列缓存区元素数目,将具体指放入队列尾部,当前数目加1,然后将头部元素取出,剩余元素依次向前移动一个,当前数目减1,完成操作。具体可见附图

在论坛上看见有人提问,有个大神这样回答他的提问,但是我看了一下,我不能理解,看不明白,scl语言我是看的懂得,但是这个我看不懂别人这样写的意图,求大神一起交流和分享下

   

yming
至圣

经验值: 126308
发帖数: 21931
精华帖: 822
1楼    2021-02-21 16:05:07
主题:回复:分享西门子堆栈的问题

这是自己写的先进先出FiFo(不是堆栈后进先出哦)。很直观的呀。

TOP是被“顶出”的,数组元素 0的数据。

如果是8个数据,按序数据是放在元素 0-7中的。

不这么写,还能怎么写?

实际上,堆栈不用这么写的。

堆栈直接用指针,放入指针+1,取出指针-1,直到取光 指针=0;

学而时习之,不亦说乎?温故而知新,不亦乐乎?
yming
至圣

经验值: 126308
发帖数: 21931
精华帖: 822
3楼    2021-02-21 20:25:27
主题:回复:分享西门子堆栈的问题

堆栈也好,FIFO也好,实际上是不要用楼主图片那种写法的!

那种写法是直观性的、给初学者作表述用的。

真实,高效的写法只是操作指针(Index),没有移动数据一说,也没有清除旧数据一说。

自己写一个吧。

写一个FB,既可以用于先进先出,也可以用于后进先出。同时,还有指针指向数据中的MAX,MIN。全部用指针操作。

练练手!


学而时习之,不亦说乎?温故而知新,不亦乐乎?
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。