timer部分笔记

http://minano-notebook.wikidot.com/kernel-timer

用语

当前时间:当前的实际时间。用date命令得到的值

变量,数据结构:

xtime:基本上相当于当前时间,但xtime只能被定期更新,所以略微滞后于当前时间。
滞后的时间由get_nsec_offset获得,二者相加得到当前时间(严格说来不
是如此。
get_nsec_offset的值根据全局clock.cycle_last的值算
出,cycle_last的更新和xtime的更新并不同步)。

单调递增时钟:系统需要的一个计数器。并不能用来计量时间。

wall_to_monotonic:一个偏移量。xtime + wall_to_monotonic可以得到单调递增时
钟的值,但并没有实际的时间的含义。为了保证单调性,每次对xtime进行修
改后必须对wall_to_monotonic也进行修正。

struct clocksource:时钟源。里面的若干成员变量会被定期更新。

read():如果对应于硬件时钟,read函数返回计数值。

cycle_last:最近一次被更新的时间。在好几个地方可能被更新,包括
update_wall_time(),timekeeping_init(),timekeeping_resume()。

全局clock:当前正在使用的时钟源。

struct clock_event_device:可编程,定时产生事件(中断)的设备。一般在处理当次中断时设定下
次中断发生的时间。

unsigned long mult;
int shift

用于时间到计数器值的换算。cycle = (time * mult) » shift

int (*set_next_event)(unsigned long evt, struct clock_event_device *):

设定下次事件到来的时间

@evt:从现在到下次事件到来的时钟周期数。下次事件发生于当前时钟值加上evt值。
@struct clock_event_device *:不明

void (*event_handler)(struct clock_event_device *):

事件处理函数

next_event:下次事件发生的绝对时间

宏,函数:

__get_nsec_offset():全局clock.cycle_last最近的一次被更新后所经过的纳秒数。
全局clock.cycle_last被更新的地方参考clocksource.cycle_last。

__get_realtime_clock_ts():获取当前时间。timerspec格式。

read_persistent_clock():读取用电池供电的时钟值,只能精确到秒。如果没有该时钟返回0。

update_wall_time():根据时钟源更新xtime,clock.cycle_last等数据。

int clockevents_program_event(struct clock_event_device *dev, ktime_t expires,
ktime_t now)

设置dev指向的clock_event_device的下次event的时间。

@dev:clock_event_device结构体指针
@expires:下次event的绝对时间
@now:当前时间

KZM板相关

中断注册

setup_arch() -> mxc_init_time() -> setup_irq(INT_GPT, &timer_irq)

每秒中发生100次中断。

中断处理

mxc_timer_interrupt() ->
tick_handle_periodic() in gpt_clockevent ->
tick_periodic() ->
do_timer(1) ->
update_times() ->
update_wall_time

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值