问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

linux内核中mdelay怎么实现

发布网友 发布时间:2022-04-25 20:40

我来回答

1个回答

热心网友 时间:2022-06-17 05:48

1.udelay(); mdelay(); ndelay();实现的原理本质上都是忙等待,ndelay和mdelay都是通过udelay衍生出来的,我们使用这些函数的实现往往会碰到编译器的警告implicit declaration of function'udelay',这往往是由于头文件的使用不当造成的。在include/asm-???/delay.h中定义了udelay(),而在include/linux/delay.h中定义了mdelay和ndelay.

udelay一般适用于一个比较小的delay,如果你填的数大于2000,系统会认为你这个是一个错误的delay函数,因此如果需要2ms以上的delay需要使用mdelay函数。

2.由于这些delay函数本质上都是忙等待,对于长时间的忙等待意味这无谓的耗费着cpu的资源,因此对于毫秒级的延时,内核提供了msleep,ssleep等函数,这些函数将使得调用它的进程睡眠参数指定的时间。

应用层:
#include <unistd.h>
1、unsigned int sleep(unsigned int seconds); 秒级
2、int usleep(useconds_t usec); 微秒级:1/10^-6
#define _POSIX_C_SOURCE 199309
#include <time.h>
3、int nanosleep(const struct timespec *req, struct timespec *rem);
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
// The value of the nanoseconds field must be in the range 0 to 999999999.

内核层:
include <linux/delay.h>
1、void ndelay(unsigned long nsecs); 纳秒级:1/10^-10
2、void udelay(unsigned long usecs); 微秒级: 1/10^-6
3、void mdelay(unsigned long msecs); 毫秒级:1/10^-3

sleep_on(), interruptible_sleep_on();
sleep_on_timeout(), interruptible_sleep_on_timeout();
根据你的情况选用这些函数,注意: sleep操作在kernel必须小心、小心。。。
udelay()等函数是cpu忙等,没有传统意义上的sleep。这些函数相当于我们平时的阻塞读、写之类的语义,主要用于等外设完成某些操作
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
13岁一直到18岁晚上经常熬夜会有什么影响 具象表现素描内容简介 ...| 从14世纪文艺复兴到20世纪具象表现绘画 · 168幅画 · 图解西方... 【漫画赏析】比喻具象化——《孤高之人》手法分析 具象美术作品有哪些 具象艺术艺术家介绍 话说 曾经有个演唱会 是初音未来演唱会 39祭 谁知道微信聊天记录删掉了,还能恢复过来吗?有什么软件可以恢复吗?不... 六爻。测缘分。测婚姻 礼仪起源于祭祀的证据是什么? time.h头文件实现代码 nanosleep函数 原型是什么 它是以什么单位来计算的(如:毫秒,微妙,纳秒等) c语言代码求助,高手请进。 什么是节点?在linux内核中如何实现的? apue图4-21程序错误提示incompatible types when assigning to type struct timespec fom type _time_t VxWorks 中timespec这个结构体,如果用clock_gettime()来获取tv_sec,tv_nsec,得到的数值代表什么意思啊? redefinition of ‘struct timespec’ 该怎么解决 佳能什么镜头适合拍集体照 一般用单反相机拍50人左右的集体照应该用什么镜头比较好?! 拍集体照用什么档 单反相机拍集体相,用什么档拍好 单反拍集体照要怎么拍 请问我想买一台单反用来拍摄婚礼摄像和学生毕业集体照,请推荐机型和镜头配置,谢谢! 拍一百多人的集体照用什么相机和镜头好 拍摄70人左右的集体照用什么镜头比较好?大概用多少的焦距? 单反相机拍70人的合影! 拍集体照单反怎么设置好? 亲子鉴定结果中说排除同卵多胞胎,近亲,及外源干扰的前提下,支持被检父亲是孩子的生物学父亲? DNA鉴定父子关系:能确认吗?会不会父子鉴定会不是父子吗? 集体照用什么镜头? 双胞胎做亲子鉴定,他们的DNA是一样的吗?是两个男孩 如何让linux 2.6.18-274版本 支持timerfd 请教有关条件变量cond是如何使用的,具体用来干吗的?谢谢 关于结构体数组赋值的问题 udelay在在linux中都有哪些功能 广角镜头和普通镜头的差别 无线蓝牙发射器有哪些用途? 车载蓝牙发射器怎么用 蓝牙音频发射器用多少伏的电压? 蓝牙音频发射器连接蓝牙耳机成功,但耳机没有声音,是什么原因? 为什么手机开蓝牙会很耗电?? 笔记本使用蓝牙需加发射器吗 哪种银行卡用钱免利息的什么卡? 哪个银行的信用卡可以免息提现? 光大银行自选免息分期付款 用什么银行信用卡分期付款可以免利息???我记得在网上听过有!!! 尼康分期免息哪家银行 哪个银行的信用卡分期手续费最低? 哪家银行的信用卡分期手续费最低 用信用卡账单分期能免息吗? 农村箍堂子占用耕地违法吗?在民法典中怎么规定的