Ok, thanks then this makes sense for the following reason. In an SMP architecture, the rtems_clock_get_ticks_since_boot() returns the number of ticks on the boot processor. So what you might be observing is something like the following, suppose you have CPU0 as the boot processor:
- Task is executing on CPU1
- Reads
aTicks on CPU0 - call
rtems_task_wake_after(1)to sleep for a partial tick - Wake up and read
bTicks on CPU0
Because the first interval of the rtems_task_wake_after is a partial tick (it does not start on a clock tick), the task sleeps for less than a full clock tick. Due to asynchrony between CPU0 and CPU1 you get the behavior you observe.
I don’t think we currently expose an API to view the clock ticks for the executing core. This value is stored in Per_CPU_Control.Watchdog.ticks in case you’d like to check with a debugger.
If you want to sleep for a minimum amount of time, I would suggest using clock_nanosleep. This is also documented in 8.4. Directives — RTEMS Classic API Guide 7.1023b8c (8th January 2026) documentation