我有这个简单的代码:
while(1){
char dolar = gps_get_char();//read char from uart
if ((dolar == '$') || (receive_dolar == 1)){
receive_dolar = 1;
gps_get_nmea(nmea_in, sizeof(nmea_in));
rozloz_nmea();
receive_dolar = 0;
}
/*control running program*/
if (tl2 == 1){ //flag button from interrupt
LCD ^= (1 << LED_ON_OFF);
tl2 = 0;
}
}
但是当GPS关闭时,程序就在这里停止了:
char dolar = gps_get_char();//read char from uart
其中函数 gps_get_char();
char gps_get_char()
{
unsigned int in = 0;
do {
in = uart1_getc();
} while((in & UART_NO_DATA) || (in & UART_BUFFER_OVERFLOW));
return((char) in);
}
知道为什么程序停止了吗?
即使您当前的方法有效,您也很容易丢失UART数据。您实际上应该使用中断而不是轮询。让中断填充足够大的缓冲区,并在完成后设置标志条件。然后,让程序处理缓冲区。
干杯。