搜索
bottom↓
回复: 69

坛里混了这么久,今天贡献一下串口接收环形队列

  [复制链接]

出0入0汤圆

发表于 2013-4-14 23:30:12 | 显示全部楼层 |阅读模式
坛里混了这么久,今天贡献一下参考IAR笔记的Alientek mini板串口接收环形队列程序,经过测试没有丢帧现象。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2013-4-14 23:34:32 | 显示全部楼层
大致看了一下,定长的,不定长通信情况下浪费空间和时间。

出0入0汤圆

 楼主| 发表于 2013-4-15 00:24:25 来自手机 | 显示全部楼层
channe 发表于 2013-4-14 23:34  大致看了一下,定长的,不定长通信情况下浪费空间和时间。

谢谢大虾指教!

出0入442汤圆

发表于 2013-4-15 01:51:22 | 显示全部楼层
表示很早就开始使用环形半满队列在FPGA中了。因为可以达到最高100%的速率和70%以上的资源利用率,最关键的是半满队列可以保证超写有效和不能超读。

出0入0汤圆

发表于 2013-4-15 04:01:14 来自手机 | 显示全部楼层
记号一下,占位

出0入0汤圆

发表于 2013-4-15 06:16:23 | 显示全部楼层
看标题进来的,学习一下

出0入0汤圆

发表于 2013-4-15 08:51:30 | 显示全部楼层
做个记号吧,方便以后查找

出0入0汤圆

发表于 2013-4-15 08:59:03 来自手机 | 显示全部楼层
Mark.....正在学习这个

出0入0汤圆

发表于 2013-4-15 09:05:50 | 显示全部楼层
用环形多年,处理串口通信的很好一种方式
楼主要能要写上使用心得那最好了。

出0入0汤圆

发表于 2013-4-15 09:45:45 | 显示全部楼层
wye11083 发表于 2013-4-15 01:51
表示很早就开始使用环形半满队列在FPGA中了。因为可以达到最高100%的速率和70%以上的资源利用率,最关键的 ...

什么叫半满队列?

出0入442汤圆

发表于 2013-4-15 09:55:08 | 显示全部楼层
aworker 发表于 2013-4-15 09:45
什么叫半满队列?

就是不把数据装满,还没满时就发满信号,这样就算发送模块在收到满信号时有几十个周期延时,也能保证数据准确存储。但是读时就是另一回事了,因为读时使用写指针作为终止,因此读是永远不会超读的。这就是个半满队列,目的是消除环形队列对写入信号的判满要求。

出0入0汤圆

发表于 2013-4-15 09:58:41 | 显示全部楼层
mark下环形队列

出0入0汤圆

 楼主| 发表于 2013-4-15 12:27:57 来自手机 | 显示全部楼层
Shaw.Embedi 发表于 2013-4-15 09:05  用环形多年,处理串口通信的很好一种方式  楼主要能要写上使用心得那最好了。 ...

我也刚开始用 谈不上啥心得 以前一直用中断 在中断里判断帧头 结果出现了丢帧现象 2400波特率能丢20%(也可能是程序有问题) 看到大家都在说环形队列 在坛里找了几种方案 做了实验 结果发现我我上传的这种结构简单便于移植 能够满足我简单的应用要求 所以就分享给大家 LS也有大侠指出了效率低等问题 在此向各位虚心学习了!

出0入0汤圆

发表于 2013-4-15 12:44:39 | 显示全部楼层
看一下,先谢谢了。

出0入0汤圆

发表于 2013-4-15 17:11:51 | 显示全部楼层
mark下。感谢分享

出0入0汤圆

