Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.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 如何使用Simulink外部模式在Lego Mindstorms EV3上发送和接收UDP包?_C_Matlab_Udp_Simulink_Mindstorms - Fatal编程技术网

C 如何使用Simulink外部模式在Lego Mindstorms EV3上发送和接收UDP包?

C 如何使用Simulink外部模式在Lego Mindstorms EV3上发送和接收UDP包?,c,matlab,udp,simulink,mindstorms,C,Matlab,Udp,Simulink,Mindstorms,我正在尝试为我的EV3创建一个使用c代码的simulink块,以通过UDP包从传感器发送测量值和/或从其他硬件(raspberry pi)接收数据。然而,我在互联网上找不到任何具体的例子。我试图按照中的示例编写自己的代码。我希望它能工作,因为EV3是一个linux系统。然而,它不起作用 udp_接收器的c代码库(已更新): #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 //BUFLEN=最大尺寸 #定义BUFLEN 512 #定义NPACK 1 双*linux_udp_

我正在尝试为我的EV3创建一个使用c代码的simulink块,以通过UDP包从传感器发送测量值和/或从其他硬件(raspberry pi)接收数据。然而,我在互联网上找不到任何具体的例子。我试图按照中的示例编写自己的代码。我希望它能工作,因为EV3是一个linux系统。然而,它不起作用

udp_接收器的c代码库(已更新)

#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
//BUFLEN=最大尺寸
#定义BUFLEN 512
#定义NPACK 1
双*linux_udp_empfaenger(int32_t端口)
{
结构sockaddr_在si_me中,si_other;
int s,i,j,slen=sizeof(si_other),recv_len;
char-buf[BUFLEN];
//char buf_h[BUFLEN];
无符号短recv_端口=(无符号短)端口;
双*数据;
//创建UDP套接字
if((s=套接字(AF_INET,SOCK_DGRAM,IPPROTO_UDP))=-1)
{
返回0;
出口(1);
}否则{
//将结构归零
memset((char*)&si_-me,0,sizeof(si_-me));
si_me.sin_family=AF_INET;
si_me.sin_port=htons(接收端口);
si_me.sin_addr.s_addr=htonl(在任何情况下);
//将套接字绑定到端口
if(bind(s,(struct sockaddr*)&si_me,sizeof(si_me))=-1)
{
关闭(s);;
返回0;
出口(1);
}否则{
//通过填充null清除缓冲区,它可能以前接收过数据
//memset(buf,'\0',BUFLEN);
对于(i=0;i
./udp_send_receive.c:14:警告:内置函数“exit”的隐式声明不兼容

你失踪了

#include <stdlib.h>
#include <string.h>

您是在EV3上使用乐高集团的标准固件还是使用第三方操作系统?另外,您的两个代码示例看起来都在接收数据,传输的是什么?您是在EV3上编译和安装c代码吗?哈罗·大卫,我使用的是乐高集团的标准固件。是的,我正在编写代码以接收data。基本上,我希望使用该代码接收所有类型的数据,特别是来自其他硬件的测量数据。目前,我正在从我的raspberry pi发送一个无限正弦信号,希望EV3能够接收该信号。c代码正在与simulink模型一起编译到EV3上,并在那里由matlab函数执行ion block。我刚刚上传了我在编译上述问题时收到的警告。希望您能帮助我,谢谢:)谢谢David!我更正了c代码中的所有错误和警告。更正后的代码在问题中会更新。但是,该模型仍在运行,始终为T=0.0000,并且存在Stuck。我想知道我包含的那些头是否存在于EV3中。有什么方法可以检查它吗?您从未为
buf
.I imag分配任何内存当你尝试使用
buf
时,程序得到了一个segfualt。在你的原始帖子中,你使用了
buf[BUFLEN];
,它在堆栈上分配内存,这很可能是你想要做的。谢谢David。我已经纠正了它,并尝试一点一点地运行c代码。当我评论
recvfrom()时
函数就像我刚才在问题中更新的一样,模型运行平稳,但当然没有收到数据,并且数据总是返回-1。因此,首先,我认为如果没有收到数据,它应该返回0作为值,因为我声明了
double data=0;
?我也不明白为什么
recvfrom
函数是not正在工作。我无法访问simulink,因此我不知道数据实际上是如何返回的,以及为什么会返回-1.
recvfrom()
功能块直到它接收到数据。您是否确实发送了数据?另外,您当前在
关闭之前有
返回数据
所以套接字没有正确关闭。我明白了。我还没有向它发送任何数据。但我想做的是,如果在超时期间没有收到任何数据,数据将返回0。有没有办法实现这一点?另外,当创建或绑定套接字时出错,数据也将返回0。(但我不太确定我写的方法是否正确。基本上我想退出函数并将输出数据返回为0)。在我停止模型之前,函数将在无限循环中被调用。如果我将数据获取为0而不是等待接收数据,那将非常好,这样模型中的其他组件也可以运行。
#include <string.h>
void udp_send(char *data, char *SERVER, int PORT)