sleep_us.c 1010 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/time.h>
  4. #include <stddef.h>
  5. /* From Advanced Programming in the Unix Environment
  6. * by W. Richard Stevens. */
  7. /* Sleep for a number of microseconds */
  8. void sleep_us1(unsigned int nusecs) {
  9. usleep(nusecs);
  10. }
  11. void sleep_us(unsigned int nusecs) {
  12. struct timeval tval;
  13. /* If we don't need to sleep then leave */
  14. if (nusecs < 1) {
  15. return;
  16. }
  17. tval.tv_sec = nusecs / 1000000L;
  18. tval.tv_usec = nusecs % 1000000L;
  19. select(0,NULL, NULL, NULL, &tval);
  20. }
  21. void sleep_us_loop(unsigned int nusecs) {
  22. volatile int i;
  23. for (i = 0; i < nusecs*200; i++) {
  24. }
  25. }
  26. void sleep_us_ns(unsigned int nusecs) {
  27. struct timespec tval;
  28. /* Input is number of microseconds.
  29. * 1 second = 1000000 microseconds.
  30. * 1 second = 1000000000 nanoseconds
  31. */
  32. tval.tv_sec = nusecs / 1000000L;
  33. /* Note that nsec = microseconds */
  34. tval.tv_nsec = nusecs % 1000000L;
  35. /* So we need to conert it to nanoseconds */
  36. tval.tv_nsec = tval.tv_nsec * 1000;
  37. nanosleep(&tval,&tval);
  38. }