X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Femul%2Ftimer_posix.c;h=309d5c502c19e7b9343ba6dbadd7ed7994a70605;hb=705e92ca3e6a5bd0223f21a8fd9ac714f3253a5f;hp=ede534063a3fd05100acebe729dc5ed2b18a02ae;hpb=7aba26c4dd422016f6c27db30f6eaa686b87fd7e;p=bertos.git diff --git a/bertos/emul/timer_posix.c b/bertos/emul/timer_posix.c index ede53406..309d5c50 100644 --- a/bertos/emul/timer_posix.c +++ b/bertos/emul/timer_posix.c @@ -29,17 +29,19 @@ * Copyright 2005, 2008 Develer S.r.l. (http://www.develer.com/) * --> * - * \version $Id$ + * \brief Low-level timer module for Qt emulator (implementation). * * \author Bernie Innocenti - * \brief Low-level timer module for Qt emulator (implementation). */ -#include // hptime.t +//#include // hptime.t #include +#include // irq_register() +#if !CONFIG_KERN_IRQ #include // sigaction() -#include // setitimer() #include // memset() +#endif +#include // setitimer() // Forward declaration for the user interrupt server routine. @@ -48,19 +50,19 @@ void timer_isr(int); /// HW dependent timer initialization. static void timer_hw_init(void) { -#if CONFIG_KERN_IRQ - irq_register(SIGALRM, timer_isr); -#else // ! CONFIG_KERN_IRQ - struct sigaction sa; - memset(&sa, 0, sizeof(sa)); + #if CONFIG_KERN_IRQ + irq_register(SIGALRM, (void (*)(void))timer_isr); + #else // ! CONFIG_KERN_IRQ + struct sigaction sa; + memset(&sa, 0, sizeof(sa)); - // Setup interrupt callback - sa.sa_handler = timer_isr; - sigemptyset(&sa.sa_mask); - sigaddset(&sa.sa_mask, SIGALRM); - sa.sa_flags = SA_RESTART; - sigaction(SIGALRM, &sa, NULL); -#endif // CONFIG_KERN_IRQ + // Setup interrupt callback + sa.sa_handler = timer_isr; + sigemptyset(&sa.sa_mask); + sigaddset(&sa.sa_mask, SIGALRM); + sa.sa_flags = SA_RESTART; + sigaction(SIGALRM, &sa, NULL); + #endif // CONFIG_KERN_IRQ // Setup POSIX realtime timer to interrupt every 1/TIMER_TICKS_PER_SEC. static const struct itimerval itv = @@ -79,6 +81,7 @@ static void timer_hw_cleanup(void) { 0, 0 } /* it_value */ }; setitimer(ITIMER_REAL, &itv, NULL); + signal(SIGALRM, SIG_DFL); } INLINE hptime_t timer_hw_hpread(void)