boottime.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*
  2. * Copyright (c) 2006-2023, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2023-07-10 xqyjlj The first version.
  9. */
  10. #include "ktime.h"
  11. #define __KTIME_MUL ((1000UL * 1000 * 1000) / RT_TICK_PER_SECOND)
  12. rt_err_t rt_ktime_boottime_get_us(struct timeval *tv)
  13. {
  14. RT_ASSERT(tv != RT_NULL);
  15. rt_tick_t ms = rt_tick_get();
  16. unsigned long ns =
  17. ((rt_ktime_cputimer_getcnt() % rt_ktime_cputimer_getstep()) * rt_ktime_cputimer_getres()) / RT_KTIME_RESMUL;
  18. ns = ((ms % RT_TICK_PER_SECOND) * __KTIME_MUL) + ns;
  19. tv->tv_sec = ms / RT_TICK_PER_SECOND;
  20. tv->tv_usec = ns / 1000;
  21. return RT_EOK;
  22. }
  23. rt_err_t rt_ktime_boottime_get_s(time_t *t)
  24. {
  25. RT_ASSERT(t != RT_NULL);
  26. *t = rt_tick_get() / RT_TICK_PER_SECOND;
  27. return RT_EOK;
  28. }
  29. rt_err_t rt_ktime_boottime_get_ns(struct timespec *ts)
  30. {
  31. RT_ASSERT(ts != RT_NULL);
  32. rt_tick_t ms = rt_tick_get();
  33. unsigned long ns =
  34. ((rt_ktime_cputimer_getcnt() % rt_ktime_cputimer_getstep()) * rt_ktime_cputimer_getres()) / RT_KTIME_RESMUL;
  35. ts->tv_sec = ms / RT_TICK_PER_SECOND;
  36. ts->tv_nsec = ((ms % RT_TICK_PER_SECOND) * __KTIME_MUL) + ns;
  37. return RT_EOK;
  38. }