我目前正在使用 C 语言对 TI MSP430 进行编程...我在调试器中遇到了一个奇怪的问题,它显示 if 语句满足前进的条件,但在运行时却没有这样做。有任何想法吗?函数中未计算的 if 语句位于星号之间。
void gps_parse(void){
gps_write();
lcd_out(" ", LCD_LINE_1);
lcd_out(" ", LCD_LINE_2);
lcd_out(GPSlat, LCD_LINE_1);
lcd_out(GPSlong, LCD_LINE_2);
SW2Press = NOT_PRESSED;
while(!SW2Press){
if (GPS_rx_ring_rd != GPS_rx_ring_wr) {
**if (GPS_Char_Rx[GPS_rx_ring_rd] == '$')**{
if (++GPS_rx_ring_rd >= (64)) {
GPS_rx_ring_rd = BEGINNING;
}
char GPS_data[64];
for (int i = 0; i < 64; i++) {
while(GPS_rx_ring_rd == GPS_rx_ring_wr);
GPS_data[i] = GPS_Char_Rx[GPS_rx_ring_rd];
if (++GPS_rx_ring_rd >= (64)) {
GPS_rx_ring_rd = 0; // Circular buffer back to beginning
}
}
if(GPS_data[0] == 'G' && GPS_data[1] == 'P' && GPS_data[2] == 'R' && GPS_data[3] == 'M' && GPS_data[4] == 'C'){
if(GPS_data[17] == 'A'){
//Fill in lats
GPSlat[4] = GPS_data[19];
GPSlat[5] = GPS_data[20];
GPSlat[6] = GPS_data[21];
GPSlat[7] = GPS_data[22];
GPSlat[8] = GPS_data[23];
GPSlat[9] = GPS_data[24];
GPSlat[10] = GPS_data[25];
GPSlat[11] = GPS_data[26];
GPSlat[12] = GPS_data[27];
GPSlat[15] = GPS_data[29];
//Fill in longs
GPSlong[4] = GPS_data[31];
GPSlong[5] = GPS_data[32];
GPSlong[6] = GPS_data[33];
GPSlong[7] = GPS_data[34];
GPSlong[8] = GPS_data[35];
GPSlong[9] = GPS_data[36];
GPSlong[10] = GPS_data[37];
GPSlong[11] = GPS_data[38];
GPSlong[12] = GPS_data[39];
GPSlong[13] = GPS_data[40];
GPSlong[15] = GPS_data[42];
} else{
GPSlat[15] = '?';
GPSlong[15] = '?';
}
lcd_out(GPSlat, LCD_LINE_1);
lcd_out(GPSlong, LCD_LINE_2);
}
else {
if (++GPS_rx_ring_rd >= (64)) {
GPS_rx_ring_rd = 0;
}
}
}
}
}
}
最佳答案
尝试禁用编译器优化。有时,由于优化代码,代码路径在调试器中看起来很奇怪。
关于c - 如果 C 中的语句没有正确评估?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27034907/