RTC时间求问?

中文QNX 讨论: 欢迎大家灌水,讨论有关QNX 问题。

RTC时间求问?

帖子svenzhang » 周五 12月 12, 2014 1:31 pm

QNX中有没有修改RTC时间的接口啊?都是UTC的,改不了CMOS,有没有大虾能回答我一下,谢谢了 :D
svenzhang
Senior Member
 
帖子: 10
注册: 周五 12月 05, 2014 11:08 am

Re: RTC时间求问?

帖子svenzhang » 周三 10月 28, 2015 1:36 pm

这个问题已经解决了,为了方便大家,我将我的心得交流出来
在linux中有两个时间,一个是系统时间UTC,一个是CMOS中的叫做RTC。在操作系统刚起来的时候,会将读取RTC来初始化UTC。
RTC保存在CMOS RAM中,通常有128字节,但是记录时间只占用128字节中的一小部分,通常的日期和时间值占据前10个字节。有些机器在bios中看到的时间就是从CMOS中读取的值。
下面是CMOS RAM的表

偏移地址 内容 偏移地址 内容
0x00 秒 0x07 日
0x01 秒闹钟 0x08 月
0x02 分 0x09 年
0x03 分闹钟 0x0A (暂不考虑)
0x04 时 0x0B (暂不考虑)
0x05 时闹钟 0x0C (暂不考虑)
0X06 星期 0x0D (暂不考虑)

CMOS RAM的访问需要通过端口,端口地址0x70或者0x74是索引端口,指定要访问上表中的哪个数据,0x71或0x75是数据端口,读取你选择索引端口后得到的值。比如当前的小时数读取
mov al, 0x04
out 0x70, al
in al, 0x71
最后通用寄存器ax的低8位中保存的就是当前的小时数,换成qnx代码
ThreadCtl(...);
out(0x70, 0x04);
uint_8 hour = in(0x71);
打印出来看下,你可能会感觉错乱,感觉读出来的数据有的对,有的错的很离谱。别急如果你用的是printf("%d\n",...);那就好办,把%d换成%x就OK了,应为CMOS RAM是BCD编码的。具体什么是BCD编码我就不啰嗦了,
自己试几遍就悟出来了。
svenzhang
Senior Member
 
帖子: 10
注册: 周五 12月 05, 2014 11:08 am


回到 四海同心QNX论坛

在线用户

正在浏览此版面的用户:Majestic-12 [Bot] 和 5 位游客

cron