繁体   English   中英

从UART读取数据时停止程序

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

干杯。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM