有关马潮老师的书中典型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.为什么要用队列?是因为它的先进先出吗?为什么不直接用简单的循环来接受?
看了一天了,还是没看明白,还没学过数据结构,哪位莫友指点指点啊。 1.data是这个中断函数的局部变量,这里用于保存UDR寄存器的值
2.这个指针应该理解为索引吧rx_buffer这个是一个数组而rx_wr_index用于表示数组的某一元素这个和指针变量应该指的不是一个东西
3 4你看明白全部程序就明白了
我也是新手 有些东西说的不一定对 仅供参考
页:
[1]