带有 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;
}
我需要用串行 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;
}