4554|4

64

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

串口里,有队列和只有缓冲区的程序区别在哪,如何区别应用? [复制链接]

如题,看到有的串口程序。设置了队列。还有头尾指针,数据计数。而有的只设置了缓冲区。请问,什么时候用哪种方式呢?
   另: 都是用队列,
有的用的蛮细:出队列,入队列。头指针&尾指针的比较,从而判断队列 空&满。弄的好细微。比如周立功的。
而有的呢,感觉用的蛮简单。  请问:同是队列,差别咋这么大咧?
    以下是简单的:
    void USART1PutDatatoBuf(u8 dat)
{
u32 tmphead;
tmphead = ( USART1_Rx_Head + 1 ) & USART1_RX_BUF_MARK;//队列头的最大值判断,到达最大,则变回0
USART1_Rx_Head = tmphead;  // 每收一次数据,队列头增加1
USART1_RX_Buf[tmphead] = dat;     
}


**功能:获知缓冲中是否有数据

u8 USART1IsDataInBuf( void )
{
return ( USART1_Rx_Head != USART1_Rx_Tail );
}


**功能:获取缓冲中有效数据的长度

u32 USART1GetBufLen(void)
{
//__disalbe_irq();
if(USART1_Rx_Head>=USART1_Rx_Tail)
{
  //__enable_irq();
  return(USART1_Rx_Head-USART1_Rx_Tail);
}
else
{
  //__enable_irq();
  return(USART1_RX_BUF_MAX+USART1_Rx_Head-USART1_Rx_Tail);
}



}

功能:从队列中获取数据

u8 USART1GetBufDat( void )
{
u32 tmptail;
while ( USART1_Rx_Head == USART1_Rx_Tail );//为防止数据混乱而弄上的硬等待
tmptail = ( USART1_Rx_Tail + 1 ) & USART1_RX_BUF_MARK;
USART1_Rx_Tail = tmptail;
return USART1_RX_Buf[tmptail];
}
此帖出自stm32/stm8论坛

最新回复

串口接收一般还是建议用缓冲,可以设置中断接收,而处理还是可以采用循环查询是方法,分别快捷,相对独立。  详情 回复 发表于 2013-6-21 07:05

点评

用缓冲主要是为了防止上层对串口接收到的数据来不及处理而丢失。 一般出和入是成对使用的。 如果上层响应够快,就可以不用。否则就要采用。  详情 回复 发表于 2013-6-19 11:23
点赞 关注
 

回复
举报

1803

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

回复 楼主 yanse51 的帖子

用缓冲主要是为了防止上层对串口接收到的数据来不及处理而丢失。
一般出和入是成对使用的。
如果上层响应够快,就可以不用。否则就要采用。
此帖出自stm32/stm8论坛

点评

您说的,我明白。俺想表述的是,为什么有的队列程序描述的特别复杂,有的又特别简单。。 文中贴出来的程序有while死循环等待,而且头尾指针判断特别简单。 而有的程序,写的很繁琐。搞不懂,为什么二者差别这么大?  详情 回复 发表于 2013-6-19 18:04
 
 

回复

64

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 Study_Stellaris 的帖子

您说的,我明白。俺想表述的是,为什么有的队列程序描述的特别复杂,有的又特别简单。。 文中贴出来的程序有while死循环等待,而且头尾指针判断特别简单。 而有的程序,写的很繁琐。搞不懂,为什么二者差别这么大?
此帖出自stm32/stm8论坛

点评

复杂一些的肯定是考虑到各种情况,在牺牲一定性能的情况下,能够对数据做更多的保护,更多的稳定性。具体程序具体分析吧。  详情 回复 发表于 2013-6-20 11:21
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

4
 

回复 板凳 yanse51 的帖子

复杂一些的肯定是考虑到各种情况,在牺牲一定性能的情况下,能够对数据做更多的保护,更多的稳定性。具体程序具体分析吧。
此帖出自stm32/stm8论坛
 
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

5
 
串口接收一般还是建议用缓冲,可以设置中断接收,而处理还是可以采用循环查询是方法,分别快捷,相对独立。
此帖出自stm32/stm8论坛
 
个人签名我的博客
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表