time.h

Defines

EMB_TICK_NS
EMB_TIMEOUT_MAX_TICKS
EMB_DURATION_(x)
EMB_TIMEOUT_(x)
EMB_INSTANT_(x)
EMB_NS_TO_TICKS(n)
EMB_US_TO_TICKS(n)
EMB_MS_TO_TICKS(n)
EMB_SEC_TO_TICKS(n)
EMB_TICKS(n)
EMB_NS(n)
EMB_US(n)
EMB_MS(n)
EMB_SEC(n)
EMB_NO_WAIT
EMB_WAIT_FOREVER
EMB_TIMEOUT(d)
EMB_TIMEOUT_IS_FOREVER(t)
EMB_TIMEOUT_IS_NO_WAIT(t)
EMB_DURATION_IS_ZERO(d)

Typedefs

typedef struct emb_instant emb_instant_t
typedef struct emb_duration emb_duration_t
typedef struct emb_timeout emb_timeout_t

Functions

static inline uint64_t emb_mul_sat_u64(uint64_t a, uint64_t b)

emb_mul_sat_u64() - Multiply unsigned values with saturation.

Context: thread isr prekernel Blocking: no Timing: O(1) Ownership: none Configuration: Requirements: API-023 Since: 0.2 Stability: yes

Return: a * b, or UINT64_MAX when the mathematical product overflows. This conversion helper is also used by the public duration macros.

Parameters:
  • a – First unsigned factor.

  • b – Second unsigned factor.

static inline emb_tick_t emb_ns_to_ticks(uint64_t ns)

emb_ns_to_ticks() - Convert nanoseconds to ticks, rounding up.

Context: thread isr prekernel Blocking: no Timing: O(1) Ownership: none Configuration: Requirements: API-023 KRN-TIM-007 Since: 0.2 Stability: yes

Return: ceil(ns / CONFIG_EMB_TICK_NS), saturated to EMB_TICK_MAX. The addition needed for rounding is itself checked for overflow.

Parameters:
  • ns – Unsigned nanosecond duration; zero converts to zero.

emb_instant_t emb_time_now(void)

emb_time_now() - Read the kernel monotonic clock.

Context: thread isr prekernel Blocking: no Timing: O(1) Ownership: none Configuration: Requirements: KRN-TIM-001 KRN-TIM-032 Since: 0.2 Stability: yes

Return: the current instant; zero before kernel start, wrapping with the configured tick width. Use emb_instant_before() for 32-bit ordering.

emb_timeout_t emb_timeout_from_duration(emb_duration_t d)

emb_timeout_from_duration() - A timeout that waits at most d

.

Context: thread isr prekernel Blocking: no Timing: O(1) Ownership: none Configuration: Requirements: API-023 KRN-TIM-022 Since: 0.2 Stability: yes

Parameters:
  • d – The duration; saturates to EMB_TIMEOUT_MAX_TICKS so a finite wait never reads as EMB_WAIT_FOREVER (SPEC-001 §7.3, SPEC-003 §5.2).

emb_instant_t emb_instant_add(emb_instant_t t, emb_duration_t d)

emb_instant_add()

- Add a duration to a kernel-clock instant.

Saturates at EMB_TICK_MAX in the 64-bit profile; wraps in the 32-bit profile, whose instant space is circular (SPEC-003 §5.2).

Context: thread isr prekernel Blocking: no Timing: O(1) Ownership: none Configuration: Requirements: API-022 API-023 KRN-TIM-022 Since: 0.2 Stability: yes

Parameters:
  • t – Kernel-clock instant to advance.

  • d – Duration to add; scheduling comparisons still require the 32-bit half-range window.

emb_duration_t emb_instant_sub(emb_instant_t later, emb_instant_t earlier)

emb_instant_sub() - later minus earlier, zero when later is not after earlier

.

Context: thread isr prekernel Blocking: no Timing: O(1) Ownership: none Configuration: Requirements: API-022 KRN-TIM-003 Since: 0.2 Stability: yes

Parameters:
  • later – Candidate later instant, within the 32-bit comparison window if applicable.

  • earlier – Reference instant on the same kernel clock.

bool emb_instant_before(emb_instant_t a, emb_instant_t b)

emb_instant_before() - Is a before b

? Wrap-safe in the 32-bit profile.

Context: thread isr prekernel Blocking: no Timing: O(1) Ownership: none Configuration: Requirements: API-022 KRN-TIM-003 KRN-TIM-022 Since: 0.2 Stability: yes

Parameters:
  • a – First instant on the kernel clock.

  • b – Second instant; 32-bit ordering requires separation less than half the counter range.

uint64_t emb_duration_to_ns(emb_duration_t d)

emb_duration_to_ns()

- Exact ticks-to-nanoseconds conversion, saturating.

Context: thread isr prekernel Blocking: no Timing: O(1) Ownership: none Configuration: Requirements: API-023 Since: 0.2 Stability: yes

Parameters:
  • d – Duration in kernel ticks; multiplication saturates to UINT64_MAX.

bool emb_duration_is_saturated(emb_duration_t d)

emb_duration_is_saturated() - Does d

hold the saturated tick value?

Context: thread isr prekernel Blocking: no Timing: O(1) Ownership: none Configuration: Requirements: API-023 Since: 0.2 Stability: yes

Parameters:
  • d – Duration to inspect; true means ticks == EMB_TICK_MAX, including an explicitly supplied maximum.

struct emb_instant
#include <time.h>

Public Members

emb_tick_t ticks
struct emb_duration
#include <time.h>

Public Members

emb_tick_t ticks
struct emb_timeout
#include <time.h>

Public Members

emb_tick_t ticks