delay.h 627 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #ifndef FAKE_DELAY_H_
  2. #define FAKE_DELAY_H_
  3. #include <time.h>
  4. #include <errno.h>
  5. #include <string.h>
  6. #include <math.h>
  7. #include <stdio.h>
  8. static inline void _usleep__(uint64_t us)
  9. {
  10. int err;
  11. struct timespec tv;
  12. tv.tv_sec = 0;
  13. while (us >= 1000000u) {
  14. tv.tv_sec++;
  15. us -= 1000000u;
  16. }
  17. tv.tv_nsec = (int64_t)us * 1000;
  18. do {
  19. err = nanosleep(&tv, &tv);
  20. } while (err && errno == EINTR);
  21. if (err)
  22. perror("nanosleep()");
  23. }
  24. static inline void _delay_ms(double ms)
  25. {
  26. _usleep__((uint64_t)ceil(ms * 1000.0));
  27. }
  28. static inline void _delay_us(double us)
  29. {
  30. _usleep__((uint64_t)ceil(us));
  31. }
  32. #endif /* FAKE_DELAY_H_ */