Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过串行连接C和x2B发送结构+; 我在C++中,在我的Linux机器(X64)和一个微控制器(ARDUINO UNO)之间,通过串行连接交换结构。目前结构基本上如下所示 struct __attribute__ ((packed)) packet { uint8_t data[12]; }_C++_C_Linux_Serial Port - Fatal编程技术网

通过串行连接C和x2B发送结构+; 我在C++中,在我的Linux机器(X64)和一个微控制器(ARDUINO UNO)之间,通过串行连接交换结构。目前结构基本上如下所示 struct __attribute__ ((packed)) packet { uint8_t data[12]; }

通过串行连接C和x2B发送结构+; 我在C++中,在我的Linux机器(X64)和一个微控制器(ARDUINO UNO)之间,通过串行连接交换结构。目前结构基本上如下所示 struct __attribute__ ((packed)) packet { uint8_t data[12]; },c++,c,linux,serial-port,C++,C,Linux,Serial Port,对于小于32的数字,可以在微控制器上发送和读取,但较大的数字不相同。像32,变成96,33变成97等等 packet my_packet; for (int i = 0; i < 12; ++i) { my_packet.data[i] = i; } if(write(fd, &my_packet, sizeof(packet))>0) { printf("received:\n"); } else { printf("Error writing\

对于小于32的数字,可以在微控制器上发送和读取,但较大的数字不相同。像32,变成96,33变成97等等

packet my_packet;

for (int i = 0; i < 12; ++i)
{
    my_packet.data[i] = i;
}

if(write(fd, &my_packet, sizeof(packet))>0)
{
    printf("received:\n");
}
else
{
    printf("Error writing\n");
}
包我的包;
对于(int i=0;i<12;++i)
{
my_packet.data[i]=i;
}
if(写入(fd,&my_数据包,sizeof(数据包))>0)
{
printf(“已收到:\n”);
}
其他的
{
printf(“写入错误”);
}
在阅读方面

int ret = read(fd, &my_packet_rev, sizeof(my_packet_rev));
if( ret < 0)
{
    printf("Error reading\n");
    exit(0);
}
else if (ret == 0 )
{
    printf("No response\n");
}
else
{
    printf("received:\n");
    for (int i = 0; i < 12; ++i)
    {
        printf("%02X, ", my_packet_rev.data[i]);
    }
    printf("\n");
}
int-ret=read(fd,&my_-packet_rev,sizeof(my_-packet_rev));
如果(ret<0)
{
printf(“错误读取\n”);
出口(0);
}
else if(ret==0)
{
printf(“无响应”);
}
其他的
{
printf(“已收到:\n”);
对于(int i=0;i<12;++i)
{
printf(“%02X”,我的数据包修订数据[i]);
}
printf(“\n”);
}
输入:

1E 1F 20 21 22 23 24 25 26 27 28 二十九

输出:

1E 1F 60 61 62 63 64 65 66 67 68 六十九


我可能做错了什么?

听起来你需要处理Endian。你可以使用
htonl()
/
ntohl()
函数来处理。虽然对进行一些研究总是很好的,但这应该不是问题,因为你只是发送一个字节数组。如果
my_packet
packet
结构的一个实例,那么发送是正常的。这只会让接收成为一个可能的问题,或者你如何显示你收到的数据,但不幸的是你没有显示你是如何做到这一点的。请尝试创建一个并向我们显示以下代码:
for(int i=0;i<12;++i){my_packet.data[i]=i;
将生成包含以下内容的数组:
0x00 0x01 0x02 0x03 0x04…0x0A 0x0B
,该数组与您发布的数据完全不同。请确保双方的通信端口设置相同,例如8N1。发送和接收的数据之间似乎正好短1位。