打印
[Atmel]

编程遇到问题,求大神帮忙

[复制链接]
968|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
15369902446|  楼主 | 2016-7-5 16:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
新手,有一个程序不理解
typedef struct _QUEUE_USART1_HMI
{
    qsize _head;
    qsize _tail;
    qdata _data[QUEUE_MAX_SIZE_USART1_HMI];
} QUEUE_USART1_HMI;//串口数据接收队列结构体
// 存入一个数据到串口接收队列(FIFO)中
void queue_push_USART1_HMI(qdata _data)
{
    qsize pos = (que_USART1._head+1)%QUEUE_MAX_SIZE_USART1_HMI;
    if(pos!=que_USART1._tail)//非满状态
    {
        que_USART1._data[que_USART1._head] = _data;
        que_USART1._head = pos;
    }
}
不明白que_USART1._head+1)%QUEUE_MAX_SIZE_USART1_HMI是什么意思?求大神指点

相关帖子

沙发
liang7143| | 2016-7-5 17:08 | 只看该作者
典型的循环队列
缓冲区接收一个数据,队尾加1

使用特权

评论回复
板凳
15369902446|  楼主 | 2016-7-5 17:14 | 只看该作者
liang7143 发表于 2016-7-5 17:08
典型的循环队列
缓冲区接收一个数据,队尾加1

不太明白,大神可否说详细一点,谢谢!

使用特权

评论回复
地板
liang7143| | 2016-7-5 17:20 | 只看该作者
本帖最后由 liang7143 于 2016-7-5 17:22 编辑

循环队列,就是说接收数据到缓冲区末尾的时候,重新从缓冲区开头接收,依次循环。
(que_USART1._head+1)%QUEUE_MAX_SIZE_USART1_HMI化解为
que_USART1._head++;//尾部加1
if(que_USART1._head >= QUEUE_MAX_SIZE_USART1_HMI)//到达尾部,从头开始
que_USART1._head = 0;

使用特权

评论回复
5
15369902446|  楼主 | 2016-7-16 10:04 | 只看该作者
liang7143 发表于 2016-7-5 17:20
循环队列,就是说接收数据到缓冲区末尾的时候,重新从缓冲区开头接收,依次循环。
(que_USART1._head+1)%Q ...

谢谢,已经明白!!

使用特权

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

本版积分规则

5

主题

13

帖子

2

粉丝