Lines Matching +full:one +full:- +full:timer +full:- +full:only

46 ----------
66 word, these conversions expand to a 2-4 operation sequence, requiring
67 full precision only where actually required and requested.
102 an opaque struct type that must be initialized using one of a family
113 within another timer's callback will always be calculated with a precise offset
114 to the firing timer. It is thereby possible to fire at regular intervals without
127 being 32 bits. Large uptime counts in non-tick units will experience
129 timing-sensitive applications with long uptimes will be configured to
142 -------------
146 a double-linked list, with an attendant delta count in ticks from the
150 expected to be embedded within subsystem-defined data structures (for
155 multiple-conversion steps internal to the kernel, so precision is
165 Timer Drivers
166 -------------
168 Kernel timing at the tick level is driven by a timer driver with a
199 kernel, which receives and processes timer interrupts only for
205 the OS tick rate, calling :c:func:`sys_clock_announce` with an argument of one
212 as no more than one tick can be detected as having elapsed (because
217 -----------
219 In general, the timer API described above does not change when run in
224 * Zephyr is agnostic about which CPU services timer interrupts. It is
226 have every timer interrupt handled on a single processor. Existing
227 SMP architectures implement symmetric timer drivers.
231 per-CPU tracking, and expects that if two timer interrupts fire near
232 simultaneously, that only one will provide the current tick count to
237 * Some SMP hardware uses a single, global timer device, others use a
238 per-CPU counter. The complexity here (for example: ensuring counter
244 So by default, every CPU will see simultaneous timer interrupts for
245 every event, even though by definition only one of them should see a
246 non-zero ticks argument to :c:func:`sys_clock_announce`. This is probably
251 responsibility of the timer driver.
254 ------------
258 A thread time-slice cannot be a timeout value, as it does not reflect
259 a global expiration but instead a per-CPU value that needs to be
263 Zephyr multiplexes the existing timer driver. This means that the
269 -------------------------------------
282 One complexity is :c:macro:`K_FOREVER`. Subsystems that might have
285 will need to use a different, integer-valued token to represent
291 --------------------------------
307 .. code-block:: c
319 k_sem_take(obj->sem, timeout_in_ms);
322 timeout_in_ms -= (k_uptime_get_32() - start);
333 .. code-block:: c
349 k_sem_take(obj->sem, timeout);