#include #include #include #include #include #include #include #include #include #include #include #include #define STACK_SIZE 8192 #define STD_PRIO1 2 #define STD_PRIO2 1 #define IRQ_NUMBER 7 #define BASEPORT 0x378 #define PARPORTINT 7 RT_TASK zaehler1_task_ptr; RT_TASK zaehler2_task_ptr; RT_INTR intr_desc; int count1 = 0; int count2 = 0; int i; int end = 0; // --s-ms-us-ns RTIME task_period_ns1 = 1000000000llu; RTIME task_period_ns2 = 10000000000llu; void zaehler2_task(void *cookie){ int ret; long ii; long jj; double a; unsigned long overrun; int err; while(!end){ err = rt_intr_wait(&intr_desc,TM_INFINITE); printf("Error is %d\n",err); printf("\nInterrupt occured"); fflush(NULL); } // ********************** Ende des wiederholt ausgefuehrten Codes *********************************************** } // signal-handler, to ensure clean exit on Ctrl-C void clean_exit(int dummy) { printf("cleanup\n"); end = 1; rt_task_delete(&zaehler2_task_ptr); rt_intr_delete(&intr_desc); printf("end\n"); } int main(int argc, char *argv[]) { int err, ret; printf("start\n"); // install signal handler signal(SIGTERM, clean_exit); signal(SIGINT, clean_exit); // ask for permission to access the parallel port from user-space if (iopl(3)) { perror("iopl"); // printf("iopl err\n"); exit(1); } outb_p(0x10, BASEPORT + 2); mlockall(MCL_CURRENT | MCL_FUTURE); err = rt_intr_create(&intr_desc,"MyIrq",IRQ_NUMBER,I_NOAUTOENA); printf("rt_intr_create=%i\n", err); switch(-err) { case ENOMEM : printf("fail to allocate dynamic memory"); break; case EBUSY: printf("Busy"); break; } rt_intr_enable (&intr_desc); /* create zaehler2_task */ err = rt_task_create(&zaehler2_task_ptr,"beta",STACK_SIZE,STD_PRIO2,0); /* start zaehler2_task */ err = rt_task_start(&zaehler2_task_ptr,&zaehler2_task,NULL); // wait for signal & return of signal handler pause(); fflush(NULL); return 0; }