[应用相关] 如何区别应用

[复制链接]
1353|34
 楼主| chenho 发表于 2019-4-18 16:41 | 显示全部楼层 |阅读模式
串口里,有队列和只有缓冲区的程序区别在哪,如何区别应用?
 楼主| chenho 发表于 2019-4-18 16:49 | 显示全部楼层
看到有的串口程序。设置了队列。还有头尾指针,数据计数。而有的只设置了缓冲区。请问,什么时候用哪种方式呢?
pengf 发表于 2019-4-18 16:53 | 显示全部楼层

什么意思?不是很明白你说的什么,能再解释一下这个现象吗
 楼主| chenho 发表于 2019-4-18 16:57 | 显示全部楼层
都是用队列,
有的用的蛮细:出队列,入队列。头指针&尾指针的比较,从而判断队列 空&满。弄的好细微。比如周立功的。
而有的呢,感觉用的蛮简单。  请问:同是队列,差别咋这么大咧?
    以下是简单的:
    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];
}
renyaq 发表于 2019-4-18 17:00 | 显示全部楼层
用缓冲主要是为了防止上层对串口接收到的数据来不及处理而丢失。
supernan 发表于 2019-4-18 17:03 | 显示全部楼层
一般出和入是成对使用的。
xxrs 发表于 2019-4-18 17:07 | 显示全部楼层
如果上层响应够快,就可以不用。否则就要采用。
houcs 发表于 2019-4-18 17:12 | 显示全部楼层
这个主要看单片机的繁忙层度,
liuzaiy 发表于 2019-4-18 17:15 | 显示全部楼层
如果建立了队列,那么程序主要工作是检查队列,具体收发就由中断处理,
yinxiangh 发表于 2019-4-18 17:17 | 显示全部楼层
如果单片机本身没什么事情,直接去接收也是可以的.
pangb 发表于 2019-4-18 17:21 | 显示全部楼层
为什么有的队列程序描述的特别复杂,有的又特别简单。。 文中贴出来的程序有while死循环等待,而且头尾指针判断特别简单。 而有的程序,写的很繁琐
chenjunt 发表于 2019-4-18 17:25 | 显示全部楼层

FIFO吗?
zhanghqi 发表于 2019-4-18 17:29 | 显示全部楼层
FIFO就是数据缓冲。
zyf部长 发表于 2019-4-18 17:32 | 显示全部楼层
这个不是硬件自身的fifo吗
kangzj 发表于 2019-4-18 17:36 | 显示全部楼层
复杂一些的肯定是考虑到各种情况,在牺牲一定性能的情况下,能够对数据做更多的保护,更多的稳定性
gongche 发表于 2019-4-18 17:39 | 显示全部楼层
串口接收一般还是建议用缓冲,可以设置中断接收,而处理还是可以采用循环查询是方法,分别快捷,相对独立。
 楼主| chenho 发表于 2019-4-18 17:42 | 显示全部楼层

好的,我明天去单位试一下,多谢各位大侠了哈,结贴了先        
八层楼 发表于 2019-5-9 12:45 | 显示全部楼层
队列是自己设置的啊
观海 发表于 2019-5-9 12:55 | 显示全部楼层
缓存我就没管过
labasi 发表于 2019-5-9 13:29 | 显示全部楼层
这个 一句两句说不清啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

748

主题

9853

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部