- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
工作队列的实现 定义一个工作队列 struct work_struct my_wq; 定义一个处理函数 void my_wq_func(unsigned long) ; 初始化工作队列并将其与处理函数绑定 INIT_WORK(my_wq, (void (*)(void *)) my_wq_func, NULL); 调度工作队列执行 schedule_work(my_wq); 内核中的时间流 设备驱动程序需要获得时间信息以及定时服务,包括获取高低分辨率的时间 内核中关于时间的一个重要概念jiffies Jiffies每隔一个固定时间就会增加1,这个固定间隔由定时器中断来实现 每秒钟产生多少个定时器中断,由在linux/param.h中定义的宏HZ确定 获取当前时间 获取当前时间一般通过jiffies,通常用来测量不同事件之间的时间间隔 如果要获取当前时间,可以使用do_gettimeofday函数,该函数填充一个struct timeval结构,接近微秒的分辨率 调用get_fast_time,直接访问xtime变量(2.4) Current_kernel_time 延迟执行 驱动程序为了让硬件有足够的事件完成一些任务,常常需要将特定的代码延后一段时间来执行 长延迟,定义为延迟时间多于若干个jiffies,实现长延迟可以用查询jiffies的方法:timebefore(old_jiffies); timeafter(old_jiffies); 超时等待sleep_on_timeout函数,该函数在阻塞IO部分 另一种延迟方式是调用schedule_timeout 短延迟定义为延迟时间接近或短于一个jiffies 调用udelay和mdelay,忙等待函数,大量消耗CPU时间 函数udelay使用软件循环来延迟指定数目的微秒数 函数mdelay使用udelay嵌套来实现更长的毫秒级延迟 内核定时器 驱动程序可以注册一个内核定时器,来指定一个函数在未来某个时间执行 定时器只执行一次,当超时后就会被内核调用一次 超时值是一个jiffies值,当jiffies值大于超时值timer-expires时,timer-function函数就会被运行 内核定时器的实现 定义一个名为my_timer的定时器 struct timer_list my_timer; 初始化定时器 void init_timer(struct timer_list * timer); 初始化定时器并赋值其成员 static inline void setup_timer(struct timer_list * timer, void (*function)(unsigned long), unsigned long data) { timer-function = function; timer-data = data; init_timer(timer); } 增加定时器 void add_timer(struct timer_list * timer); 删除定时器 int del_timer(struct timer_list * timer); Linux中断及设备管理 本章的要求 第九章、Linux中断及设备管理 熟悉Linux中断的基本概念 熟悉Linux内核中断子系统 熟练Linux 中断处理程序的编写 熟悉Linux中断底半部机制 熟悉Linux设备管理 9.1 Linux中断的基本概念 * 中断的基本概念 中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的CPU暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务的程序中去,服务完毕后再返回去继续运行被暂时中断的程序。 Linux内核与中断相关的部分包括硬件中断、下半部任务和内核线程几种。 9.2 Linux内核中断子系统 * Linux内核中断子系统 体系结构对中断支持 ARM处理器异常处理与中断系统 内核的中断系统结构 中断服务程序注册与编写 中断处理 中断机制提供了硬件和软件之间异步传递信息的方式 硬件设备在发生某个事件时通过中断通知软件进行处理 中断实现了硬件设备按需获得处理器关注的机制,与查询方式相比可以大大节省CPU时间 Linux中断处理子系统 根据中断号找到正确的中断处理代码 Linux定义了名字为irq_desc的中断例程描述符表: (include/linux/irq.h) 该表struct irqdesc?结构组成 stru
您可能关注的文档
- 钳工技术 5 10章 第7章.PPT
- 钳工技术 5 10章 第8章.PPT
- 钳工技术 5 10章 第9章.PPT
- 钳工技术 5 10章 第10章.PPT
- 钳工技术 12章课件. 第1章.ppt
- 钳工技术 12章课件. 第2章.ppt
- 钳工技术 第3章 第3章划线.ppt
- 钳工技术 第4章 第4章 錾削锯削锉削.ppt
- 钳工技术 教学课件 作者 吴元祥陈刚 主编 1.ppt
- 钳工技术 教学课件 作者 吴元祥陈刚 主编 2.ppt
- 嵌入式操作系统开发与应用程序设计 教学课件 作者 978 7 302 20808 2 Ch01_嵌入式作業系統.ppt
- 嵌入式操作系统开发与应用程序设计 教学课件 作者 978 7 302 20808 2 Ch02_嵌入式系統軟體概論.ppt
- 嵌入式操作系统开发与应用程序设计 教学课件 作者 978 7 302 20808 2 Ch03_嵌入式作業系統建置.ppt
- 嵌入式操作系统开发与应用程序设计 教学课件 作者 978 7 302 20808 2 ch04_啟動程式.ppt
- 嵌入式操作系统开发与应用程序设计 教学课件 作者 978 7 302 20808 2 ch05_驅動程式.ppt
- 嵌入式操作系统开发与应用程序设计 教学课件 作者 978 7 302 20808 2 ch06_同步軟體設計.ppt
- 嵌入式操作系统开发与应用程序设计 教学课件 作者 978 7 302 20808 2 ch07_通訊服務.ppt
- 嵌入式操作系统开发与应用程序设计 教学课件 作者 978 7 302 20808 2 ch08_遠端桌面協定.ppt
- 嵌入式操作系统开发与应用程序设计 教学课件 作者 978 7 302 20808 2 ch09_網路程式開發.ppt
- 嵌入式操作系统开发与应用程序设计 教学课件 作者 978 7 302 20808 2 Ch10_多媒體技術.ppt
文档评论(0)