serialPutchar с переменной char*

Мне нужно отправить char* (команду) с серийным номером WiringPi. Как мне это сделать, если для serialPutchar (int fd, unsigned char c) нужен беззнаковый символ?

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

У меня все еще что-то не так с моим кодом, и я не знаю, что это такое.

Я использую функцию SendCommand для отправки данных на сервер. Однако я отправляю пустой пакет 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= '\0';
         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);

person Nuria    schedule 12.02.2021    source источник
comment
Ваша последовательная команда, вероятно, должна заканчиваться символом конца строки. Вот почему использовать serialPuts будет намного проще, чем serialPutchar.   -  person emi    schedule 12.02.2021


Ответы (1)


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;
}
person emi    schedule 12.02.2021