在 Windows 中读取 RTC

Read RTC in Windows

我不是 C/ASM 开发人员,我想使用 Windows 程序从 RTC 获取当前日期和时间。

Here,我找到了一个 C 代码来做这个。

我按以下方式更改了该代码,并使用 Visual Studio 2017 cl.exe 编译器编译它,没有错误和警告:

#include <stdio.h>

int main()
{
   unsigned char tvalue, index;

   printf("STARTING...\n");

   for(index = 0; index < 128; index++)
   {
      __asm
      {
         cli             /* Disable interrupts */
         mov al, index   /* Move index address */
                         /* since the 0x80 bit of al is not set, */
                         /* NMI is active */
         out 0x70, al    /* Copy address to CMOS register */
                         /* some kind of real delay here is probably best */
         in al, 0x71     /* Fetch 1 byte to al */
         sti             /* Enable interrupts */
         mov tvalue, al
      }

      printf("%u\n", (unsigned int)tvalue);
   }

   printf("FINISHED!\n");
   return 0;
}

当我尝试从命令提示符执行 exe 时,我什么也没看到,只看到 "STARTING...".

我做错了什么?

非常感谢。

您找到的示例代码是操作系统代码,而不是 Windows 代码。如果 Windows 允许随机进程与实时时钟等硬件设备随机交互,那将是一片混乱。操作系统有一个与实时时钟通信的驱动程序,它不允许进程随机访问它。

作为最明显的问题,您不能在现代操作系统 运行!

时禁用进程中断

I would like to get current date and time from RTC with a Windows program.

在 Windows 上,您使用 Windows APIs(或包装器)

读取系统时间的主要API有:

GetSystemTime

GetSystemTimePreciseAsFileTime

NtQuerySystemTime