带有 char* 变量的 serialPutchar

serialPutchar with char* variable

我需要用串行 WiringPi 发送 char*(命令)。如果 serialPutchar (int fd, unsigned char c) 需要一个 unsigned char 怎么办?

int SendCommand(int serial, char *command, char *expectedResponse, char response []) {
   serialFlush(serial);
   serialPutchar(serial, command);
   return 1;
}

我的代码仍然有问题,我不知道它是什么。

我使用 SendCommand 函数向服务器发送数据。但是,当我尝试发送 'a'.

时,我发送了一个空的 NULL 数据包

我不明白:(

int SendCommand(int serial, char *command,  char *expectedResponse, char response []) {
   int max_Retries = 0;
   int i;
   char data[256], *pData = data;

   serialFlush(serial);

   for(i = 0; i <= strlen(command); i++) {
       serialPutchar(serial, command[i]);
   }
   delay(100);

   while(serialDataAvail(serial)){ 
      *pData++ = serialGetchar(serial);
   }        

      while(strstr(data, expectedResponse) == (const char*) NULL){ 
         if(max_Retries >= 150) {          
            printf("\nSIM7070_SendCommand - The expected response hasn't been found\n");
            return 0;
         }
                 
        else{
           *pData++ = serialGetchar(serial);
            max_Retries++;
            delay(100);
        }

      }            
      if(strstr(data, expectedResponse) != (const char*) NULL){  
         *pData= '[=11=]';
         printf ("%s", data);                  
         printf("\nSIM7070_SendCommand - The expected response has been found\n");
         
         if(response != NULL){
            strcpy(response, data);
         }   
         return 1;                   
               
      }
      return 0; 
}
   SendCommand(serial, "AT+CASEND=1,1\r\n", ">", NULL);
   serialFlush(serial);
   serialPutchar(serial,'a');
   serialFlush(serial);

A char* 是指向 char 类型的指针。它可能既是 char 的数组,也可能是单个 char。您的 command 可能是一个数组,因此您需要遍历它或使用接受字符串而不是单个字符的更好的串行发送器。

循环字符串

有几种循环 C 字符串的方法。这个使用 i 变量,它从 0 增加到字符串长度(使用 strlen(command)):

int SendCommand(int serial, char *command, char *expectedResponse, char response []) {
   int i;
   serialFlush(serial);
   // Use <= to send also the `0` string terminating char
   for(i = 0; i <= strlen(command); i++) {
       serialPutchar(serial, command[i]);
   }
   return 1;
}

您还可以:

  • 使用最初指向 command 的指针并递增它直到找到 0 字符(行尾)。
  • 使用递减变量(从command的长度开始计算到0),所以你只得到一次长度(优化)。

使用更好的串行发送器

在这里,我使用serialPuts一次发送完整的字符串:

int SendCommand(int serial, char *command, char *expectedResponse, char response []) {
   serialFlush(serial);
   serialPuts(serial, command);
   return 1;
}