I need to extract eight values from a string I'm receiving from my serial port. I have the following code:
unsigned char xdata *p_ch; unsigned int xdata ch = 0; // Get command p_ch = strtok( com_buffer, "," ); // Get status while ( p_ch != NULL ) { // Get string p_ch = strtok( NULL, "," ); // Convert to float ad_value[ch] = atof( p_ch ); ch++; if ( ch > 8 ) break; } //__while ( p_ch != NULL )__
It works very intermittently. Can anyone suggest a better way to decode my serial string?
Thanks.
strtok() is a standard function. However, it is not a nice standard function probably the reason I did not recall it. I do not use "standard functions" a lot, they are bulky and slow because of their "universality".
Real code would detect failures
THAT can not be said often enough!!
Erik
You're right. There is no error handling what so ever. It's just some quick code I threw together as an example.
I know the data coming across because it's the only other data on the bus.
If it is just some code you "threw together", then you should wait until your code has some form of error handling before asking why it only works intermittently. The error handling will not only stop your code from processing bad data - it will also help you to find bugs in your code or incorrect assumptions about your data.