void callback(){ dSP; PUSHMARK(SP); call_pv("p_callback", G_DISCARD|G_NOARGS); } // example extern call externFunc(&callback); #### use warnings; use strict; use Inline ('C' => 'DATA', libs => '-lwiringPi'); init(); # the below call is a local XS function that # sets up the external function with the callback setInterrupt(27, 3); # direct call callback(); # on() triggers the external function to exec # the callback on(27); sub p_callback { print "in perl callback\n"; } __DATA__ __C__ #include #include #include void init(); void on(int pin); void off(int pin); void setInterrupt(int pin, int edge); void callback(); void init(){ printf("in init\n"); wiringPiSetup(); } void on(int pin){ pinMode(pin, 1); digitalWrite(pin, 1); } void off(int pin){ digitalWrite(pin, 0); pinMode(pin, 0); } void setInterrupt(int pin, int edge){ wiringPiISR(pin, edge, &callback); } void callback(){ dSP; PUSHMARK(SP); call_pv("p_callback", G_DISCARD|G_NOARGS); } #### in init in perl callback Segmentation fault