Tag: 通信

从读取设备数据流中丢失流量控制数据(0x13)

我编写了一个Linux应用程序,通过模拟串行端口的USB端口读取和写入二进制数据到远程设备。 当我从设备读取数据时,我有一个USB嗅探器,显示这样的二进制数据流(0x01,0x0A …… 0x13),但是当我的程序读取字节时,0x13不在字节流中 – 这是XOFF char,但我没有使用XON / XOFF流控制(我认为)。 尝试打开读取和写入,以及在二进制模式下fopen fread和fwrite,同样的结果。 有任何想法吗?

MPI_Gatherv:创建和收集可变大小的数组(MPI + C)

我是MPI的新手,我试图并行管理不同大小的数组,然后将它们传递给主线程,到目前为止还没有成功。 我已经了解到了 MPI_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype, int root, MPI_Comm comm) 是这种情况下的方法。 这是我的示例代码,由于内存问题而无效(我认为)。 #include #include #include #include int main (int argc, char *argv[]) { MPI_Init(&argc, &argv); int world_size,*sendarray; int rank, *rbuf=NULL, count; int *displs=NULL,i,*rcounts=NULL; MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &world_size); if(rank==0){ rbuf = malloc(10*sizeof(int)); displs […]

串口重定向或拆分

我正在寻找一本关于如何进行串口重定向或端口拆分的书籍或代码示例。 我编写了很多com端口应用程序,并希望编写一个监视器应用程序,以便我可以看到应用程序和设备之间的串行端口。 所以我希望能够将串口重定向到另一个端口,这样我就可以监控端口之间的数据流。 我理解在某些情况下,这必须在内核级别完成。 (在USB情况下) 我在C#中使用system.IO.Ports编写了监视器应用程序。 如果我必须调用一个很好的C ++ / C程序集。 谢谢 乔

在嵌入式设备上将字节流转换为C89中的数据包流的方法

我正在研究使用rs232(通过USB连接的rs232)连接到PC的嵌入式设备。 我正在考虑开发自己的协议: 但我不想重新发明轮子。 请注意 :我正在考虑相当受限的设备:4kb的RAM,没有内核,也没有标准的C lib。 你能想到一个标准的方法来做到这一点(也许是开源库)? 如果您编写自己的解决方案,是否有任何最佳实践? 你是否也在包的末尾使用MAGIC字节? 也许最好使用时间间隔而不是分隔符? 如何在流二进制数据中找到包的开头? 也许最好使用文本协议? 更新:请重新阅读问题。 我不应该要求图书馆,而是要求良好做法。

如何在C中获取我的非环回网络IP地址?

对于两台主机之间的通信,我需要将主机的IP地址发送到另一个站点。 问题是,如果我请求我的IP地址,可能是我收回本地环回IP地址(127.xxx),而不是网络(以太网)IP地址。 我使用以下代码: char myhostname[32]; gethostname(myhostname, 32); hp = gethostbyname(myhostname); unsigned my_ip = *(unsigned*)(hp->h_addr); if( (my_ip % 256) == 127) { /* Wrong IP adress as it’s 127.xxx */ printf(“Error, local IP address!”); return; } 解决它的唯一方法是确保/ etc / hosts中的主机名在真实网络地址后面,而不是本地环回(例如Ubuntu的默认值)。 有没有办法解决这个问题而不依赖于/ etc / hosts的内容? 编辑:我更改了上面的代码,所以它使用getaddrinfo,但我仍然得到回送设备的号码(127.0,0,1)而不是真正的IP地址: struct addrinfo hint = {0}; struct addrinfo *aip = NULL; unsigned […]

来自未知来源的MPI异步广播

我有一个C项目,有n个处理器在进行一种树搜索。 在程序的任何给定时间,这些过程中的任何一个都可能找到感兴趣的东西并且想要异步地将其发送到所有其他处理器。 如何在其他进程中侦听新消息,而无需在每次循环迭代时循环遍历所有可能的发送方? 我已经阅读了有关此问题的其他问题,例如这个问题( MPI – 异步广播/收集 ),但是,到目前为止我所看到的所有问题都没有处理不可预测的发送者或循环每个可能的发送者,我实际上并不是这样。花哨。 编辑澄清: 将找到的值发送到根级别并从那里分发它是不可选的。 如果我没有那个条件,祖兰的答案会起作用,所以对于其他人来说,这可能会有所帮助。 在我的情况下,它可以(并且肯定会)发生不同的排名找到他们需要多次共享的东西(这意味着竞争条件也可能发生)。