C语言 从UART读取数据时停止程序



我有这个简单的代码:

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数据。您实际上应该使用中断而不是轮询。让中断填充足够大的缓冲区,并在完成后设置标志条件。然后,让程序处理缓冲区。

干杯。

相关内容

  • 没有找到相关文章

最新更新