⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linux设备驱动程序学习(10)-时间、延迟及延缓操作 - linux设备驱动程序 - tekkaman ninja.htm

📁 Linux设备驱动程序学习(10)-时间、延迟及延缓操作 - Linux设备驱动程序.rar
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                              &lt;linux/param.h&gt;</FONT>中定义或该文件包含的某个子平台相关文件中。作为通用的规则,即便如果知道 
                              HZ 
                              的值,在编程时应当不依赖这个特定值,而始终使用HZ。对于当前版本,我们应完全信任内核开发者,他们已经选择了最适合的HZ值,最好保持 
                              HZ 的默认值。</P>
                              <P>&nbsp; 对用户空间,内核HZ几乎完全隐藏,用户 HZ 始终扩展为 
                              100。当用户空间程序包含 
                              param.h,且每个报告给用户空间的计数器都做了相应转换。对用户来说确切的 HZ 值只能通过 
                              /proc/interrupts 获得:/proc/interrupts 的计数值除以 
                              /proc/uptime 中报告的系统运行时间。</P>
                              <P>&nbsp;</P>
                              <P><FONT 
                              color=#0000ff>对于ARM体系结构:在&lt;linux/param.h&gt;文件中的定义如下:</FONT></P>
                              <DIV>
                              <TABLE style="BORDER-COLLAPSE: collapse" 
                              borderColor=#999999 cellSpacing=0 cellPadding=0 
                              width="95%" bgColor=#f1f1f1 border=1>
                                <TBODY>
                                <TR>
                                <TD>
                                <P 
                                style="MARGIN: 5px; LINE-HEIGHT: 150%"><CODE><SPAN 
                                style="COLOR: rgb(0,0,0)"><FONT face=新宋体><SPAN 
                                style="COLOR: rgb(0,0,204)">#</SPAN><SPAN 
                                style="COLOR: rgb(255,0,0)">ifdef</SPAN> 
                                __KERNEL__<BR><SPAN 
                                style="COLOR: rgb(0,0,204)">#</SPAN> <SPAN 
                                style="COLOR: rgb(255,0,0)">define</SPAN> 
                                HZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CONFIG_HZ&nbsp;&nbsp;&nbsp;&nbsp;<SPAN 
                                style="COLOR: rgb(255,153,0)">/* Internal kernel 
                                timer frequency */</SPAN><BR><SPAN 
                                style="COLOR: rgb(0,0,204)">#</SPAN> <SPAN 
                                style="COLOR: rgb(255,0,0)">define</SPAN> 
                                USER_HZ&nbsp;&nbsp;&nbsp;&nbsp;100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN 
                                style="COLOR: rgb(255,153,0)">/* <FONT 
                                color=#ff0000>用户空间使用的HZ</FONT>,User interfaces 
                                are in "ticks" */</SPAN><BR><SPAN 
                                style="COLOR: rgb(0,0,204)">#</SPAN> <SPAN 
                                style="COLOR: rgb(255,0,0)">define</SPAN> <SPAN 
                                style="COLOR: rgb(255,0,0)">CLOCKS_PER_SEC</SPAN>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN 
                                style="COLOR: rgb(0,0,204)">(</SPAN>USER_HZ<SPAN 
                                style="COLOR: rgb(0,0,204)">)</SPAN>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN 
                                style="COLOR: rgb(255,153,0)">/* like times() 
                                */</SPAN><BR><SPAN 
                                style="COLOR: rgb(0,0,204)">#</SPAN><SPAN 
                                style="COLOR: rgb(0,0,255)">else</SPAN><BR><SPAN 
                                style="COLOR: rgb(0,0,204)">#</SPAN> <SPAN 
                                style="COLOR: rgb(255,0,0)">define</SPAN> 
                                HZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;100<BR><SPAN 
                                style="COLOR: rgb(0,0,204)">#</SPAN><SPAN 
                                style="COLOR: rgb(255,0,0)">endif</SPAN></FONT></SPAN></CODE></P></TD></TR></TBODY></TABLE></DIV>
                              <P><FONT color=#0000ff>也就是说:HZ 
                              由__KERNEL__和CONFIG_HZ决定。若未定义__KERNEL__,HZ为100;否则为CONFIG_HZ。而CONFIG_HZ是在内核的根目录的.config文件中定义,并没有在make 
                              menuconfig的配置选项中出现。Linux的\arch\arm\configs\s3c2410_defconfig文件中的定义为: 
                              </FONT></P>
                              <DIV>
                              <TABLE style="BORDER-COLLAPSE: collapse" 
                              borderColor=#999999 cellSpacing=0 cellPadding=0 
                              width="95%" bgColor=#f1f1f1 border=1>
                                <TBODY>
                                <TR>
                                <TD>
                                <P 
                                style="MARGIN: 5px; LINE-HEIGHT: 150%"><CODE><SPAN 
                                style="COLOR: rgb(0,0,0)"><FONT face=新宋体><SPAN 
                                style="COLOR: rgb(0,0,204)">#</SPAN><BR><SPAN 
                                style="COLOR: rgb(0,0,204)">#</SPAN> Kernel 
                                Features<BR><SPAN 
                                style="COLOR: rgb(0,0,204)">#</SPAN><BR><SPAN 
                                style="COLOR: rgb(0,0,204)">#</SPAN> 
                                CONFIG_PREEMPT is <SPAN 
                                style="COLOR: rgb(0,0,255)">not</SPAN> <SPAN 
                                style="COLOR: rgb(255,0,0)">set</SPAN><BR><SPAN 
                                style="COLOR: rgb(0,0,204)">#</SPAN> 
                                CONFIG_NO_IDLE_HZ is <SPAN 
                                style="COLOR: rgb(0,0,255)">not</SPAN> <SPAN 
                                style="COLOR: rgb(255,0,0)">set</SPAN><BR><FONT 
                                color=#ff0000><STRONG>CONFIG_HZ<SPAN 
                                style="COLOR: rgb(0,0,204)">=</SPAN>200</STRONG></FONT><BR><SPAN 
                                style="COLOR: rgb(0,0,204)">#</SPAN> 
                                CONFIG_AEABI is <SPAN 
                                style="COLOR: rgb(0,0,255)">not</SPAN> <SPAN 
                                style="COLOR: rgb(255,0,0)">set</SPAN><BR><SPAN 
                                style="COLOR: rgb(0,0,204)">#</SPAN> 
                                CONFIG_ARCH_DISCONTIGMEM_ENABLE is <SPAN 
                                style="COLOR: rgb(0,0,255)">not</SPAN> <SPAN 
                                style="COLOR: rgb(255,0,0)">set</SPAN></FONT></SPAN></CODE></P></TD></TR></TBODY></TABLE></DIV>
                              <P><FONT 
                              color=#0000ff><STRONG>所以正常情况下s3c24x0的HZ为200。这一数值在后面的实验中可以证实。</STRONG></FONT></P>
                              <P>每次发生一个时钟中断,内核内部计数器的值就加一。这个计数器在系统启动时初始化为 0, 
                              因此它代表本次系统启动以来的时钟嘀哒数。这个计数器是一个 64-位 变量( 即便在 
                              32-位的体系上)并且称为 “jiffies_64”。但是驱动通常访问 jiffies 
                              变量(unsigned long)(根据体系结构的不同:可能是 jiffies_64 
                              ,可能是jiffies_64 的低32位)。使用 jiffies 
                              是首选,因为它访问更快,且无需在所有的体系上实现原子地访问 64-位的 jiffies_64 值。 
                              </P>
                              <P><FONT color=#0000ff size=4><STRONG>使用 jiffies 
                              计数器</STRONG></FONT></P>
                              <P>这个计数器和用来读取它的工具函数包含在 <FONT 
                              color=#0000ff>&lt;linux/jiffies.h&gt;,</FONT> 
                              通常只需包含 <FONT 
                              color=#0000ff>&lt;linux/sched.h&gt;,</FONT>它会自动放入 
                              jiffies.h&nbsp;。&nbsp;jiffies 和 jiffies_64 
                              必须被当作只读变量。当需要记录当前 jiffies 值(被声明为 volatile 
                              避免编译器优化内存读)时,可以简单地访问这个 unsigned long 变量,如: </P>
                              <P>
                              <TABLE style="BORDER-COLLAPSE: collapse" 
                              borderColor=#999999 cellSpacing=0 cellPadding=0 
                              width="95%" bgColor=#f1f1f1 border=1>
                                <TBODY>
                                <TR>
                                <TD>
                                <P 
                                style="MARGIN: 5px; LINE-HEIGHT: 150%"><CODE><SPAN 
                                style="COLOR: rgb(0,0,0)"><FONT face=新宋体><SPAN 
                                style="COLOR: rgb(0,0,204)">#</SPAN><SPAN 
                                style="COLOR: rgb(255,0,0)">include</SPAN> <SPAN 
                                style="COLOR: rgb(0,0,204)">&lt;</SPAN>linux<SPAN 
                                style="COLOR: rgb(0,0,204)">/</SPAN>jiffies<SPAN 
                                style="COLOR: rgb(0,0,204)">.</SPAN>h<SPAN 
                                style="COLOR: rgb(0,0,204)">&gt;</SPAN><BR><SPAN 
                                style="COLOR: rgb(0,0,255)">unsigned</SPAN> 
                                <SPAN style="COLOR: rgb(0,0,255)">long</SPAN> 
                                j<SPAN style="COLOR: rgb(0,0,204)">,</SPAN> 
                                stamp_1<SPAN 
                                style="COLOR: rgb(0,0,204)">,</SPAN> 
                                stamp_half<SPAN 
                                style="COLOR: rgb(0,0,204)">,</SPAN> 
                                stamp_n<SPAN 
                                style="COLOR: rgb(0,0,204)">;</SPAN><BR><BR><STRONG><FONT 
                                color=#ff0000>j <SPAN 
                                style="COLOR: rgb(0,0,204)">=</SPAN> 
                                jiffies</FONT></STRONG><SPAN 
                                style="COLOR: rgb(0,0,204)">;</SPAN> <SPAN 
                                style="COLOR: rgb(255,153,0)">/* read the 
                                current value */</SPAN><BR>stamp_1 <SPAN 
                                style="COLOR: rgb(0,0,204)">=</SPAN> j <SPAN 
                                style="COLOR: rgb(0,0,204)">+</SPAN> HZ<SPAN 
                                style="COLOR: rgb(0,0,204)">;</SPAN> <SPAN 
                                style="COLOR: rgb(255,153,0)">/* 1 second in the 
                                future */</SPAN><BR>stamp_half <SPAN 
                                style="COLOR: rgb(0,0,204)">=</SPAN> j <SPAN 
                                style="COLOR: rgb(0,0,204)">+</SPAN> HZ<SPAN 
                                style="COLOR: rgb(0,0,204)">/</SPAN>2<SPAN 
                                style="COLOR: rgb(0,0,204)">;</SPAN> <SPAN 
                                style="COLOR: rgb(255,153,0)">/* half a second 
                                */</SPAN><BR>stamp_n <SPAN 
                                style="COLOR: rgb(0,0,204)">=</SPAN> j <SPAN 
                                style="COLOR: rgb(0,0,204)">+</SPAN> n <SPAN 
                                style="COLOR: rgb(0,0,204)">*</SPAN> HZ <SPAN 
                                style="COLOR: rgb(0,0,204)">/</SPAN> 1000<SPAN 
                                style="COLOR: rgb(0,0,204)">;</SPAN> <SPAN 
                                style="COLOR: rgb(255,153,0)">/* n milliseconds 
                                */</SPAN></FONT></SPAN></CODE></P></TD></TR></TBODY></TABLE></P>
                              <P>以下是一些简单的工具宏及其定义: </P>
                              <P>
                              <TABLE style="BORDER-COLLAPSE: collapse" 
                              borderColor=#999999 cellSpacing=0 cellPadding=0 
                              width="95%" bgColor=#f1f1f1 border=1>
                                <TBODY>
                                <TR>
                                <TD>
                                <P 
                                style="MARGIN: 5px; LINE-HEIGHT: 150%"><CODE><SPAN 
                                style="COLOR: rgb(0,0,0)"><FONT face=新宋体><SPAN 
                                style="COLOR: rgb(0,0,204)">#</SPAN><SPAN 
                                style="COLOR: rgb(255,0,0)">define</SPAN> 
                                time_after<SPAN 
                                style="COLOR: rgb(0,0,204)">(</SPAN>a<SPAN 
                                style="COLOR: rgb(0,0,204)">,</SPAN>b<SPAN 
                                style="COLOR: rgb(0,0,204)">)</SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\<BR>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN 
                                style="COLOR: rgb(0,0,204)">(</SPAN>typecheck<SPAN 
                                style="COLOR: rgb(0,0,204)">(</SPAN><SPAN 
                                style="COLOR: rgb(0,0,255)">unsigned</SPAN> 
                                <SPAN 
                                style="COLOR: rgb(0,0,255)">long</SPAN><SPAN 
                                style="COLOR: rgb(0,0,204)">,</SPAN> a<SPAN 
                                style="COLOR: rgb(0,0,204)">)</SPAN> <SPAN 
                                style="COLOR: rgb(0,0,204)">&amp;</SPAN><SPAN 
                                style="COLOR: rgb(0,0,204)">&amp;</SPAN> 
                                \<BR>&nbsp;&nbsp;&nbsp;&nbsp; typecheck<SPAN 
                                style="COLOR: rgb(0,0,204)">(</SPAN><SPAN 
                                style="COLOR: rgb(0,0,255)">unsigned</SPAN> 
                                <SPAN 
                                style="COLOR: rgb(0,0,255)">long</SPAN><SPAN 
                                style="COLOR: rgb(0,0,204)">,</SPAN> b<SPAN 
                                style="COLOR: rgb(0,0,204)">)</SPAN> <SPAN 
                                style="COLOR: rgb(0,0,204)">&amp;</SPAN><SPAN 
                                style="COLOR: rgb(0,0,204)">&amp;</SPAN> 
                                \<BR>&nbsp;&nbsp;&nbsp;&nbsp; <SPAN 
                                style="COLOR: rgb(0,0,204)">(</SPAN><SPAN 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -