c - 分段违规接线
问题描述
我对以下代码有疑问。我认为这是一个指针问题,但我不知道如何解决它。
我想从 main 调用 SIM7070_Start 函数。该函数调用SIM7070_SendCommand,然后出现错误。它与 WiringPi 的“串行”变量有关吗?
请帮忙
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <wiringPi.h>
#include <wiringSerial.h>
const int pwr = 4;
const int dtr = 25;
int SIM7070_PowerOn()
{
printf("SIM7070_PowerOn\n");
pinMode(pwr, OUTPUT);
digitalWrite(pwr, HIGH);
delay(2000);
digitalWrite(pwr, LOW);
delay(2000);
pinMode(dtr, OUTPUT);
digitalWrite(dtr, LOW);
delay(1000);
}
int SIM7070_powerDown(void)
{
printf("SIM7070_PowerDown\n");
digitalWrite(pwr, HIGH);
delay(1000);
digitalWrite(pwr, LOW);
delay(2000);
}
int SIM7070_SendCommand(int serial, char * command, char * expectedResponse)
{
char data;
data = (char *) malloc(sizeof(char));
printf("\nSEND COMMAND IS: %s\n", command);
serialPrintf(serial, command);
delay(200);
while (serialDataAvail(serial)) {
data = serialGetchar(serial);
printf("%s", data);
}
if (strlen(expectedResponse) != 0) {
if (strcmp(data, expectedResponse) <= 0) {
printf("\nSIM7070_SendCommand - The expected response has been found\n");
return 1;
} else {
printf("\nSIM7070_SendCommand - The expected response hasn't been found\n");
return 0;
}
}
}
void SIM7070_Start(int serial)
{
SIM7070_SendCommand(serial, "AT\r\n", "OK");
}
int main()
{
int serial;
char data;
if (wiringPiSetup() < 0)
return 1;
if ((serial = serialOpen("/dev/ttyS0", 57600)) < 0)
return 1;
printf("Serial start ...\n");
SIM7070_PowerOn();
delay(2000);
SIM7070_Start(serial);
delay(5000);
serialClose(serial);
SIM7070_powerDown();
return 0;
}
如果主要是:
int main()
{
int serial;
char data;
if (wiringPiSetup() < 0)
return 1;
if ((serial = serialOpen("/dev/ttyS0", 57600)) < 0)
return 1;
printf("Serial start ...\n");
SIM7070_PowerOn();
delay(2000);
SIM7070_SendCommand(serial, "AT\r\n", "OK");
delay(5000);
serialClose(serial);
SIM7070_powerDown();
return 0;
}
有用。
解决方案
另见我的评论。你可能想要一个像这样的循环:
char data[256], *pData= data;
while(serialDataAvail(serial)){
*pData++ = serialGetchar(serial);
}
*pData= '\0';
printf ("%s", data);
这使用一个字符数组来放置接收到的数据。然后指针变量pData
指向这个缓冲区并随着接收到的每个字符而递增。最后,它以终止空字符终止(字符串)缓冲区。
推荐阅读
- laravel - hasOne() 带有 select 和 where 条件
- php - PHP:如何修改工作电子邮件脚本以在自己的服务器上运行(LAMP 服务器上的 PHP 邮件服务器设置)
- c - 如何找到 uint_fast32_t 的宽度
- javascript - 如何删除firestore集合数据库中的所有文档
- postgresql - 为什么来自 Postgis 的 ST_Intersection 返回多线串以用于自相交线串?
- c - C中的全局变量丢失数据?
- git - 在推送修改后,我有两个看起来相同的 git 提交
- javascript - 如何一个接一个地调用一个异步函数?
- sparql - SPARQL 查询:如何获取特定 Wikidata ID 的外部标识符链接(url)?
- javascript - 当有两个函数之间带有“箭头函数指示器”时,这意味着什么?