From bdbf1ffa6e81d75ab3ab7adc11e35b1ee1670c29 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 6 Sep 2017 08:54:24 +0200 Subject: Implement clock() Newlib uses _times_r() in clock(). The problem is that the _times_r() clock frequency is defined by sysconf(_SC_CLK_TCK). The clock frequency of clock() is the constant CLOCKS_PER_SEC. FreeBSD uses getrusage() for clock(). Since RTEMS has only one process, the implementation can be simplified. Update #3121. --- cpukit/libcsupport/Makefile.am | 1 + cpukit/libcsupport/src/clock.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 cpukit/libcsupport/src/clock.c diff --git a/cpukit/libcsupport/Makefile.am b/cpukit/libcsupport/Makefile.am index 6091f08261..66a8aa06da 100644 --- a/cpukit/libcsupport/Makefile.am +++ b/cpukit/libcsupport/Makefile.am @@ -66,6 +66,7 @@ SYSTEM_CALL_C_FILES = src/open.c src/close.c src/read.c src/write.c \ src/fcntl.c src/fpathconf.c src/getdents.c src/fsync.c src/fdatasync.c \ src/pipe.c src/dup.c src/dup2.c src/symlink.c src/readlink.c \ src/chroot.c src/sync.c src/_rename_r.c src/statvfs.c src/utimes.c src/lchown.c +SYSTEM_CALL_C_FILES += src/clock.c ## Until sys/uio.h is moved to libcsupport, we have to have networking ## enabled to compile these. Hopefully this is a temporary situation. diff --git a/cpukit/libcsupport/src/clock.c b/cpukit/libcsupport/src/clock.c new file mode 100644 index 0000000000..f976221a78 --- /dev/null +++ b/cpukit/libcsupport/src/clock.c @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2017 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Dornierstr. 4 + * 82178 Puchheim + * Germany + * + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.org/license/LICENSE. + */ + +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +#include +#include + +RTEMS_STATIC_ASSERT( CLOCKS_PER_SEC == 1000000, clocks_per_sec ); + +clock_t clock( void ) +{ + struct timeval tv; + + _Timecounter_Microuptime( &tv ); + + return (clock_t) (tv.tv_sec - 1) * CLOCKS_PER_SEC + tv.tv_usec; +} -- cgit v1.2.3