打印
[STM32F1]

如何区别应用

[复制链接]
846|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];
}

使用特权

评论回复
5
renyaq| | 2021-4-1 21:29 | 只看该作者
用缓冲主要是为了防止上层对串口接收到的数据来不及处理而丢失。

使用特权

评论回复
6
xxrs| | 2021-4-1 21:33 | 只看该作者
如果上层响应够快,就可以不用。否则就要采用。

使用特权

评论回复
7
houcs| | 2021-4-1 21:36 | 只看该作者
这个主要看单片机的繁忙层度,

使用特权

评论回复
8
liuzaiy| | 2021-4-1 21:38 | 只看该作者
如果建立了队列,那么程序主要工作是检查队列,具体收发就由中断处理,

使用特权

评论回复
9
yinxiangh| | 2021-4-1 21:41 | 只看该作者
如果单片机本身没什么事情,直接去接收也是可以的.

使用特权

评论回复
10
pangb| | 2021-4-1 21:44 | 只看该作者
为什么有的队列程序描述的特别复杂,有的又特别简单。。 文中贴出来的程序有while死循环等待,而且头尾指针判断特别简单。 而有的程序,写的很繁琐

使用特权

评论回复
11
jlyuan| | 2021-4-1 21:47 | 只看该作者
FIFO吗?

使用特权

评论回复
12
zhanghqi| | 2021-4-1 21:49 | 只看该作者
FIFO就是数据缓冲。

使用特权

评论回复
13
zyf部长| | 2021-4-1 21:53 | 只看该作者
这个不是硬件自身的fifo吗

使用特权

评论回复
14
kangzj| | 2021-4-1 21:55 | 只看该作者
复杂一些的肯定是考虑到各种情况,在牺牲一定性能的情况下,能够对数据做更多的保护,更多的稳定性

使用特权

评论回复
15
gongche| | 2021-4-1 21:57 | 只看该作者
串口接收一般还是建议用缓冲,可以设置中断接收,而处理还是可以采用循环查询是方法,分别快捷,相对独立。

使用特权

评论回复
16
jlyuan| | 2021-4-1 21:58 | 只看该作者
队列是自己设置的啊

使用特权

评论回复
17
juventus9554| | 2021-4-1 22:02 | 只看该作者
缓存我就没管过

使用特权

评论回复
18
pengf| | 2021-4-1 22:04 | 只看该作者
这个 一句两句说不清啊

使用特权

评论回复
19
huangchui| | 2021-4-1 22:07 | 只看该作者
没有啥特别的啊

使用特权

评论回复
20
jlyuan| | 2021-4-1 22:10 | 只看该作者
地板说的很好

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

748

主题

9853

帖子

5

粉丝