X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fdrv%2Ftimer_test.c;h=421f746ebbb4b625f28fa5834a7a85c5063ffa82;hb=5e73aab9a17894e79527640580b759e87a4dec8c;hp=a7839f41ebac382d957914324cec75a38d963189;hpb=f81ab81af897093cc762ec92507c38ec453d1845;p=bertos.git diff --git a/bertos/drv/timer_test.c b/bertos/drv/timer_test.c index a7839f41..421f746e 100644 --- a/bertos/drv/timer_test.c +++ b/bertos/drv/timer_test.c @@ -32,8 +32,8 @@ * * \brief Hardware independent timer driver (implementation) * - * \version $Id$ * \author Bernie Innocenti + * */ #include @@ -67,7 +67,9 @@ static void timer_test_constants(void) kprintf("ticks_to_us(10000) = %lu\n", (unsigned long)ticks_to_us(10000)); kprintf("\n"); kprintf("hptime_to_us(100) = %lu\n", (unsigned long)hptime_to_us(100)); - kprintf("hptime_to_us(10000)= %lu\n", (unsigned long)hptime_to_us(10000)); + #if (SIZEOF_HPTIME_T > 1) + kprintf("hptime_to_us(10000)= %lu\n", (unsigned long)hptime_to_us(10000)); + #endif kprintf("us_to_hptime(100) = %lu\n", (unsigned long)us_to_hptime(100)); kprintf("us_to_hptime(10000)= %lu\n", (unsigned long)us_to_hptime(10000)); } @@ -94,6 +96,18 @@ static void timer_test_hook(iptr_t _timer) } static Timer test_timers[5]; + +List synctimer_list; +static Timer synctimer_timers[5]; + +static void synctimer_test_hook(iptr_t _timer) +{ + Timer *timer = (Timer *)(void *)_timer; + kprintf("Sync timer process %lu expired\n", (unsigned long)ticks_to_ms(timer->_delay)); + synctimer_add(timer, &synctimer_list); +} + + static const mtime_t test_delays[5] = { 170, 50, 310, 1500, 310 }; static void timer_test_async(void) @@ -128,6 +142,42 @@ static void timer_test_poll(void) } } +static void synctimer_test(void) +{ + size_t i; + + LIST_INIT(&synctimer_list); + for (i = 0; i < countof(synctimer_timers); ++i) + { + Timer *timer = &synctimer_timers[i]; + timer_setDelay(timer, ms_to_ticks(test_delays[i])); + timer_setSoftint(timer, synctimer_test_hook, (iptr_t)timer); + synctimer_add(timer, &synctimer_list); + } + + int secs = 0; + mtime_t start_time = ticks_to_ms(timer_clock()); + mtime_t now; + + while (secs <= 10) + { + now = ticks_to_ms(timer_clock()); + synctimer_poll(&synctimer_list); + if (now - start_time >= 1000) + { + ++secs; + start_time += 1000; + kprintf("seconds = %d, ticks=%lu\n", secs, (unsigned long)now); + } + wdt_reset(); + } + + for (i = 0; i < countof(synctimer_timers); ++i) + { + synctimer_abort(&synctimer_timers[i]); + } +} + int timer_testSetup(void) { IRQ_ENABLE; @@ -143,6 +193,7 @@ int timer_testRun(void) timer_test_delay(); timer_test_async(); timer_test_poll(); + synctimer_test(); return 0; } @@ -154,14 +205,5 @@ int timer_testTearDown(void) return 0; } -#if UNIT_TEST - #include - #include - #include - #include - #include - #include - - TEST_MAIN(timer); -#endif +TEST_MAIN(timer);