在Linux中,udelay
是一個用于微調延時的函數,它接受一個以微秒為單位的參數
usleep()
函數:usleep()
函數允許你指定一個以微秒為單位的延時。它的原型如下:
#include <unistd.h>
void usleep(useconds_t usec);
要使用usleep()
函數,只需將所需的延時(以微秒為單位)作為參數傳遞即可。例如,要延遲1000微秒,可以這樣做:
#include <unistd.h>
#include <stdio.h>
int main() {
printf("Sleeping for 1000 microseconds...\n");
usleep(1000);
printf("Awake!\n");
return 0;
}
nanosleep()
函數:nanosleep()
函數允許你指定一個以納秒為單位的延時。它的原型如下:
#include <time.h>
int nanosleep(const struct timespec *req, struct timespec *rem);
要使用nanosleep()
函數,需要創建一個timespec
結構體,設置其tv_sec
和tv_nsec
成員,分別表示延時的時間和納秒部分。然后,將請求結構體傳遞給nanosleep()
函數。例如,要延遲1000微秒,可以這樣做:
#include <time.h>
#include <stdio.h>
int main() {
printf("Sleeping for 1000 microseconds...\n");
struct timespec req, rem;
req.tv_sec = 0;
req.tv_nsec = 1000 * 1000; // 1000 milliseconds = 1000000 nanoseconds
if (nanosleep(&req, &rem) == -1) {
perror("nanosleep");
return 1;
}
printf("Awake!\n");
return 0;
}
請注意,nanosleep()
函數允許你在延時期間進行中斷,而usleep()
函數則會阻塞整個進程。因此,如果你需要在延時期間執行其他任務,nanosleep()
可能更適合你的需求。