我正在使用 SCPI 命令库,即 SCPI_ParamString。我试图实现的函数接受 2 个字符串和一个整数作为输入。为了验证我的代码是否正确读取输入,我只需将输入打印回给我(一旦我确信我使用了正确的字符串,我会将这些传递给函数)。
我发现我的代码没有将逗号识别为两个输入之间的分隔符。它将所有 3 个输入打印为第一个字符串。有趣的是,当我要求它打印第二个输入时 - 它识别出逗号在第一个和第二个输入之间划定。所以它只打印第二个和第三个输入(不将第二个和第三个之间的逗号识别为分隔输入。
我正在使用 MPLABX IDE v3.15 在 C 中的 PIC24 上进行编码。
下面是我的代码,后面是示例输出。
const char * longstr1;
const char * longstr2;
size_t ls1_len = 80;
size_t ls2_len = 80;
scpi_bool_t mandat = 1;
int32_t deltamin;
if (!SCPI_ParamString(context, &longstr1, &ls1_len, mandat) )
{
return SCPI_RES_ERR;
}
if (!SCPI_ParamString(context, &longstr2, &ls2_len, mandat) )
{
return SCPI_RES_ERR;
}
if (!SCPI_ParamInt(context, &deltamin, mandat))
{
return SCPI_RES_ERR;
}
sprintf(strTmp,"Inputs:" STR_CRLF);
uart1_puts(strTmp);
sprintf(strTmp,longstr1);
uart1_puts(strTmp);
sprintf(strTmp,STR_CRLF);
uart1_puts(strTmp);
sprintf(strTmp,longstr2 );
uart1_puts(strTmp);
和示例执行:
SCPI|0x51> GPS:PROP SGP4,1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753,2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.824191574136 67,360
SCPI|0x51> Inputs:
1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753,2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667,360
2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667,360
0)00:20:53:58.43 task_supmcu_scpi: Accepted "GPS:PROP SGP4,1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753,2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667,360" command.
请注意,当我打印第一个输入时,实际上打印了所有 3 个输入,而当我打印第二个输入时,实际打印了第二个和第三个输入。
我已经尝试了一些不同的方法来解决这个问题 - 没有一个奏效。