I'm currently programming a TI MSP430 in C... I'm having a bizarre issue in the debugger that displays the if statement as satisfying the conditions to step forward but not doing so while running. Any ideas? The if statement not being evaluated in the function is between the asterisks.
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;
}
}
}
}
}
}
Try disabling compiler optimization. Sometimes, due to optimized code, code paths look bizarre in debugger.