c - 如果 C 中的语句没有正确评估?

标签 c if-statement msp430 iar

我目前正在使用 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/

相关文章:

c++ - 字符串初始值设定项和只读部分

Bash 脚本 if 语句后跟多个 OR

java - 嵌套循环在 Mastermind 游戏中无法正常工作

embedded - 为什么上传的二进制文件大小比实际大小小得多?

c - 减法中 16 位 int 机器和 32 位 int 机器之间的不同结果

c - Linux 共享库 : replace symbol runtime

c - 每天在用户提供的时间在 linux 内核模块中调度任务

c - 需要帮助了解\n、\b 和\r 将如何呈现 printf 输出

python - 如果没有有效的选择,如何返回到第一个 if 语句

C - 按钮按下一次,注册两次 - MSP430