📄 ch07s07.html
字号:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>7.7. 快速参考-Linux设备驱动第三版(中文版)-开发频道-华星在线</title>
<meta name="description" content="驱动开发-开发频道-华星在线" />
<meta name="keywords" content="Linux设备驱动,中文版,第三版,ldd,linux device driver,驱动开发,电子版,程序设计,软件开发,开发频道" />
<meta name="author" content="华星在线 www.21cstar.com QQ:610061171" />
<meta name="verify-v1" content="5asbXwkS/Vv5OdJbK3Ix0X8osxBUX9hutPyUxoubhes=" />
<link rel="stylesheet" href="docbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.69.0">
<link rel="start" href="index.html" title="Linux 设备驱动 Edition 3">
<link rel="up" href="ch07.html" title="第 7 章 时间, 延时, 和延后工作">
<link rel="prev" href="ch07s06.html" title="7.6. 工作队列">
<link rel="next" href="ch08.html" title="第 8 章 分配内存">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader">
<table width="100%" summary="Navigation header">
<tr><th colspan="3" align="center">7.7. 快速参考</th></tr>
<tr>
<td width="20%" align="left">
<a accesskey="p" href="ch07s06.html">上一页</a> </td>
<th width="60%" align="center">第 7 章 时间, 延时, 和延后工作</th>
<td width="20%" align="right"> <a accesskey="n" href="ch08.html">下一页</a>
</td>
</tr>
</table>
<hr>
</div>
<div class="sect1" lang="zh-cn">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="timedelayanddefferedworkqk.sect"></a>7.7. 快速参考</h2></div></div></div>
<p>本章介绍了下面的符号.</p>
<div class="sect2" lang="zh-cn">
<div class="titlepage"><div><div><h3 class="title">
<a name="Timekeeping.sect"></a>7.7.1. 时间管理</h3></div></div></div>
<div class="variablelist"><dl>
<dt><span class="term"><span>#include <linux/param.h></span></span></dt>
<dd></dd>
<dt><span class="term">HZ <span></span></span></dt>
<dd><p>HZ 符号指定了每秒产生的时钟嘀哒的数目.</p></dd>
<dt><span class="term"><span>#include <linux/jiffies.h></span></span></dt>
<dd></dd>
<dt><span class="term"><span>volatile unsigned long jiffies;</span></span></dt>
<dd></dd>
<dt><span class="term"><span>u64 jiffies_64;</span></span></dt>
<dd><p>jiffies_64 变量每个时钟嘀哒时被递增; 因此, 它是每秒递增 HZ 次. 内核代码几乎常常引用 jiffies, 它在 64-位平台和 jiffies_64 相同并且在 32-位平台是它低有效的一半.</p></dd>
<dt><span class="term"><span>int time_after(unsigned long a, unsigned long b);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>int time_before(unsigned long a, unsigned long b);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>int time_after_eq(unsigned long a, unsigned long b);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>int time_before_eq(unsigned long a, unsigned long b);</span></span></dt>
<dd><p>这些布尔表达式以一种安全的方式比较 jiffies, 没有万一计数器溢出的问题和不需要存取 jiffies_64.</p></dd>
<dt><span class="term"><span>u64 get_jiffies_64(void);</span></span></dt>
<dd><p>获取 jiffies_64 而没有竞争条件.</p></dd>
<dt><span class="term"><span>#include <linux/time.h></span></span></dt>
<dd></dd>
<dt><span class="term"><span>unsigned long timespec_to_jiffies(struct timespec *value);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void jiffies_to_timespec(unsigned long jiffies, struct timespec *value);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>unsigned long timeval_to_jiffies(struct timeval *value);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void jiffies_to_timeval(unsigned long jiffies, struct timeval *value);</span></span></dt>
<dd><p>在 jiffies 和其他表示之间转换时间表示.</p></dd>
<dt><span class="term"><span>#include <asm/msr.h></span></span></dt>
<dd></dd>
<dt><span class="term"><span>rdtsc(low32,high32);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>rdtscl(low32);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>rdtscll(var32);</span></span></dt>
<dd><p>x86-特定的宏定义来读取时戳计数器. 它们作为 2 半 32-位来读取, 只读低一半, 或者全部读到一个 long long 变量.</p></dd>
<dt><span class="term"><span>#include <linux/timex.h></span></span></dt>
<dd></dd>
<dt><span class="term"><span>cycles_t get_cycles(void);</span></span></dt>
<dd><p>以平台独立的方式返回时戳计数器. 如果 CPU 没提供时戳特性, 返回 0.</p></dd>
<dt><span class="term"><span>#include <linux/time.h></span></span></dt>
<dd></dd>
<dt><span class="term"><span>unsigned long mktime(year, mon, day, h, m, s);</span></span></dt>
<dd><p>返回自 Epoch 以来的秒数, 基于 6 个 unsigned int 参数.</p></dd>
<dt><span class="term"><span>void do_gettimeofday(struct timeval *tv);</span></span></dt>
<dd><p>返回当前时间, 作为自 Epoch 以来的秒数和微秒数, 用硬件能提供的最好的精度. 在大部分的平台这个解决方法是一个微秒或者更好, 尽管一些平台只提供 jiffies 精度.</p></dd>
<dt><span class="term"><span>struct timespec current_kernel_time(void);</span></span></dt>
<dd><p>返回当前时间, 以一个 jiffy 的精度.</p></dd>
</dl></div>
</div>
<div class="sect2" lang="zh-cn">
<div class="titlepage"><div><div><h3 class="title">
<a name="Delays.sect"></a>7.7.2. 延迟</h3></div></div></div>
<div class="variablelist"><dl>
<dt><span class="term"><span>#include <linux/wait.h></span></span></dt>
<dd></dd>
<dt><span class="term"><span>long wait_event_interruptible_timeout(wait_queue_head_t *q, condition, signed long timeout);</span></span></dt>
<dd><p>使当前进程在等待队列进入睡眠, 安装一个以 jiffies 表达的超时值. 使用 schedule_timeout( 下面) 给不可中断睡眠.</p></dd>
<dt><span class="term"><span>#include <linux/sched.h></span></span></dt>
<dd></dd>
<dt><span class="term"><span>signed long schedule_timeout(signed long timeout);</span></span></dt>
<dd><p>调用调度器, 在确保当前进程在超时到的时候被唤醒后. 调用者首先必须调用 set_curret_state 来使自己进入一个可中断的或者不可中断的睡眠状态.</p></dd>
<dt><span class="term"><span>#include <linux/delay.h></span></span></dt>
<dd></dd>
<dt><span class="term"><span>void ndelay(unsigned long nsecs);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void udelay(unsigned long usecs);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void mdelay(unsigned long msecs);</span></span></dt>
<dd><p>引入一个整数纳秒, 微秒和毫秒的延迟. 获得的延迟至少是请求的值, 但是可能更多. 每个函数的参数必须不超过一个平台特定的限制(常常是几千).</p></dd>
<dt><span class="term"><span>void msleep(unsigned int millisecs);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>unsigned long msleep_interruptible(unsigned int millisecs);</span></span></dt>
<dd></dd>
<dt><span class="term"><span>void ssleep(unsigned int seconds);</span></span></dt>
<dd><p>使进程进入睡眠给定的毫秒数(或者秒, 如果使 ssleep).</p></dd>
</dl></div>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -