複数の関数 (それぞれがメッセージの一部を抽出する) を使用して char* を解析しようとしていますが、関数間でポインターを渡すのに問題があります。私が問題を抱えているメッセージの部分には、整数の後にスペース文字が続き、その後に double が続きます。
これはすべて STM32F4 で実行されています。
主な機能:
char* myMsg = NULL;
char* nLink = NULL;
SerialQueue_pop(&myMsg, &tablet_queue); //Extract a char* from a buffer
uint8_t id = extract_gset_id(myMsg, (char*)&nLink); //Extract the integer from the char*
real value = extract_gset_value((char*)&nLink); //Extract the real (float) from the char*
機能:
int8_t extract_gset_id(char* message, char* pEnd)
{
char** ptr;
if ((strlen(message)-13)>0){
int8_t val = (int8_t)( 0xFF & strtol(message+13, &ptr,10));
*pEnd = ptr;
return val;
}
return -1;
}
real extract_gset_value(char* message)
{
if ((strlen(message))>0){
char arr[8];
real val = strtod(message, NULL);
snprintf(arr, 8, "%2.4f", val);
return val;
}
return -1;
}
最初の関数呼び出しは、文字列の 13 文字目から始まる整数を抽出する必要があります。これは正常に動作し、strtol 呼び出しの後にリターン ポインター (nLink) を読み取ると、正しい場所 (整数の直後のスペース) を指しています。ただし、メイン関数または 2 番目の関数でポインターから文字列を読み取ると、正しい場所を指していません。
私がやろうとしているのは、メイン関数が最初の関数によって更新される配列へのポインターを渡してから、2 番目の関数がそのポインターを取得して使用することです。
どんな助けでも大歓迎です。