#include #include #include #include #include #include #include #include #include #include #include #define IRQ_NUMBER 7 /* Intercept interrupt #7 */ #define TASK_PRIO 99 /* Highest RT priority */ #define TASK_MODE 0 /* No flags */ #define TASK_STKSZ 0 /* Stack size (use default one) */ int end = 0; RT_INTR intr_desc; RT_TASK server_desc; void irq_server (void *cookie){ int err=0; int int_count; while(!end){ /* Wait for the next interrupt on channel #7. */ err = rt_intr_wait(&intr_desc,TM_INFINITE); if (err > 0) {int_count++;printf("interrupt_task error = %i\n", int_count);} else { printf("interrupt_task_2 error = %i\n", err); } rt_intr_enable (&intr_desc); } } int main (int argc, char *argv[]){ int err = 0; mlockall(MCL_CURRENT|MCL_FUTURE); err = rt_intr_create(&intr_desc,"MyIrq",IRQ_NUMBER,0); err = rt_task_create(&server_desc,"MyIrqServer",TASK_STKSZ,TASK_PRIO,TASK_MODE); if (err) { printf("error rt_task_spawn\n"); return 0; } else printf("start\n"); err = rt_task_start(&server_desc,&irq_server,NULL); if (err) { printf("error rt_task_spawn\n"); return 0; } else printf("start\n"); } void cleanup (void) { end = 1; rt_intr_delete(&intr_desc); rt_task_delete(&server_desc); }