LAD 发表于 2013-8-8 16:36:37

有关马潮老师的书中典型USART接口程序的好几个疑惑

书中的USART接受中断服务函数如下:
interrupt void usart_rx_isr(void)
{
    unsigned char status ,data;
    status=UCSRA;
    data=UDR;         //读取USART寄存器的值
    if((status&(FRAMING_ERROR|PARITY_ERROR|DATA_OVERRUN))==0)
    {
         rx_buffer=data;
         if(++rx_wr_index==RX_BUFFER_SIZE)   
                  rx_wr_index=0;
         if(++rx_counter==RX_BUFFER_SIZE)
         {
                rx_counter=0;
                rx_buffer_overflow=1;
         }
    }
}
我想问的是:
1.data这个变量存放在哪里?跟缓冲区有什么联系吗?
2.在这段程序之前的定义(没打出来)中,老师在书中写道rx_wr_index为写指针,rx_rd_index为读指针,为什么定义指针的时候不用加*号?
3.假设第二点是对的,rx_wr_index是不是相当于循环队列中的尾指针?
4.为什么要用队列?是因为它的先进先出吗?为什么不直接用简单的循环来接受?
看了一天了,还是没看明白,还没学过数据结构,哪位莫友指点指点啊。

slayer_ni 发表于 2013-8-10 22:05:56

1.data是这个中断函数的局部变量,这里用于保存UDR寄存器的值
2.这个指针应该理解为索引吧rx_buffer这个是一个数组而rx_wr_index用于表示数组的某一元素这个和指针变量应该指的不是一个东西
3 4你看明白全部程序就明白了
我也是新手 有些东西说的不一定对 仅供参考
页: [1]
查看完整版本: 有关马潮老师的书中典型USART接口程序的好几个疑惑