我每次在STM32板的给定端口(Nucleo f429zi)上收到广播消息时都试图触发中断功能 . 我使用的通信协议是UDP,mbed库是 UDPSocket
,它继承自 Socket
.
有谁知道如何实现它?
Edit:
感谢PeterJ的评论,我发现了类 Socket
的一个有趣(但已弃用)成员函数,它被称为 attach()
. 此方法在套接字的状态更改(recv / send / accept)上注册回调 .
由于我在套接字上有一个传入广播,所以我的情况没有状态变化(只接收数据,从不发送) . 有没有办法可以使用这个 attach()
方法来检测收到的每条消息?
// Open Ethernet connection
EthernetInterface eth;
eth.connect();
// Create an UDP socket for listening to the broadcast
UDPSocket broadcastSocket;
broadcastSocket.open(ð);
broadcastSocket.bind(BROADCAST_PORT);
// Function to call when a broadcast message is received
broadcastSocket.attach(&onUDPSocketEvent);
void onUDPSocketEvent(){
printf("UDP event detected\n");
}
1 回答
attach
已被sigio取代,但我不想做你想做的事 . 一个很好的方法是启动一个新线程,并使用这个线程来处理套接字 .(请注意,回调函数不会在ISR中运行 - 因此不会在中断上下文中运行 - 但我认为您实际上并不希望这样做) .
Edit: 我创建了mbed-udp-ping-pong,它显示了如何在单独的线程上侦听UDP消息 .