【微信群问题讨论】系统级的timer的应用场景是怎样的?
本文是原「蜗窝讨论区」的历史存档(2017-07-17),来自版块「Linux kernel技术问答」,共 1 帖。讨论区已停止服务,此处仅供查阅。
请教个问题:SoC(ARM base)里边除了core里边的local timer,都还会做几个系统级的timer,不知道群里边是否有人用过这些timer,一般的应用场景是什么样的?谢谢!
1、作为local timer的备用。当CPU core进入idle状态的时候,如果local timer 在某个C state 会被stop,software timer无法驱动(内核中的高精度timer和低精度timer都是基于local tick device的,local timer停摆,也就无法触发timer中断了),系统必须提供一个系统级别的timer来完成唤醒cpu的功能,这也就是broadcast tick device了。 怎么选择broadcast tick device呢?能作为broadcast timer需要满足:1. cpuidle中不掉电,2.尽量支持oneshot mode,3.能产生event中断, 4 count 要尽量大. 如果系统中多个broadcast timer 可用,通过注册时给的rating值选择最佳的一个.
2、系统休眠中作为一个唤醒源使用。比如说系统休眠了,只有32k时钟了,cpu core timer一般就不能用了,可以用系统级别的 timer维持系统时钟,也可以用该timer中断来唤醒。需要注意的是,这个系统级别的timer需要谨慎的设计供电域和clock domain。
3、这些timer可以用于外部信号的,比如产生一个PWM脉冲,驱动红外或者其他外设。
4、可以做sched clock。
