C++ sink将无线介质接入有限状态机的伪码
此伪代码用于尝试访问无线媒体的接收器,以发送和接收来自传感器的数据C++ sink将无线介质接入有限状态机的伪码,c++,networking,pseudocode,fsm,C++,Networking,Pseudocode,Fsm,此伪代码用于尝试访问无线媒体的接收器,以发送和接收来自传感器的数据 设置pc=0.01 发送一个轮询包 如果没有传感器响应轮询数据包,则设置pc=min(pc+0.01,1.0) 如果成功接收到来自其中一个传感器的数据包,请将pc保持在当前值 如果损坏的数据包指示两个或多个传感器之间发生碰撞,请设置pc=pc/2 重复步骤2 我已经阅读了链接,它真的帮助了我的传感器部分。但我仍然对尝试将上述伪代码转换为FSM感到困惑 有人能推荐一个链接或电子书,对如何将伪代码转换成FSM给出清晰的解释吗?我不确
pc=0.01
pc=min(pc+0.01,1.0)
pc
保持在当前值pc=pc/2
有人能推荐一个链接或电子书,对如何将伪代码转换成FSM给出清晰的解释吗?我不确定你在这里真正想要的是什么;简单地编写这个代码将非常简单,而且这个问题看起来不值得我这么做 下面是一些类似C的伪代码:
double pc = 0.01;
int sensorsfd;
void loop(void) {
for (;;) {
fd_set readfds, writefds, exceptfds;
FD_ZERO(&readfds);
FD_ZERO(&writefds);
FD_ZERO(&exceptfds);
FD_SET(sensorsfd, &readfds);
struct timeval tv;
tv.tv_sec = 0;
tv.tv_usec = 1; /* 0.001 seconds */
int r;
send_polling_packet();
r = select(sensorsfd+1, &readfds, &writefds, &exceptfds, &tv);
if (r == -1 && errno == EINTR) {
continue;
} else if (r == -1) {
perror("select() failed");
exit(1);
} else if (r == 0) {
/* timeout expired */
pc = min (pc + 0.01, 1.0);
} else if (r == 1) {
/* sensorsfd won't block when reading it */
packet_t p = read_packet(sensorsfd);
/* should also handle _no packet_ if the sensors
socket returns EOF */
if (packet_corrupted(p)) {
pc /= 2;
} else {
handle_packet(p);
}
} else {
/* error in program logic */
}
}
}
伪代码的意思是,我只是写了这个,没有任何机制来测试
信息技术如果你的程序比这复杂得多,你可能会
要将所有select(2)
设置封装到自己的函数中,并且
可能是从传感器插座处理数据包的所有细节。标题很差劲,但它比您原来的好。请改进它;我对人际网络了解不多,所以我会让你来决定。