diff --git a/src/dev/posix/hasp_posix.cpp b/src/dev/posix/hasp_posix.cpp index 3b0c7566..e19e3c2e 100644 --- a/src/dev/posix/hasp_posix.cpp +++ b/src/dev/posix/hasp_posix.cpp @@ -248,11 +248,18 @@ long PosixDevice::get_uptime() } // namespace dev -long PosixMillis() +static time_t tv_sec_start = 0; + +unsigned long PosixMillis() { struct timespec spec; clock_gettime(CLOCK_REALTIME, &spec); - return (spec.tv_sec) * 1000 + (spec.tv_nsec) / 1e6; + if (tv_sec_start == 0) { + tv_sec_start = spec.tv_sec; + } + unsigned long msec1 = (spec.tv_sec - tv_sec_start) * 1000; + unsigned long msec2 = spec.tv_nsec / 1e6; + return msec1 + msec2; } void msleep(unsigned long millis) diff --git a/src/dev/posix/hasp_posix.h b/src/dev/posix/hasp_posix.h index 4ec64458..7e7d6275 100644 --- a/src/dev/posix/hasp_posix.h +++ b/src/dev/posix/hasp_posix.h @@ -75,7 +75,7 @@ class PosixDevice : public BaseDevice { } // namespace dev -extern long PosixMillis(); +extern unsigned long PosixMillis(); extern void msleep(unsigned long millis); using dev::PosixDevice;