发表于 2013-4-15 17:55:41 | 显示全部楼层
airwolf09921 发表于 2013-4-15 12:27
我也刚开始用 谈不上啥心得 以前一直用中断 在中断里判断帧头 结果出现了丢帧现象 2400波特率能丢20%(也 ...

在中断里可以搞帧头的啊,以前我就曾经在中断里判帧头,115200毫无压力,24小时挂机,从来不有出错过。应该是你的程序架构有问题。

出0入0汤圆

发表于 2013-4-17 17:22:03 | 显示全部楼层
不懂所以不评价,我是学习的。

出0入0汤圆

发表于 2013-4-23 14:33:03 | 显示全部楼层
学习一下,发现自己越来越菜了

出0入0汤圆

发表于 2013-4-23 15:50:18 | 显示全部楼层
MARK
标记学习

出0入0汤圆

发表于 2013-4-30 09:37:56 | 显示全部楼层
收下学习了!谢谢楼主

出0入0汤圆

发表于 2013-4-30 12:21:21 | 显示全部楼层
收下了,谢谢楼主

出0入0汤圆

发表于 2013-4-30 21:19:19 | 显示全部楼层
mark下环形队列

出0入0汤圆

发表于 2013-5-1 12:38:02 来自手机 | 显示全部楼层
支持一下

出0入4汤圆

发表于 2013-5-1 13:45:06 | 显示全部楼层
学习中······

出0入10汤圆

发表于 2013-10-31 14:25:51 | 显示全部楼层
mark下环形队列

出0入0汤圆

发表于 2013-10-31 23:07:29 | 显示全部楼层
环形队列在串口上非常实用的!

出0入0汤圆

发表于 2013-11-1 08:19:06 | 显示全部楼层
学习了,谢谢LZ的分享

出0入0汤圆

发表于 2013-11-2 14:03:09 | 显示全部楼层
谢谢分享~期待解释

出0入42汤圆

发表于 2013-11-2 14:08:25 | 显示全部楼层
多谢楼主,先收藏了哈

出0入0汤圆

发表于 2014-4-4 22:27:53 | 显示全部楼层
楼主有说明文档吗?

出0入0汤圆

发表于 2014-4-6 01:47:09 | 显示全部楼层
环形队列是什么呀?

出0入0汤圆

发表于 2014-4-6 06:57:32 | 显示全部楼层
学习一下,这种处理方式适用性会广泛一些,不会对程序框架以及通信实时性要求太高

出0入59汤圆

发表于 2014-4-6 07:22:17 | 显示全部楼层
串口环形队列,,标记一下

出0入0汤圆

发表于 2014-10-29 23:35:26 来自手机 | 显示全部楼层
不错,有空学习下

出0入0汤圆

发表于 2014-12-20 20:58:04 | 显示全部楼层
mark以后备用

出0入0汤圆

发表于 2014-12-21 22:17:38 | 显示全部楼层
环形队列?是FIFO队列么?
我发现在FreeRTOS下,直接使用队列接收数据就很方便啊,一旦超时就处理数据,这样处理不等长数据也很方便。

出0入0汤圆

发表于 2014-12-21 22:22:08 | 显示全部楼层
定长的,不定长通信情况下浪费空间和时间:这个也是没有吧发的事情,数据没有协议特征的

出0入0汤圆

发表于 2014-12-22 23:03:17 | 显示全部楼层
学习了环形队列

出0入0汤圆

发表于 2014-12-22 23:51:41 | 显示全部楼层
好东西,下载下来学习下

出0入0汤圆

发表于 2014-12-23 08:27:37 | 显示全部楼层
看看 暂时还没用到

出0入0汤圆

发表于 2014-12-23 09:23:50 | 显示全部楼层
队列是处理串口丢帧的好方法呀,最近在啃代码,也发现串口里面就用到了。

出0入0汤圆

发表于 2014-12-23 09:58:09 | 显示全部楼层
用了好久,还是下了看看

出0入0汤圆

发表于 2014-12-23 13:22:08 | 显示全部楼层
谢谢楼主分享!

出0入17汤圆

发表于 2014-12-23 13:32:55 | 显示全部楼层
看看下载先

出0入0汤圆

发表于 2014-12-24 08:43:41 | 显示全部楼层
下过必顶,不顶对不住为人

出0入0汤圆

发表于 2015-3-13 23:11:40 | 显示全部楼层
支持楼主,现在遇到了问题,正在学习。可能还会麻烦到楼主的。

出0入0汤圆

发表于 2015-3-16 12:53:41 | 显示全部楼层
顶一下.

出0入0汤圆

发表于 2015-3-20 13:45:39 | 显示全部楼层
顶一下楼主

出0入0汤圆

发表于 2015-3-20 14:02:31 来自手机 | 显示全部楼层
mark                  

出0入0汤圆

发表于 2015-3-20 14:29:15 | 显示全部楼层
一直在中断中直接来接受数据,接受使用完清空,或者直接从头覆盖

出0入0汤圆

发表于 2015-3-29 10:10:56 | 显示全部楼层
开始利用队列重写串口通信,感受感受这种数据结构的魅力。

出0入0汤圆

发表于 2015-5-17 08:58:54 | 显示全部楼层
好东西,谢谢分享

出0入0汤圆

发表于 2015-5-17 09:17:00 | 显示全部楼层
mark一下,环形半满队列。

出0入0汤圆

发表于 2015-5-17 10:05:05 | 显示全部楼层
在中断里采用状态机的思路接收定长数据包,运行状况良好。

出0入0汤圆

发表于 2015-5-18 15:18:21 | 显示全部楼层
学习一下!

出4375入62汤圆

发表于 2015-5-18 15:27:43 | 显示全部楼层
njchenmin 发表于 2013-4-15 06:16
看标题进来的,学习一下

头像这么好玩

出0入0汤圆

发表于 2015-11-1 04:06:22 | 显示全部楼层
ucTXWriteIndex &= TXBUFSIZE-1;        // adjust index to borders of buffer

这个指针算法好,比%高效太多了,队列长度定义成2^N

出0入0汤圆

发表于 2015-11-2 09:43:18 | 显示全部楼层

学习了,谢谢LZ的分享

出0入0汤圆

发表于 2015-11-2 10:25:22 | 显示全部楼层
顶一下楼主!

出0入0汤圆

发表于 2016-8-16 11:38:45 | 显示全部楼层
多谢分享。。

出0入0汤圆

发表于 2016-9-28 05:57:23 | 显示全部楼层
环形队列中 如果出现两个桢头  数据会出现错识。有弊端好象

出0入0汤圆

发表于 2016-9-28 07:24:53 | 显示全部楼层
不错 很好 正好需要

出0入0汤圆

发表于 2016-9-28 08:42:33 | 显示全部楼层
记号一下,占位

出190入0汤圆

发表于 2016-9-28 10:05:53 | 显示全部楼层
推荐学习linux kernel里的kfifo.c,以后FIFO就随便你咋玩了

出0入0汤圆

发表于 2016-9-28 10:22:40 | 显示全部楼层
表示这么多年来一直在用啊!!!

出0入0汤圆

发表于 2016-9-28 14:34:02 | 显示全部楼层
MARK。   谢谢分享

出0入0汤圆

发表于 2016-9-28 15:54:28 | 显示全部楼层
谢谢楼主分享,正好用得上

出0入0汤圆

发表于 2016-10-5 11:57:01 | 显示全部楼层
本帖最后由 circle_head 于 2016-10-5 21:54 编辑

最近真好想要学这个呢,看了下程序,在这里总结一下自己对环形队列的理解。

1  楼主的环形队列中规定了一个数据长度,相当于开辟了一个缓存区,也就是定义了一个长度为16的数组

2 当第一次有串口数据到来的时候,接收的数据首先存储在数组的第一位,再来的数据依次往后存储,程序中也会记录下接收数据的个数 ucRXCharCount 也会记录下缓存数组中最后接收数据的位置ucRXWriteIndex(无论如何 一次性 接收的数据不能大于数组的长度,否则最先接收的数据会被覆盖),一次性收的数据要小于等于16(如果想要多的可以增长数组)。

3 缓存数据的使用:  首先 主函数中会将缓存中的数据依次读出,读出了n位数就用ucRXCharCount减去n ,并且也会记录下从缓存中读到了第几位ucRXReadIndex 。在读出数据并使用的过程中若有新的串口数据过来。 缓存会在原来接收数据的位置ucRXWriteIndex的

基础上依次增加,超过数组长度时就从数组的首地址开始增加,接收的个数也要增加。

我的理解基本就是这样的,,,,,


补充一点nos002的解释  
ucTXWriteIndex &= TXBUFSIZE-1;        // adjust index to borders of buffer

这个指针算法好,比%高效太多了,队列长度定义成2^N

出0入0汤圆

发表于 2016-10-5 21:52:22 | 显示全部楼层
nos002 发表于 2015-11-1 04:06
ucTXWriteIndex &= TXBUFSIZE-1;        // adjust index to borders of buffer

这个指针算法好,比%高效 ...

这个解释的也很好,赞

出0入0汤圆

发表于 2019-6-27 20:41:49 | 显示全部楼层
不错,学习了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 00:46

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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