X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fdrv%2Ftimer_test.c;h=421f746ebbb4b625f28fa5834a7a85c5063ffa82;hb=15810459b8f5fb09b12cef6f8e4d4e64d167087b;hp=c3414d79f697dfca648042873be8e70431e61cc2;hpb=8baedd5c716fca8f63e9c9b2e64071f12c29dc9d;p=bertos.git diff --git a/bertos/drv/timer_test.c b/bertos/drv/timer_test.c index c3414d79..421f746e 100644 --- a/bertos/drv/timer_test.c +++ b/bertos/drv/timer_test.c @@ -32,7 +32,6 @@ * * \brief Hardware independent timer driver (implementation) * - * \version $Id$ * \author Bernie Innocenti * */ @@ -97,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) @@ -131,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; @@ -146,6 +193,7 @@ int timer_testRun(void) timer_test_delay(); timer_test_async(); timer_test_poll(); + synctimer_test(); return 0; }