summary refs log tree commit diff stats
path: root/lib/std/monotimes.nim
diff options
context:
space:
mode:
Diffstat (limited to 'lib/std/monotimes.nim')
-rw-r--r--lib/std/monotimes.nim14
1 files changed, 9 insertions, 5 deletions
diff --git a/lib/std/monotimes.nim b/lib/std/monotimes.nim
index 78736d719..bf6dc776b 100644
--- a/lib/std/monotimes.nim
+++ b/lib/std/monotimes.nim
@@ -10,17 +10,14 @@
 ##[
 The `std/monotimes` module implements monotonic timestamps. A monotonic
 timestamp represents the time that has passed since some system defined
-point in time. The monotonic timestamps are guaranteed to always increase,
+point in time. The monotonic timestamps are guaranteed not to decrease,
 meaning that that the following is guaranteed to work:
 ]##
 
 runnableExamples:
-  import std/os
-
   let a = getMonoTime()
-  sleep(10)
   let b = getMonoTime()
-  assert a < b
+  assert a <= b
 
 ##[
 This is not guaranteed for the `times.Time` type! This means that the
@@ -79,6 +76,10 @@ when defined(js):
 elif defined(posix) and not defined(osx):
   import std/posix
 
+when defined(zephyr):
+  proc k_uptime_ticks(): int64 {.importc: "k_uptime_ticks", header: "<kernel.h>".}
+  proc k_ticks_to_ns_floor64(ticks: int64): int64 {.importc: "k_ticks_to_ns_floor64", header: "<kernel.h>".}
+
 elif defined(windows):
   proc QueryPerformanceCounter(res: var uint64) {.
     importc: "QueryPerformanceCounter", stdcall, dynlib: "kernel32".}
@@ -101,6 +102,9 @@ proc getMonoTime*(): MonoTime {.tags: [TimeEffect].} =
     mach_timebase_info(machAbsoluteTimeFreq)
     result = MonoTime(ticks: ticks * machAbsoluteTimeFreq.numer div
       machAbsoluteTimeFreq.denom)
+  elif defined(zephyr):
+    let ticks = k_ticks_to_ns_floor64(k_uptime_ticks())
+    result = MonoTime(ticks: ticks)
   elif defined(posix):
     var ts: Timespec
     discard clock_gettime(CLOCK_MONOTONIC, ts)