《15_timearm-时钟--怎么用不是重点,重点是搞明白怎么把》-精选课件(公开PPT)

上传人:zhuma****mei2 文档编号:136362492 上传时间:2020-06-28 格式:PPT 页数:36 大小:1.43MB
返回 下载 相关 举报
《15_timearm-时钟--怎么用不是重点,重点是搞明白怎么把》-精选课件(公开PPT)_第1页
第1页 / 共36页
《15_timearm-时钟--怎么用不是重点,重点是搞明白怎么把》-精选课件(公开PPT)_第2页
第2页 / 共36页
《15_timearm-时钟--怎么用不是重点,重点是搞明白怎么把》-精选课件(公开PPT)_第3页
第3页 / 共36页
《15_timearm-时钟--怎么用不是重点,重点是搞明白怎么把》-精选课件(公开PPT)_第4页
第4页 / 共36页
《15_timearm-时钟--怎么用不是重点,重点是搞明白怎么把》-精选课件(公开PPT)_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《《15_timearm-时钟--怎么用不是重点,重点是搞明白怎么把》-精选课件(公开PPT)》由会员分享,可在线阅读,更多相关《《15_timearm-时钟--怎么用不是重点,重点是搞明白怎么把》-精选课件(公开PPT)(36页珍藏版)》请在金锄头文库上搜索。

1、Linux中的 时钟和定时测量,2020/6/22,嵌入式OS,2,定时测量,Linux内核提供两种主要的定时测量 获得当前的时间和日期 系统调用:time(), ftime()以及gettimeofday() 维持定时器 settimer(), alarm() 定时测量是由基于固定频率振荡器和计数器的几个硬件电路完成的 RTC等等,2020/6/22,嵌入式OS,3,Linux的计时体系结构,更新自系统启动以来所经过的时间-读RTC 更新时间和日期 确定当前进程的执行时间,考虑是否要抢占 更新资源使用统计计数 检查到期的软定时器 定时器是一种软件功能,即允许在将来的某个时刻,函数在给定的时间

2、间隔用完时被调用,2020/6/22,嵌入式OS,4,计时体系结构中的关键数据结构和变量,系统时钟sys_timer(arm的) 时钟中断发生源 参见sys_timer数据结构 Jiffies变量 Xtime变量,2020/6/22,嵌入式OS,5,include/asm-arm/mach/time.h,是系统的时钟中断源 提供了与具体时钟中断源的接口 注册方法:machine_desc.timer,2020/6/22,嵌入式OS,6,Jiffies变量,记录系统自启动以来系统产生的tick数 每次时钟中断1 关于jiffies_64,2020/6/22,嵌入式OS,7,Xtime变量,存放当

3、前时间和日期,kernel/time/timekeeping.c,2020/6/22,嵌入式OS,8,时间纪元 1970年1月1日(UTC)午夜,include/linux/time.h,2020/6/22,嵌入式OS,9,Xtime的更新,基本上每个tick更新一次 参见:update_wall_time 根据时钟源来更新xtime的秒数和纳秒数 时钟源,kernel/time/timekeeping.c,kernel/time/timekeeping.c,2020/6/22,嵌入式OS,10,Arm中的时钟中断源及其初始化,start_kernel,arch/arm/kernel/time

4、.c: time_init,setup_arch,初始化system_timer,调用system_timer的init函数指针,每个machine都有自己的machine_desc, 其中包括各自的时钟timer 查看machine_desc结构中的timer,2020/6/22,嵌入式OS,13,include/asm-arm/mach/arch.h,关于machine_arch_type,以s3c2410为例,include/asm-arm/mach-types.h,arch/arm/kernel/setup.c,以smdk2410为例,arch/arm/mach-s3c2410/mac

5、h-smdk2410.c 阅读其源码明确sys_time,arch/arm/plat-s3c24xx/time.c,2020/6/22,嵌入式OS,17,arch/arm/plat-s3c24xx/time.c,2020/6/22,嵌入式OS,18,s3c2410_timer_irq,arch/arm/plat-s3c24xx/time.c,2020/6/22,嵌入式OS,19,arch/arm/kernel/time.c,2020/6/22,嵌入式OS,20,kernel/timer.c,2020/6/22,嵌入式OS,21,Update_wall_time()完成变量xtime的更新,ke

6、rnel/timer.c,kernel/time/timekeeping.c,2020/6/22,嵌入式OS,22,Raise_softirq()激活本地CPU上的软件定时器中断任务队列。 Scheduler_tick该函数使当前进程的时间片计数器减一。,kernel/timer.c,以下是课后自学内容,2020/6/22,嵌入式OS,24,软定时器和延迟函数,软定时器 动态定时器(内核) 间隔定时器(可以用户) 延迟函数,2020/6/22,嵌入式OS,25,动态定时器,动态定时器被动态的创建和撤销,当前活动的动态定时器个数没有限制,include/linux/timer.h,2020/6/

7、22,嵌入式OS,26,创建并激活一个动态定时器,创建一个新的timer_list对象 调用init_timer初始化,并设置定时器要处理的函数和参数 设置定时时间 使用add_timer加入到合适的链表中 通常定时器只能执行一次,如果要周期性的执行,必须再次将其加入链表,2020/6/22,嵌入式OS,27,动态定时器的维护,2020/6/22,嵌入式OS,28,数据结构,kernel/timer.c,2020/6/22,嵌入式OS,29,处理,kernel/timer.c,kernel/timer.c,函数init_timers中,2020/6/22,嵌入式OS,30,kernel/tim

8、er.c,阅读kernel/timer.c,2020/6/22,嵌入式OS,31,动态定时器应用之delayed work,kernel/workqueue.c,include/linux/workqueue.h,2020/6/22,嵌入式OS,32,动态定时器应用之schedule_timeout,kernel/timer.c,2020/6/22,嵌入式OS,33,延迟函数,include/asm-arm/delay.h,参见arch/arm/lib/delay.S 常见手段: 执行一些特殊指令来消耗一些时间 执行一些循环来消耗时间,2020/6/22,嵌入式OS,34,与定时测量相关的系统调用,time() 返回从1970年1月1日凌晨0点开始的秒数 ftime() 返回从1970年1月1日凌晨0点开始的秒数以及最后一秒的毫秒数 数据结构为timeb gettimeofday() 返回从1970年1月1日凌晨0点开始的秒数 对应于sys_gettimeofday(),2020/6/22,嵌入式OS,35,settimer() 间隔定时器 频率:周期性的触发定时器(若为0,只触发一次) alarm() 引起SIGALARM信号,2020/6/22,嵌入式OS,36,与时钟相关的命令,date:显示或者更改系统时钟 使用time获得时钟 使用ctime改变时钟格式,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号