16 #include <rtems/error.h> 21 #define INTERRUPT_CONTEXT_MESSAGE_QUEUE_COUNT 100 23 static rtems_id interruptContextMessageQueue;
28 rtems_interrupt_level level;
30 rtems_interrupt_disable (level);
37 rtems_interrupt_level level = key;
39 rtems_interrupt_enable (level);
45 return rtems_interrupt_is_in_progress ();
57 rtems_message_queue_send (interruptContextMessageQueue, &message,
sizeof message);
70 sc = rtems_message_queue_create (rtems_build_name (
'I',
'C',
'M',
'Q'),
73 RTEMS_FIFO | RTEMS_LOCAL,
74 &interruptContextMessageQueue);
75 if (sc != RTEMS_SUCCESSFUL) {
76 errlogPrintf (
"Can't create interrupt context message queue: %s\n", rtems_status_text (sc));
80 sc = rtems_message_queue_receive (interruptContextMessageQueue,
85 if (sc != RTEMS_SUCCESSFUL) {
86 errlogPrintf (
"Can't receive message from interrupt context: %s\n", rtems_status_text (sc));
89 if (size ==
sizeof message)
90 syslog (LOG_ERR,
"%s", message);
92 errlogPrintf (
"Received %u-byte message from interrupt context", (
unsigned int)size);
LIBCOM_API int epicsInterruptIsInterruptContext()
LIBCOM_API void epicsInterruptUnlock(int key)
void InterruptContextMessageDaemon(void *unused)
LIBCOM_API void epicsStdCall epicsThreadSuspendSelf(void)
int errlogPrintf(const char *pFormat,...)
LIBCOM_API int epicsInterruptLock()
C++ and C descriptions for a thread.
#define INTERRUPT_CONTEXT_MESSAGE_QUEUE_COUNT
LIBCOM_API void epicsInterruptContextMessage(const char *message)