嵌入式学习资料之Linux内核定时器笔记.pptx

嵌入式学习资料之Linux内核定时器笔记.pptx

ID:48770346

大小:102.49 KB

页数:15页

时间:2020-01-23

嵌入式学习资料之Linux内核定时器笔记.pptx_第1页
嵌入式学习资料之Linux内核定时器笔记.pptx_第2页
嵌入式学习资料之Linux内核定时器笔记.pptx_第3页
嵌入式学习资料之Linux内核定时器笔记.pptx_第4页
嵌入式学习资料之Linux内核定时器笔记.pptx_第5页
资源描述:

《嵌入式学习资料之Linux内核定时器笔记.pptx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、嵌入式学习资料之Linux内核定时器笔记实时时钟(RTC)时间戳计时器(TSC)CPU本地定时器高精度时间定时器(HPET)ACPI电源管理定时器定时器的数据结构定时插补单处理器系统上的计时体系结构时钟中断处理程序多处理器系统上的计时体系全局时钟中断处理程序动态定时器RTC内核通过IRQ8上发出周期性的中断,频率在2-8192HZ之间,掉电后依然工作,内核通过访问0x70和0x71I/O端口访问RTC。嵌入式学习资料之实时时钟(RTC)利用CLK输入引线,接收外部振荡器的时钟信号,该计算器是利用64位的时间戳计时器寄存器来实现额,与可编程间隔定时器传递来的时间测

2、量相比,更为精确。可编程间隔定时器(PIT)PIT的作用类似于微波炉的闹钟,PIT永远以内核确定的固定频率发出中断,但频率不算高。嵌入式学习资料之时间戳计时器(TSC)利用PIC或者APIC总线的时钟计算。嵌入式学习资料之CPU本地定时器功能比较强大,家机很少用,也不用去记了。嵌入式学习资料高精度时间定时器(HPET)它的时钟信号拥有大约为3.58MHZ的固定频率,该设备实际上是一个简单的计数器,为了读取计算器的值,内核需要访问某个I/O端口,需要初始化嵌入式学习资料之ACPI电源管理定时器利用timer_opts描述定时器Timer_opts的数据结构Name

3、:标志定时器员的一个字符串Mark_offset:记录上一个节拍开始所经过的时间,由时钟中断处理程序调用Get_offset返回自上一个节拍开始所经过的时间Monotonic_clock:返回自内核初始化开始所经过的纳秒数Delay:等待制定数目的“循环”嵌入式学习资料:定时器的数据结构就好像我们要为1小时35分34秒进行定时,我们不可能用秒表去统计,肯定先使用计算时的表,再用计算分的,最后才用秒表,在80x86架构的定时器也会使用各种定时器去进行定时插补,我们可以通过cur_timer指针来实现。嵌入式学习资料:定时插补所有与定时有关的活动都是由IRQ线0上的

4、可编程间隔定时器的中断触发。初始化阶段1.初始化间,time_init()函数被调用来建立计时体系结构2.初始化xtime变量(xtime变量存放当前时间和日期,它是一个timespec类型的数据结构)3.初始化wall_to_monotonic变量,它跟xtime是同一类型的,但它存放将加在xtime上的描述和纳秒数,这样即使突发改变xtime也不会受到影响。4.看是否支持高精度计时器HPET5.调用select_timer()挑选系统中可利用的最好的定时资源,并让cur_timer变量指向该定时器6.调用setup_irq(0,&irq0)来创建与IRQ相应

5、的中断门。嵌入式学习资料:单处理器系统上的计时体系结构1.在xtime_lock顺序锁产生一个write_seqlock()来保护与定时相关的内核变量,这样防止中断让该进程被阻止。2.执行cur_timer定时器对象的mark_offset方法(记录上一个节拍开始所经过的时间,由时钟中断处理程序调用)3.调用do_timer_interrupt函数,步骤为a)使jiffies_64值增1b)调用updata_times()函数来更新系统日期和时间。嵌入式学习资料:时钟中断处理程序c)调用updata_process_times()函数为本地CPU执行几个与定时相

6、关的计数器作用。d)调用profile_tick()函数e)如果利用外部时钟来同步系统时钟,则每隔660秒,调用一次st_rtc_mmss()函数来调整实时时钟。f)调用write_sequnlokc()释放xtime_lock顺序锁。4.返回值1,报告中断已经有效地处理了。这个还算简单,接下来是多处理器系统上的计时体系设计。嵌入式学习资料初始化阶段通过calibrate_APIC_clock()计算本地APIC多久才产生一次中断。嵌入式学习资料:多处理器系统上的计时体系SMP版本的timer_interrupt()处理程序与UP版本的处理程序在几个地方有差异。

7、Timer_interrupt()调用函数do_timer_interrupt()向I/OAPIC芯片的一个端口写入,以应答定时器的中断要求。Updata_process_times()函数不被调用,因为该函数执行与特定CPU相关的操作Profile_tick()不被调用,因为该函数同样执行与特定CPU相关的操作。嵌入式学习资料:全局时钟中断处理程序这部分应用很容易,但要理解动态定时器的机理,真的囧,就说说用的部分吧。动态定时器存放在timer_list结构中Structtime_list{Structlist_headentry;Spinlock_tlock;

8、Unsignedlong

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。