【问题标题】:fatal error: linux/delay.h: No such file or directory致命错误:linux/delay.h:没有这样的文件或目录
【发布时间】:2014-01-29 06:49:48
【问题描述】:

我的程序中使用了函数mdelay(),但是编译的时候,GCC给了我一个错误:

致命错误:linux/delay.h:没有这样的文件或目录

我试图解决这个问题,但没有任何效果。

我尝试过的:

  • 将文件 delay.h 复制到文件夹 /usr/linux 中,但会显示另一个头文件 (asm/delay.h) 丢失。

  • 将文件 delay.h(与上述不同)复制到文件夹 /usr/asm 中,但它会显示许多头文件丢失。

如何解决这个问题?

环境:Ubuntu 12.04 LTS

【问题讨论】:

  • 您到底想要构建什么?如我所见,您想针对 Linux 内核的源代码(例如驱动程序)构建一些东西。对吗?
  • @evnu 不是驱动程序,我只是想让我的简单 C 代码延迟一小段时间,就像我在 Windows 中使用的 (Sleep()) 一样。
  • 使用sleep of usleep
  • @sujin 我之前尝试过使用msleep(),但这与 Sleep() 不同。
  • @KevinDongNaiJia:msleep()是哪个功能?我也会选择usleep(),只需将参数缩放到微秒。

标签: c linux delay


【解决方案1】:

Linux Cross Reference所示,mdelay()是linux内核源代码中的一个宏。

#ifndef mdelay
#define mdelay(n) (\
        (__builtin_constant_p(n) && (n)<=MAX_UDELAY_MS) ? udelay((n)*1000) : \
        ({unsigned long __ms=(n); while (__ms--) udelay(1000);}))
#endif

因此,您不能简单地使用它。但是存在多种选择,例如:

  • sleep()unistd.h 中用于睡眠 N 秒。
  • usleep() in unistd.h 用于睡眠 U 微秒
  • nanosleep() in time.h 用于使线程休眠几纳秒。

据我了解,您正在寻找一个指定微秒睡眠间隔的函数。因此,请使用usleep()。但是请注意,该函数在 POSIX.1-2001 中被标记为 deprecatedusleep() 的手册页建议改用 nanosleep()

【讨论】:

    【解决方案2】:

    msleep 是核函数。如果您想延迟 c 程序使用 sleepusleep

    我没有找到任何msleep 标准函数。你可以在usleep的帮助下实现它。

    #include <stdio.h>
    #include <unistd.h>
    
    int main(void)
    {
        long x = 1000000;
        sleep(1);  //1sec
        usleep(1); //1usec
        usleep(x); //1sec
        x = 1000;
        usleep(x); //1msec
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-27
      • 2014-05-25
      • 2017-05-09
      • 2021-05-15
      • 2014-10-31
      • 2022-01-11
      • 2021-09-19
      相关资源
      最近更新 更多