📄 recv_uart.c
字号:
#define DLE '\xAA' /* data line escape */
#define STX '\xBB' /* start of text */
#define ETX '\xCC' /* end of text */
#define ACK '\xDD' /* positive acknowledge */
#define NAK '\xEE' /* negative acknowledge */
#define XON '\xC3' /* transmission ON */
#define XOFF '\xC1' /* transmission OFF */
#define XOK '\xC2' /* answer for XON */
if(uart_packet_end != 1){ /*未收到完整包*/
while(uart_recv_in_ptr != uart_recv_out_ptr){
*data_ptr = *uart_recv_out_ptr;
rec_cks ^= *uart_recv_out_ptr;
data_len ++;
if(++uart_recv_out_ptr >= &uart_recv_buff[XMIT_BUFF_SIZE])
uart_recv_out_ptr = &uart_recv_buff[0];
if(++data_ptr >= &data_buff[XMIT_BUFF_SIZE])
data_ptr = &data_buff[0];
if(endflag == 1){
endflag = 0;
data_ptr = &data_buff[0];
if(rec_cks == 0)
send_ack();
uart_packet_end = 1;
else
send_nak();
rec_cks = 0;
break;
}
switch ( *(data_ptr -1)) {
case (unsigned char)DLE : /* AA AA means char AA*/
if(data_ptr != &data_buff[1] && *(data_ptr-2) == (unsigned char)DLE)
data_ptr--;
break;
case (unsigned char)STX :
break;
case (unsigned char)ETX : /* end of frame received*/
if(*(data_ptr-2) == (unsigned char)DLE)
endflag = 1;
break;
default:
if(data_ptr == &data_buff[1]) {
data_ptr == &data_buff[0];
rec_cks = 0;
}
break;
}
} /* end of while*/
}
else (uart_packet_end == 1 )
{ /*收到一个完整包,处理包*/
uart_packet_end = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -