[STM32F1] 如何区别应用

[复制链接]
1248|37
 楼主| chenho 发表于 2021-4-1 21:20 | 显示全部楼层 |阅读模式
串口里,有队列和只有缓冲区的程序区别在哪,如何区别应用?
 楼主| chenho 发表于 2021-4-1 21:22 | 显示全部楼层
看到有的串口程序。设置了队列。还有头尾指针,数据计数。而有的只设置了缓冲区。请问,什么时候用哪种方式呢?
pengf 发表于 2021-4-1 21:24 | 显示全部楼层
什么意思?不是很明白你说的什么,能再解释一下这个现象吗
 楼主| chenho 发表于 2021-4-1 21:28 | 显示全部楼层

都是用队列,
有的用的蛮细:出队列,入队列。头指针&尾指针的比较,从而判断队列 空&满。弄的好细微。比如周立功的。
而有的呢,感觉用的蛮简单。  请问:同是队列,差别咋这么大咧?
    以下是简单的:
    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 发表于 2021-4-1 21:29 | 显示全部楼层
用缓冲主要是为了防止上层对串口接收到的数据来不及处理而丢失。
xxrs 发表于 2021-4-1 21:33 | 显示全部楼层
如果上层响应够快,就可以不用。否则就要采用。
houcs 发表于 2021-4-1 21:36 | 显示全部楼层
这个主要看单片机的繁忙层度,
liuzaiy 发表于 2021-4-1 21:38 | 显示全部楼层
如果建立了队列,那么程序主要工作是检查队列,具体收发就由中断处理,
yinxiangh 发表于 2021-4-1 21:41 | 显示全部楼层
如果单片机本身没什么事情,直接去接收也是可以的.
pangb 发表于 2021-4-1 21:44 | 显示全部楼层
为什么有的队列程序描述的特别复杂,有的又特别简单。。 文中贴出来的程序有while死循环等待,而且头尾指针判断特别简单。 而有的程序,写的很繁琐
jlyuan 发表于 2021-4-1 21:47 | 显示全部楼层
FIFO吗?
zhanghqi 发表于 2021-4-1 21:49 | 显示全部楼层
FIFO就是数据缓冲。
zyf部长 发表于 2021-4-1 21:53 | 显示全部楼层
这个不是硬件自身的fifo吗
kangzj 发表于 2021-4-1 21:55 | 显示全部楼层
复杂一些的肯定是考虑到各种情况,在牺牲一定性能的情况下,能够对数据做更多的保护,更多的稳定性
gongche 发表于 2021-4-1 21:57 | 显示全部楼层
串口接收一般还是建议用缓冲,可以设置中断接收,而处理还是可以采用循环查询是方法,分别快捷,相对独立。
jlyuan 发表于 2021-4-1 21:58 | 显示全部楼层
队列是自己设置的啊
juventus9554 发表于 2021-4-1 22:02 | 显示全部楼层
缓存我就没管过
pengf 发表于 2021-4-1 22:04 | 显示全部楼层
这个 一句两句说不清啊
huangchui 发表于 2021-4-1 22:07 | 显示全部楼层
没有啥特别的啊
jlyuan 发表于 2021-4-1 22:10 | 显示全部楼层
地板说的很好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

748

主题

9853

帖子

5

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