小编jkb*_*983的帖子

位屏蔽缓冲区索引如何导致环绕

有人可以根据循环缓冲区索引解释位掩码是如何工作的。具体在以下代码中:

#define USART_RX_BUFFER_SIZE 128     /* 2,4,8,16,32,64,128 or 256 bytes */
#define USART_RX_BUFFER_MASK ( USART_RX_BUFFER_SIZE - 1 )


    ISR(USART_RX_vect)
    {
        unsigned char data;
        unsigned char tmphead;

        /* Read the received data */
        data = UDR0;
        /* Calculate buffer index */
        tmphead = ( USART_RxHead + 1 ) & USART_RX_BUFFER_MASK;
        USART_RxHead = tmphead;      /* Store new index */

        if ( tmphead == USART_RxTail )
        {
            /* ERROR! Receive buffer overflow */
        }

        USART_RxBuf[tmphead] = data; /* Store received data in buffer */ …
Run Code Online (Sandbox Code Playgroud)

embedded binary

1
推荐指数
1
解决办法
642
查看次数

标签 统计

binary ×1

embedded ×1