mctrix 发表于 2015-1-8 10:35:19

大家看下如何实现缓存功能

问题描述:                   单个功能:上位机发出一个信号,然后单片机接收到这个信号开始,先延时x毫秒,再置位某个IO y毫秒,最后复位IO;         缓存功能:如果上位机每隔z毫秒(z>y)触发次该信号,如何让“单个功能”之间没有影响干扰的执行呢?
实用性:
          此功能在实际应用中作用比较大。比如在视觉检测中往往产品检测位置(相机位)与产品判断执行(吹离等)位置有一定的
         距离,而在两者距离之间会有多个已经有判断结果的产品,需要到达指定位置才执行y。此时就需要这种缓存功能。
问题扩展:
         有其他实现的方式、思路吗?如硬件选择?

请大家赐教!谢谢。





电子Inc 发表于 2015-1-8 16:08:07

你说的太复杂了,如果你但是一个usart的数据接收,那么,简单的你可以这样;int UART_RX_BUF【 UART_MAX_SIZE 】 = {0};
每次接收一个数据, 就往UART_RX_BUF【i】里面保存,到底了,就会0,
拓展,环形FIFO缓冲区。

jianhong_wu 发表于 2015-1-8 18:28:07

我连续读了五遍,还是没有读懂楼主想表达的意思,我还是选择旁观吧。

mctrix 发表于 2015-1-9 09:35:05

jianhong_wu 发表于 2015-1-8 18:28
我连续读了五遍,还是没有读懂楼主想表达的意思,我还是选择旁观吧。

C:\Users\lenovo\Desktop\新建文件夹\IMG_20150109_090706.jpge抱歉,表达能力有限。其实是看到有人做到的,感兴趣如何实现。请看下面的图片:
                      下图为设备整体图片

         下图为我要表达的问题位置图片


上图:上位机在视觉检测判断位置会立即给出产品判断结果,但单片机只会在产品到达执行机构位置时才驱动同一IO
就像上图中间很多小的产品,其实结果已经在单片机内部,并行执行。

现在我表达清楚了吗?


mctrix 发表于 2015-1-9 09:48:46

电子Inc 发表于 2015-1-8 16:08
你说的太复杂了,如果你但是一个usart的数据接收,那么,简单的你可以这样;int UART_RX_BUF【 UART_MAX_SI ...

我表达不好。
换个说法是,我按个按键,过3秒钟,LED亮0.5秒;

如过我连续按这个按键(时间间隔大于0.5秒),每次按这个按键后都会在3秒后,LED亮0.5秒。

应该就是缓存功能吧(如LabVIEW中使用队列的生存者消费者模型)。

电子Inc 发表于 2015-1-9 18:24:39

mctrix 发表于 2015-1-9 09:48
我表达不好。
换个说法是,我按个按键,过3秒钟,LED亮0.5秒;



如果照你这么说,并不是什么缓存功能,所以你不要误会,你这只是时间触发而已,一个定时器,完成你现在所说的功能了

jianhong_wu 发表于 2015-1-9 22:14:13

mctrix 发表于 2015-1-9 09:48
我表达不好。
换个说法是,我按个按键,过3秒钟,LED亮0.5秒;



你说的这些都是很简单的功能。是你把它想复杂了。你要是仔细研究一下我的连载技术贴《从业将近十年!手把手教你单片机程序框架》后,有点基础的框架思路,这些功能都很简单实验的。如果没有一点基础,单靠别人讲也很难描述清楚。

mctrix 发表于 2015-1-10 19:39:50

jianhong_wu 发表于 2015-1-9 22:14
你说的这些都是很简单的功能。是你把它想复杂了。你要是仔细研究一下我的连载技术贴《从业将近十年!手把 ...

谢谢建议,见笑了。我认真看下你的帖子再说。

mctrix 发表于 2015-1-10 19:48:31

电子Inc 发表于 2015-1-9 18:24
如果照你这么说,并不是什么缓存功能,所以你不要误会,你这只是时间触发而已,一个定时器,完成你现在所 ...

谢谢回复。:)
页: [1]
查看完整版本: 大家看下如何实现缓存功能