mbed プラットフォームを使用して割り込みがトリガーされたときに、UDP パケットを送信しようとしています。
udp_send
ただし、割り込み関数から呼び出そうとするとkey_pressed
、sys_arch_protect エラーが発生します。
これは、UDPsocket の一部が割り込み関数に渡されていないためでしょうか?
簡潔にするために、ほとんどのコードを省略しました
前もって感謝します、 グレッグ
/*--INCLUDES----------------------------------------------------------------------------*/
#include "mbed.h"
#include "EthernetInterface.h"
/*--CONSTANTS---------------------------------------------------------------------------*/
const int BROADCAST_PORT = 58083;
char pin_status[1] = {0};
InterruptIn push_button(SW3);
/*--FUNCTION DEFINITIONS----------------------------------------------------------------*/
void udp_send(void);
void keyPressed(void);
void keyReleased(void);
/*--------------------------------------------------------------------------------------*/
void keyPressed(void)
{
printf("Key Pressed\r\n"); //debug
udp_send(); //calling the function to send UDP packet, this casuses errors
}
/*--------------------------------------------------------------------------------------*/
void keyReleased( void )
{
printf("Key Released\r\n"); //debug
}
/*--------------------------------------------------------------------------------------*/
void udp_send(void) //sends UDP broadcast packet
{
UDPSocket sock;
sock.init();
sock.set_broadcasting();
Endpoint broadcast;
broadcast.set_address("255.255.255.255", BROADCAST_PORT); //broadcast UDP to all
sock.sendTo(broadcast, pin_status, sizeof(pin_status)); //pin_status changed elsewhere
}
/*--------------------------------------------------------------------------------------*/
int main() {
EthernetInterface eth;
eth.init();
eth.connect();
printf("IP Address is %s\r\n", eth.getIPAddress());
udp_send(); //test call to confirm UDP_send function is working (with Wireshark)
while( 1 )
{
push_button.rise(keyPressed); //debounce omitted, calls interupt
push_button.fall(keyReleased);
//other stuff
}
}