当前位置: 技术问答>linux和unix
linux系统时钟问题
来源: 互联网 发布时间:2016-08-08
本文导语: 我用do_gettimeofday这个函数得到的绝对时间和RTC时间比较会越来越慢, 比如我开机的时候得到的时间和RTC时间一样,后来逐渐就慢了,应该是可能是系统时间频率设置的问题。 还有我在驱动中用的mdelay延时5000毫秒竟然...
我用do_gettimeofday这个函数得到的绝对时间和RTC时间比较会越来越慢,
比如我开机的时候得到的时间和RTC时间一样,后来逐渐就慢了,应该是可能是系统时间频率设置的问题。
还有我在驱动中用的mdelay延时5000毫秒竟然超过5分钟,我内核是2.6.21得,ARM6410.
请知道的帮忙解答下,谢谢先!
比如我开机的时候得到的时间和RTC时间一样,后来逐渐就慢了,应该是可能是系统时间频率设置的问题。
还有我在驱动中用的mdelay延时5000毫秒竟然超过5分钟,我内核是2.6.21得,ARM6410.
请知道的帮忙解答下,谢谢先!
|
mdelay、udelay、ndelay是忙等实现的,对应的数量级不要混用
比如不要用udelay去等待1ms
此外,你这里的5000ms明显超过了一个jiffs,即一个时钟中断。
超过一个jiffs的延时只能使用内核定时器了,低于一个jiffs使用mdelay、udelay、ndelay
因为mdelay、udelay、ndelay是忙等实现的,在一个jiffs里不会被调度终结,才能正常工作
mdelay延时5000毫秒竟然超过5分钟,说明用了5分钟你的这个内核态的进程才的到了5s的时间片
do_gettimeofday依赖jiffs,嵌入式板子jiffs本身的精度就不高,跟rtc没法比
慢了正常
比如不要用udelay去等待1ms
此外,你这里的5000ms明显超过了一个jiffs,即一个时钟中断。
超过一个jiffs的延时只能使用内核定时器了,低于一个jiffs使用mdelay、udelay、ndelay
因为mdelay、udelay、ndelay是忙等实现的,在一个jiffs里不会被调度终结,才能正常工作
mdelay延时5000毫秒竟然超过5分钟,说明用了5分钟你的这个内核态的进程才的到了5s的时间片
do_gettimeofday依赖jiffs,嵌入式板子jiffs本身的精度就不高,跟rtc没法比
慢了正常
|
我知道就是嵌入式Linux需要单独弄一个守护进程,隔一段时间读取rtc日历时间来修改linux系统时间
真想不到除了RTC还有什么靠得住
真想不到除了RTC还有什么靠得住
|
开机会自动读取RTC时间作为系统时间